summaryrefslogtreecommitdiff
path: root/cli/tests
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tests')
-rw-r--r--cli/tests/integration/npm_tests.rs71
1 files changed, 71 insertions, 0 deletions
diff --git a/cli/tests/integration/npm_tests.rs b/cli/tests/integration/npm_tests.rs
index 73ac029df..bd19ed26f 100644
--- a/cli/tests/integration/npm_tests.rs
+++ b/cli/tests/integration/npm_tests.rs
@@ -1,6 +1,7 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
use deno_core::serde_json;
+use deno_core::serde_json::json;
use deno_core::serde_json::Value;
use pretty_assertions::assert_eq;
use std::process::Stdio;
@@ -1924,3 +1925,73 @@ pub fn node_modules_dir_config_file() {
.run();
assert!(node_modules_dir.exists());
}
+
+#[test]
+fn top_level_install_package_json_explicit_opt_in() {
+ let test_context = TestContextBuilder::for_npm().use_temp_cwd().build();
+ let temp_dir = test_context.temp_dir();
+ let node_modules_dir = temp_dir.path().join("node_modules");
+ let rm_created_files = || {
+ std::fs::remove_dir_all(&node_modules_dir).unwrap();
+ std::fs::remove_file(temp_dir.path().join("deno.lock")).unwrap();
+ };
+
+ // when the node_modules_dir is explicitly opted into, we should always
+ // ensure a top level package.json install occurs
+ temp_dir.write("deno.json", "{ \"nodeModulesDir\": true }");
+ temp_dir.write(
+ "package.json",
+ "{ \"dependencies\": { \"@denotest/esm-basic\": \"1.0\" }}",
+ );
+
+ temp_dir.write("main.ts", "console.log(5);");
+ let output = test_context.new_command().args("cache main.ts").run();
+ output.assert_matches_text(
+ concat!(
+ "Download http://localhost:4545/npm/registry/@denotest/esm-basic\n",
+ "Download http://localhost:4545/npm/registry/@denotest/esm-basic/1.0.0.tgz\n",
+ "Initialize @denotest/esm-basic@1.0.0\n",
+ )
+ );
+
+ rm_created_files();
+ let output = test_context
+ .new_command()
+ .args_vec(["eval", "console.log(5)"])
+ .run();
+ output.assert_matches_text(concat!(
+ "Initialize @denotest/esm-basic@1.0.0\n",
+ "5\n"
+ ));
+
+ rm_created_files();
+ let output = test_context
+ .new_command()
+ .args("run -")
+ .stdin("console.log(5)")
+ .run();
+ output.assert_matches_text(concat!(
+ "Initialize @denotest/esm-basic@1.0.0\n",
+ "5\n"
+ ));
+
+ // now ensure this is cached in the lsp
+ rm_created_files();
+ let mut client = test_context.new_lsp_command().build();
+ client.initialize_default();
+ let file_uri = temp_dir.uri().join("file.ts").unwrap();
+ client.did_open(json!({
+ "textDocument": {
+ "uri": file_uri,
+ "languageId": "typescript",
+ "version": 1,
+ "text": "",
+ }
+ }));
+ client.write_request(
+ "deno/cache",
+ json!({ "referrer": { "uri": file_uri }, "uris": [] }),
+ );
+
+ assert!(node_modules_dir.join("@denotest").exists());
+}