summaryrefslogtreecommitdiff
path: root/cli/tests/integration/run_tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tests/integration/run_tests.rs')
-rw-r--r--cli/tests/integration/run_tests.rs154
1 files changed, 139 insertions, 15 deletions
diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs
index b4ce77f0c..0b9f50fc3 100644
--- a/cli/tests/integration/run_tests.rs
+++ b/cli/tests/integration/run_tests.rs
@@ -1042,21 +1042,8 @@ fn lock_deno_json_package_json_deps() {
.run()
.skip_output_check();
let lockfile = temp_dir.join("deno.lock");
- // todo(dsherret): it would be nice if the test server didn't produce
- // different hashes depending on what operating system it's running on
- let esm_basic_integrity = lockfile
- .read_json_value()
- .get("packages")
- .unwrap()
- .get("npm")
- .unwrap()
- .get("@denotest/esm-basic@1.0.0")
- .unwrap()
- .get("integrity")
- .unwrap()
- .as_str()
- .unwrap()
- .to_string();
+ let esm_basic_integrity =
+ get_lockfile_npm_package_integrity(&lockfile, "@denotest/esm-basic@1.0.0");
lockfile.assert_matches_json(json!({
"version": "3",
"packages": {
@@ -1179,6 +1166,143 @@ fn lock_deno_json_package_json_deps() {
}));
}
+#[test]
+fn lock_deno_json_package_json_deps_workspace() {
+ let context = TestContextBuilder::new()
+ .use_temp_cwd()
+ .use_http_server()
+ .add_npm_env_vars()
+ .add_jsr_env_vars()
+ .build();
+ let temp_dir = context.temp_dir().path();
+
+ // deno.json
+ let deno_json = temp_dir.join("deno.json");
+ deno_json.write_json(&json!({}));
+
+ // package.json
+ let package_json = temp_dir.join("package.json");
+ package_json.write_json(&json!({
+ "workspaces": ["package-a"],
+ "dependencies": {
+ "@denotest/cjs-default-export": "1"
+ }
+ }));
+ // main.ts
+ let main_ts = temp_dir.join("main.ts");
+ main_ts.write("import '@denotest/cjs-default-export';");
+
+ // package-a/package.json
+ let a_package = temp_dir.join("package-a");
+ a_package.create_dir_all();
+ let a_package_json = a_package.join("package.json");
+ a_package_json.write_json(&json!({
+ "dependencies": {
+ "@denotest/esm-basic": "1"
+ }
+ }));
+ // package-a/main.ts
+ let main_ts = a_package.join("main.ts");
+ main_ts.write("import '@denotest/esm-basic';");
+ context
+ .new_command()
+ .args("run package-a/main.ts")
+ .run()
+ .skip_output_check();
+ let lockfile = temp_dir.join("deno.lock");
+ let esm_basic_integrity =
+ get_lockfile_npm_package_integrity(&lockfile, "@denotest/esm-basic@1.0.0");
+
+ // no "workspace" because deno isn't smart enough to figure this out yet
+ // since it discovered the package.json in a folder different from the lockfile
+ lockfile.assert_matches_json(json!({
+ "version": "3",
+ "packages": {
+ "specifiers": {
+ "npm:@denotest/esm-basic@1": "npm:@denotest/esm-basic@1.0.0"
+ },
+ "npm": {
+ "@denotest/esm-basic@1.0.0": {
+ "integrity": esm_basic_integrity,
+ "dependencies": {}
+ }
+ }
+ },
+ "remote": {},
+ }));
+
+ // run a command that causes discovery of the root package.json beside the lockfile
+ context
+ .new_command()
+ .args("run main.ts")
+ .run()
+ .skip_output_check();
+ // now we should see the dependencies
+ let cjs_default_export_integrity = get_lockfile_npm_package_integrity(
+ &lockfile,
+ "@denotest/cjs-default-export@1.0.0",
+ );
+ let expected_lockfile = json!({
+ "version": "3",
+ "packages": {
+ "specifiers": {
+ "npm:@denotest/cjs-default-export@1": "npm:@denotest/cjs-default-export@1.0.0",
+ "npm:@denotest/esm-basic@1": "npm:@denotest/esm-basic@1.0.0"
+ },
+ "npm": {
+ "@denotest/cjs-default-export@1.0.0": {
+ "integrity": cjs_default_export_integrity,
+ "dependencies": {}
+ },
+ "@denotest/esm-basic@1.0.0": {
+ "integrity": esm_basic_integrity,
+ "dependencies": {}
+ }
+ }
+ },
+ "remote": {},
+ "workspace": {
+ "packageJson": {
+ "dependencies": [
+ "npm:@denotest/cjs-default-export@1"
+ ]
+ }
+ }
+ });
+ lockfile.assert_matches_json(expected_lockfile.clone());
+
+ // now run the command again in the package with the nested package.json
+ context
+ .new_command()
+ .args("run package-a/main.ts")
+ .run()
+ .skip_output_check();
+ // the lockfile should stay the same as the above because the package.json
+ // was found in a different directory
+ lockfile.assert_matches_json(expected_lockfile.clone());
+}
+
+fn get_lockfile_npm_package_integrity(
+ lockfile: &PathRef,
+ package_name: &str,
+) -> String {
+ // todo(dsherret): it would be nice if the test server didn't produce
+ // different hashes depending on what operating system it's running on
+ lockfile
+ .read_json_value()
+ .get("packages")
+ .unwrap()
+ .get("npm")
+ .unwrap()
+ .get(package_name)
+ .unwrap()
+ .get("integrity")
+ .unwrap()
+ .as_str()
+ .unwrap()
+ .to_string()
+}
+
itest!(mts_dmts_mjs {
args: "run subdir/import.mts",
output: "run/mts_dmts_mjs.out",