summaryrefslogtreecommitdiff
path: root/cli/tests
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-08-01 20:49:09 -0400
committerGitHub <noreply@github.com>2023-08-02 00:49:09 +0000
commit1cefa831fd74b14121494045a347024502d74e34 (patch)
treecc7791cf674e427fe4165262db416e6c537e99a3 /cli/tests
parent36ae37604a0ddab4349df6eb6fafb8ae39fd20fc (diff)
feat(unstable): optional `deno_modules` directory (#19977)
Closes #15633
Diffstat (limited to 'cli/tests')
-rw-r--r--cli/tests/integration/lsp_tests.rs94
-rw-r--r--cli/tests/integration/run_tests.rs106
-rw-r--r--cli/tests/testdata/run/with_package_json/.gitignore1
3 files changed, 196 insertions, 5 deletions
diff --git a/cli/tests/integration/lsp_tests.rs b/cli/tests/integration/lsp_tests.rs
index a1a2b0258..a073cf30d 100644
--- a/cli/tests/integration/lsp_tests.rs
+++ b/cli/tests/integration/lsp_tests.rs
@@ -6643,7 +6643,7 @@ fn lsp_cache_location() {
);
let cache_path = temp_dir.path().join(".cache");
assert!(cache_path.is_dir());
- assert!(cache_path.join("gen").is_dir());
+ assert!(!cache_path.join("gen").is_dir()); // not created because no emitting has occurred
client.shutdown();
}
@@ -8766,3 +8766,95 @@ fn lsp_node_modules_dir() {
client.shutdown();
}
+
+#[test]
+fn lsp_deno_modules_dir() {
+ let context = TestContextBuilder::new()
+ .use_http_server()
+ .use_temp_cwd()
+ .build();
+ let temp_dir = context.temp_dir();
+
+ let mut client = 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": "import { returnsHi } from 'http://localhost:4545/subdir/mod1.ts'; console.log(returnsHi());",
+ }
+ }));
+ let cache = |client: &mut LspClient| {
+ client.write_request(
+ "deno/cache",
+ json!({
+ "referrer": {
+ "uri": file_uri,
+ },
+ "uris": [
+ {
+ "uri": "http://localhost:4545/subdir/mod1.ts",
+ }
+ ]
+ }),
+ );
+ };
+
+ cache(&mut client);
+
+ assert!(!temp_dir.path().join("deno_modules").exists());
+
+ temp_dir.write(
+ temp_dir.path().join("deno.json"),
+ "{ \"denoModulesDir\": true, \"lock\": false }\n",
+ );
+ let refresh_config = |client: &mut LspClient| {
+ client.write_notification(
+ "workspace/didChangeConfiguration",
+ json!({
+ "settings": {
+ "enable": true,
+ "config": "./deno.json",
+ }
+ }),
+ );
+
+ let request = json!([{
+ "enable": true,
+ "config": "./deno.json",
+ "codeLens": {
+ "implementations": true,
+ "references": true
+ },
+ "importMap": null,
+ "lint": false,
+ "suggest": {
+ "autoImports": true,
+ "completeFunctionCalls": false,
+ "names": true,
+ "paths": true,
+ "imports": {}
+ },
+ "unstable": false
+ }]);
+ // one for the workspace
+ client.handle_configuration_request(request.clone());
+ // one for the specifier
+ client.handle_configuration_request(request);
+ };
+ refresh_config(&mut client);
+
+ let diagnostics = client.read_diagnostics();
+ assert_eq!(diagnostics.all().len(), 0, "{:#?}", diagnostics); // cached
+
+ // no caching necessary because it was already cached. It should exist now
+
+ assert!(temp_dir
+ .path()
+ .join("deno_modules/http_localhost_4545/subdir/mod1.ts")
+ .exists());
+
+ client.shutdown();
+}
diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs
index 41711e678..9720f2577 100644
--- a/cli/tests/integration/run_tests.rs
+++ b/cli/tests/integration/run_tests.rs
@@ -96,11 +96,17 @@ itest!(_017_import_redirect {
output: "run/017_import_redirect.ts.out",
});
-itest!(_017_import_redirect_nocheck {
- args: "run --quiet --reload --no-check run/017_import_redirect.ts",
+itest!(_017_import_redirect_check {
+ args: "run --quiet --reload --check run/017_import_redirect.ts",
output: "run/017_import_redirect.ts.out",
});
+itest!(_017_import_redirect_deno_modules_dir {
+ args: "run --quiet --reload --deno-modules-dir --check $TESTDATA/run/017_import_redirect.ts",
+ output: "run/017_import_redirect.ts.out",
+ temp_cwd: true,
+});
+
itest!(_017_import_redirect_info {
args: "info --quiet --reload run/017_import_redirect.ts",
output: "run/017_import_redirect_info.out",
@@ -156,6 +162,14 @@ itest!(_027_redirect_typescript {
http_server: true,
});
+itest!(_027_redirect_typescript_deno_modules_dir {
+ args:
+ "run --quiet --reload --deno-modules-dir $TESTDATA/run/027_redirect_typescript.ts",
+ output: "run/027_redirect_typescript.ts.out",
+ http_server: true,
+ temp_cwd: true,
+});
+
itest!(_028_args {
args:
"run --quiet --reload run/028_args.ts --arg1 val1 --arg2=val2 -- arg3 arg4",
@@ -186,6 +200,14 @@ itest!(_033_import_map_remote {
http_server: true,
});
+itest!(_033_import_map_deno_modules_dir_remote {
+ args:
+ "run --quiet --reload --import-map=http://127.0.0.1:4545/import_maps/import_map_remote.json --deno-modules-dir --unstable $TESTDATA/import_maps/test_remote.ts",
+ output: "run/033_import_map_remote.out",
+ http_server: true,
+ temp_cwd: true,
+});
+
itest!(_033_import_map_data_uri {
args:
"run --quiet --reload --import-map=data:application/json;charset=utf-8;base64,ewogICJpbXBvcnRzIjogewogICAgInRlc3Rfc2VydmVyLyI6ICJodHRwOi8vbG9jYWxob3N0OjQ1NDUvIgogIH0KfQ== run/import_maps/test_data.ts",
@@ -1653,6 +1675,14 @@ itest!(jsx_import_source_pragma_with_config_no_check {
http_server: true,
});
+itest!(jsx_import_source_pragma_with_config_deno_modules_dir {
+ args: "run --reload --config jsx/deno-jsx.jsonc --no-lock --deno-modules-dir $TESTDATA/run/jsx_import_source_pragma.tsx",
+ output: "run/jsx_import_source.out",
+ http_server: true,
+ temp_cwd: true,
+ copy_temp_dir: Some("jsx/"),
+});
+
itest!(jsx_import_source_no_pragma_no_check {
args:
"run --reload --config jsx/deno-jsx.jsonc --no-lock --no-check run/jsx_import_source_no_pragma.tsx",
@@ -1706,6 +1736,13 @@ itest!(reference_types_error {
exit_code: 1,
});
+itest!(reference_types_error_deno_modules_dir {
+ args:
+ "run --config run/checkjs.tsconfig.json --check --deno-modules-dir $TESTDATA/run/reference_types_error.js",
+ output: "run/reference_types_error.js.out",
+ exit_code: 1,
+});
+
itest!(reference_types_error_no_check {
args: "run --no-check run/reference_types_error.js",
output_str: Some(""),
@@ -3000,7 +3037,7 @@ itest!(
args: "run -A main.js",
output: "run/with_package_json/no_deno_json/sub_dir/main.out",
cwd: Some("run/with_package_json/no_deno_json/sub_dir"),
- copy_temp_dir: Some("run/with_package_json/"),
+ copy_temp_dir: Some("run/with_package_json/no_deno_json/"),
envs: env_vars_for_npm_tests_no_sync_download(),
http_server: true,
}
@@ -4424,3 +4461,66 @@ itest!(extension_dynamic_import {
output: "run/extension_dynamic_import.ts.out",
exit_code: 1,
});
+
+#[test]
+pub fn deno_modules_dir_config_file() {
+ let test_context = TestContextBuilder::new()
+ .use_http_server()
+ .use_temp_cwd()
+ .build();
+ let temp_dir = test_context.temp_dir();
+ let deno_modules_dir = temp_dir.path().join("deno_modules");
+ let rm_deno_modules = || std::fs::remove_dir_all(&deno_modules_dir).unwrap();
+
+ temp_dir.write("deno.json", r#"{ "denoModulesDir": true }"#);
+ temp_dir.write(
+ "main.ts",
+ r#"import { returnsHi } from 'http://localhost:4545/subdir/mod1.ts';
+console.log(returnsHi());"#,
+ );
+
+ let deno_run_cmd = test_context.new_command().args("run --quiet main.ts");
+ deno_run_cmd.run().assert_matches_text("Hi\n");
+
+ assert!(deno_modules_dir.exists());
+ rm_deno_modules();
+ temp_dir.write("deno.json", r#"{ "denoModulesDir": false }"#);
+
+ deno_run_cmd.run().assert_matches_text("Hi\n");
+ assert!(!deno_modules_dir.exists());
+ test_context
+ .new_command()
+ .args("cache --quiet --deno-modules-dir main.ts")
+ .run();
+ assert!(deno_modules_dir.exists());
+ rm_deno_modules();
+
+ temp_dir.write("deno.json", r#"{ "denoModulesDir": true }"#);
+ let cache_command = test_context.new_command().args("cache --quiet main.ts");
+ cache_command.run();
+
+ assert!(deno_modules_dir.exists());
+ let mod1_file = deno_modules_dir
+ .join("http_localhost_4545")
+ .join("subdir")
+ .join("mod1.ts");
+ mod1_file.write("export function returnsHi() { return 'bye bye bye'; }");
+
+ // won't match the lockfile now
+ deno_run_cmd
+ .run()
+ .assert_matches_text(r#"error: The source code is invalid, as it does not match the expected hash in the lock file.
+ Specifier: http://localhost:4545/subdir/mod1.ts
+ Lock file: [WILDCARD]deno.lock
+"#)
+ .assert_exit_code(10);
+
+ // try updating by deleting the lockfile
+ let lockfile = temp_dir.path().join("deno.lock");
+ lockfile.remove_file();
+ cache_command.run();
+
+ // now it should run
+ deno_run_cmd.run().assert_matches_text("bye bye bye\n");
+ assert!(lockfile.exists());
+}
diff --git a/cli/tests/testdata/run/with_package_json/.gitignore b/cli/tests/testdata/run/with_package_json/.gitignore
deleted file mode 100644
index 40b878db5..000000000
--- a/cli/tests/testdata/run/with_package_json/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules/ \ No newline at end of file