diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/integration/lsp_tests.rs | 50 | ||||
-rw-r--r-- | tests/util/server/src/builders.rs | 8 | ||||
-rw-r--r-- | tests/util/server/src/lsp.rs | 19 |
3 files changed, 75 insertions, 2 deletions
diff --git a/tests/integration/lsp_tests.rs b/tests/integration/lsp_tests.rs index 9348d625c..862de41f6 100644 --- a/tests/integration/lsp_tests.rs +++ b/tests/integration/lsp_tests.rs @@ -11787,6 +11787,56 @@ fn lsp_jupyter_byonm_diagnostics() { } #[test] +fn lsp_deno_future_env_byonm() { + let context = TestContextBuilder::for_npm() + .env("DENO_FUTURE", "1") + .use_temp_cwd() + .build(); + let temp_dir = context.temp_dir(); + temp_dir.path().join("package.json").write_json(&json!({ + "dependencies": { + "@denotest/esm-basic": "*", + }, + })); + context.run_npm("install"); + let mut client = context.new_lsp_command().build(); + client.initialize_default(); + let diagnostics = client.did_open(json!({ + "textDocument": { + "uri": temp_dir.uri().join("file.ts").unwrap(), + "languageId": "typescript", + "version": 1, + "text": r#" + import "npm:chalk"; + import "@denotest/esm-basic"; + "#, + }, + })); + assert_eq!( + json!(diagnostics.all()), + json!([ + { + "range": { + "start": { + "line": 1, + "character": 15, + }, + "end": { + "line": 1, + "character": 26, + }, + }, + "severity": 1, + "code": "resolver-error", + "source": "deno", + "message": format!("Could not find a matching package for 'npm:chalk' in '{}'. You must specify this as a package.json dependency when the node_modules folder is not managed by Deno.", temp_dir.path().join("package.json")), + }, + ]) + ); + client.shutdown(); +} + +#[test] fn lsp_sloppy_imports_warn() { let context = TestContextBuilder::new().use_temp_cwd().build(); let temp_dir = context.temp_dir(); diff --git a/tests/util/server/src/builders.rs b/tests/util/server/src/builders.rs index 8c93ceeb0..9490c4c44 100644 --- a/tests/util/server/src/builders.rs +++ b/tests/util/server/src/builders.rs @@ -292,9 +292,13 @@ impl TestContext { } pub fn new_lsp_command(&self) -> LspClientBuilder { - LspClientBuilder::new_with_dir(self.deno_dir.clone()) + let mut builder = LspClientBuilder::new_with_dir(self.deno_dir.clone()) .deno_exe(&self.deno_exe) - .set_root_dir(self.temp_dir.path().clone()) + .set_root_dir(self.temp_dir.path().clone()); + for (key, value) in &self.envs { + builder = builder.env(key, value); + } + builder } pub fn run_npm(&self, args: impl AsRef<str>) { diff --git a/tests/util/server/src/lsp.rs b/tests/util/server/src/lsp.rs index cc6808390..be455b463 100644 --- a/tests/util/server/src/lsp.rs +++ b/tests/util/server/src/lsp.rs @@ -33,7 +33,10 @@ use serde::Serialize; use serde_json::json; use serde_json::to_value; use serde_json::Value; +use std::collections::HashMap; use std::collections::HashSet; +use std::ffi::OsStr; +use std::ffi::OsString; use std::io; use std::io::BufRead; use std::io::BufReader; @@ -465,6 +468,7 @@ pub struct LspClientBuilder { root_dir: PathRef, use_diagnostic_sync: bool, deno_dir: TempDir, + envs: HashMap<OsString, OsString>, } impl LspClientBuilder { @@ -481,6 +485,7 @@ impl LspClientBuilder { root_dir: deno_dir.path().clone(), use_diagnostic_sync: true, deno_dir, + envs: Default::default(), } } @@ -514,6 +519,17 @@ impl LspClientBuilder { self } + pub fn env( + mut self, + key: impl AsRef<OsStr>, + value: impl AsRef<OsStr>, + ) -> Self { + self + .envs + .insert(key.as_ref().to_owned(), value.as_ref().to_owned()); + self + } + pub fn build(&self) -> LspClient { self.build_result().unwrap() } @@ -534,6 +550,9 @@ impl LspClientBuilder { .arg("lsp") .stdin(Stdio::piped()) .stdout(Stdio::piped()); + for (key, value) in &self.envs { + command.env(key, value); + } if self.capture_stderr { command.stderr(Stdio::piped()); } else if !self.print_stderr { |