diff options
Diffstat (limited to 'cli/tests/integration/run_tests.rs')
-rw-r--r-- | cli/tests/integration/run_tests.rs | 154 |
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", |