summaryrefslogtreecommitdiff
path: root/cli/tests/integration/npm_tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tests/integration/npm_tests.rs')
-rw-r--r--cli/tests/integration/npm_tests.rs178
1 files changed, 177 insertions, 1 deletions
diff --git a/cli/tests/integration/npm_tests.rs b/cli/tests/integration/npm_tests.rs
index 5dae2fd1c..87e853850 100644
--- a/cli/tests/integration/npm_tests.rs
+++ b/cli/tests/integration/npm_tests.rs
@@ -1002,7 +1002,7 @@ fn lock_file_missing_top_level_package() {
let stderr = String::from_utf8(output.stderr).unwrap();
assert_eq!(
stderr,
- "error: the lockfile (deno.lock) is corrupt. You can recreate it with --lock-write\n"
+ "error: failed reading lockfile 'deno.lock'\n\nCaused by:\n the lockfile is corrupt. You can recreate it with --lock-write\n"
);
}
@@ -1054,6 +1054,182 @@ fn auto_discover_lock_file() {
));
}
+#[test]
+fn peer_deps_with_copied_folders_and_lockfile() {
+ let _server = http_server();
+
+ let deno_dir = util::new_deno_dir();
+ let temp_dir = util::TempDir::new();
+
+ // write empty config file
+ temp_dir.write("deno.json", "{}");
+ let test_folder_path = test_util::testdata_path()
+ .join("npm")
+ .join("peer_deps_with_copied_folders");
+ let main_contents =
+ std::fs::read_to_string(test_folder_path.join("main.ts")).unwrap();
+ temp_dir.write("./main.ts", main_contents);
+
+ let deno = util::deno_cmd_with_deno_dir(&deno_dir)
+ .current_dir(temp_dir.path())
+ .arg("run")
+ .arg("--unstable")
+ .arg("-A")
+ .arg("main.ts")
+ .envs(env_vars())
+ .stdout(Stdio::piped())
+ .stderr(Stdio::piped())
+ .spawn()
+ .unwrap();
+ let output = deno.wait_with_output().unwrap();
+ assert!(output.status.success());
+
+ let expected_output =
+ std::fs::read_to_string(test_folder_path.join("main.out")).unwrap();
+
+ assert_eq!(String::from_utf8(output.stderr).unwrap(), expected_output);
+
+ assert!(temp_dir.path().join("deno.lock").exists());
+ let grandchild_path = deno_dir
+ .path()
+ .join("npm")
+ .join("localhost_4545")
+ .join("npm")
+ .join("registry")
+ .join("@denotest")
+ .join("peer-dep-test-grandchild");
+ assert!(grandchild_path.join("1.0.0").exists());
+ assert!(grandchild_path.join("1.0.0_1").exists()); // copy folder, which is hardlinked
+
+ // run again
+ let deno = util::deno_cmd_with_deno_dir(&deno_dir)
+ .current_dir(temp_dir.path())
+ .arg("run")
+ .arg("--unstable")
+ .arg("-A")
+ .arg("main.ts")
+ .envs(env_vars())
+ .stdout(Stdio::piped())
+ .stderr(Stdio::piped())
+ .spawn()
+ .unwrap();
+ let output = deno.wait_with_output().unwrap();
+ assert_eq!(String::from_utf8(output.stderr).unwrap(), "1\n2\n");
+ assert!(output.status.success());
+
+ let deno = util::deno_cmd_with_deno_dir(&deno_dir)
+ .current_dir(temp_dir.path())
+ .arg("run")
+ .arg("--unstable")
+ .arg("--reload")
+ .arg("-A")
+ .arg("main.ts")
+ .envs(env_vars())
+ .stdout(Stdio::piped())
+ .stderr(Stdio::piped())
+ .spawn()
+ .unwrap();
+ let output = deno.wait_with_output().unwrap();
+ assert_eq!(String::from_utf8(output.stderr).unwrap(), expected_output);
+ assert!(output.status.success());
+
+ // now run with local node modules
+ let deno = util::deno_cmd_with_deno_dir(&deno_dir)
+ .current_dir(temp_dir.path())
+ .arg("run")
+ .arg("--unstable")
+ .arg("--node-modules-dir")
+ .arg("-A")
+ .arg("main.ts")
+ .envs(env_vars())
+ .stdout(Stdio::piped())
+ .stderr(Stdio::piped())
+ .spawn()
+ .unwrap();
+ let output = deno.wait_with_output().unwrap();
+ assert_eq!(String::from_utf8(output.stderr).unwrap(), "1\n2\n");
+ assert!(output.status.success());
+
+ let deno_folder = temp_dir.path().join("node_modules").join(".deno");
+ assert!(deno_folder
+ .join("@denotest+peer-dep-test-grandchild@1.0.0")
+ .exists());
+ assert!(deno_folder
+ .join("@denotest+peer-dep-test-grandchild@1.0.0_1")
+ .exists()); // copy folder
+
+ // now again run with local node modules
+ let deno = util::deno_cmd_with_deno_dir(&deno_dir)
+ .current_dir(temp_dir.path())
+ .arg("run")
+ .arg("--unstable")
+ .arg("--node-modules-dir")
+ .arg("-A")
+ .arg("main.ts")
+ .envs(env_vars())
+ .stdout(Stdio::piped())
+ .stderr(Stdio::piped())
+ .spawn()
+ .unwrap();
+ let output = deno.wait_with_output().unwrap();
+ assert!(output.status.success());
+ assert_eq!(String::from_utf8(output.stderr).unwrap(), "1\n2\n");
+
+ // now ensure it works with reloading
+ let deno = util::deno_cmd_with_deno_dir(&deno_dir)
+ .current_dir(temp_dir.path())
+ .arg("run")
+ .arg("--unstable")
+ .arg("--node-modules-dir")
+ .arg("--reload")
+ .arg("-A")
+ .arg("main.ts")
+ .envs(env_vars())
+ .stdout(Stdio::piped())
+ .stderr(Stdio::piped())
+ .spawn()
+ .unwrap();
+ let output = deno.wait_with_output().unwrap();
+ assert!(output.status.success());
+ assert_eq!(String::from_utf8(output.stderr).unwrap(), expected_output);
+
+ // now ensure it works with reloading and no lockfile
+ let deno = util::deno_cmd_with_deno_dir(&deno_dir)
+ .current_dir(temp_dir.path())
+ .arg("run")
+ .arg("--unstable")
+ .arg("--node-modules-dir")
+ .arg("--no-lock")
+ .arg("--reload")
+ .arg("-A")
+ .arg("main.ts")
+ .envs(env_vars())
+ .stdout(Stdio::piped())
+ .stderr(Stdio::piped())
+ .spawn()
+ .unwrap();
+ let output = deno.wait_with_output().unwrap();
+ assert_eq!(String::from_utf8(output.stderr).unwrap(), expected_output,);
+ assert!(output.status.success());
+}
+
+itest!(info_peer_deps {
+ args: "info --quiet --unstable npm/peer_deps_with_copied_folders/main.ts",
+ output: "npm/peer_deps_with_copied_folders/main_info.out",
+ exit_code: 0,
+ envs: env_vars(),
+ http_server: true,
+});
+
+itest!(info_peer_deps_json {
+ args:
+ "info --quiet --unstable --json npm/peer_deps_with_copied_folders/main.ts",
+ output: "npm/peer_deps_with_copied_folders/main_info_json.out",
+ exit_code: 0,
+ envs: env_vars(),
+ http_server: true,
+});
+
fn env_vars_no_sync_download() -> Vec<(String, String)> {
vec![
("DENO_NODE_COMPAT_URL".to_string(), util::std_file_url()),