summaryrefslogtreecommitdiff
path: root/tests/integration
diff options
context:
space:
mode:
Diffstat (limited to 'tests/integration')
-rw-r--r--tests/integration/compile_tests.rs8
-rw-r--r--tests/integration/flags_tests.rs4
-rw-r--r--tests/integration/install_tests.rs57
-rw-r--r--tests/integration/lsp_tests.rs939
-rw-r--r--tests/integration/node_unit_tests.rs5
-rw-r--r--tests/integration/npm_tests.rs36
-rw-r--r--tests/integration/repl_tests.rs14
-rw-r--r--tests/integration/run_tests.rs1869
-rw-r--r--tests/integration/watcher_tests.rs78
9 files changed, 1043 insertions, 1967 deletions
diff --git a/tests/integration/compile_tests.rs b/tests/integration/compile_tests.rs
index 0a5916f6f..fa6364a13 100644
--- a/tests/integration/compile_tests.rs
+++ b/tests/integration/compile_tests.rs
@@ -241,7 +241,7 @@ fn compile_with_file_exists_error() {
"./compile/args.ts",
])
.run()
- .assert_matches_text(&format!(
+ .assert_matches_text(format!(
concat!(
"[WILDCARD]error: Could not compile to file '{}' because its parent directory ",
"is an existing file. You can use the `--output <file-path>` flag to ",
@@ -269,7 +269,7 @@ fn compile_with_directory_exists_error() {
&exe.to_string_lossy(),
"./compile/args.ts"
]).run()
- .assert_matches_text(&format!(
+ .assert_matches_text(format!(
concat!(
"[WILDCARD]error: Could not compile to file '{}' because a directory exists with ",
"the same name. You can use the `--output <file-path>` flag to ",
@@ -297,7 +297,7 @@ fn compile_with_conflict_file_exists_error() {
&exe.to_string_lossy(),
"./compile/args.ts"
]).run()
- .assert_matches_text(&format!(
+ .assert_matches_text(format!(
concat!(
"[WILDCARD]error: Could not compile to file '{}' because the file already exists ",
"and cannot be overwritten. Please delete the existing file or ",
@@ -1111,7 +1111,7 @@ console.log(getValue());"#,
.run();
output.assert_exit_code(0);
output.assert_matches_text(
- r#"Download http://localhost:4260/@denotest/esm-basic
+ r#"Download http://localhost:4260/@denotest%2fesm-basic
Download http://localhost:4260/@denotest/esm-basic/1.0.0.tgz
Initialize @denotest/esm-basic@1.0.0
Check file:///[WILDCARD]/main.ts
diff --git a/tests/integration/flags_tests.rs b/tests/integration/flags_tests.rs
index 455507b9f..663da363d 100644
--- a/tests/integration/flags_tests.rs
+++ b/tests/integration/flags_tests.rs
@@ -18,8 +18,8 @@ fn help_output() {
"Start an interactive Read-Eval-Print Loop (REPL) for Deno",
"Evaluate a script from the command line",
"Add dependencies",
- "Install script as an executable",
- "Uninstall a script previously installed with deno install",
+ "Installs dependencies either in the local project or globally to a bin directory",
+ "Uninstalls a dependency or an executable script in the installation root's bin directory",
"Run benchmarks",
"Type-check the dependencies",
"Compile the script into a self contained executable",
diff --git a/tests/integration/install_tests.rs b/tests/integration/install_tests.rs
index 4dfd00146..b0c1e4477 100644
--- a/tests/integration/install_tests.rs
+++ b/tests/integration/install_tests.rs
@@ -329,3 +329,60 @@ fn check_local_by_default2() {
.skip_output_check()
.assert_exit_code(0);
}
+
+#[test]
+fn show_prefix_hint_on_global_install() {
+ let context = TestContextBuilder::new()
+ .add_npm_env_vars()
+ .add_jsr_env_vars()
+ .use_http_server()
+ .use_temp_cwd()
+ .build();
+ let temp_dir = context.temp_dir();
+ let temp_dir_str = temp_dir.path().to_string();
+
+ let env_vars = [
+ ("HOME", temp_dir_str.as_str()),
+ ("USERPROFILE", temp_dir_str.as_str()),
+ ("DENO_INSTALL_ROOT", ""),
+ ];
+
+ for pkg_req in ["npm:@denotest/bin", "jsr:@denotest/add"] {
+ let name = pkg_req.split_once('/').unwrap().1;
+ let pkg = pkg_req.split_once(':').unwrap().1;
+
+ // try with prefix and ensure that the installation succeeds
+ context
+ .new_command()
+ .args_vec(["install", "-g", "--name", name, pkg_req])
+ .envs(env_vars)
+ .run()
+ .skip_output_check()
+ .assert_exit_code(0);
+
+ // try without the prefix and ensure that the installation fails with the appropriate error
+ // message
+ let output = context
+ .new_command()
+ .args_vec(["install", "-g", "--name", name, pkg])
+ .envs(env_vars)
+ .run();
+ output.assert_exit_code(1);
+
+ let output_text = output.combined_output();
+ let expected_text =
+ format!("error: {pkg} is missing a prefix. Did you mean `deno install -g {pkg_req}`?");
+ assert_contains!(output_text, &expected_text);
+ }
+
+ // try a pckage not in npm and jsr to make sure the appropriate error message still appears
+ let output = context
+ .new_command()
+ .args_vec(["install", "-g", "package-that-does-not-exist"])
+ .envs(env_vars)
+ .run();
+ output.assert_exit_code(1);
+
+ let output_text = output.combined_output();
+ assert_contains!(output_text, "error: Module not found");
+}
diff --git a/tests/integration/lsp_tests.rs b/tests/integration/lsp_tests.rs
index 0f2d43755..8eaccb548 100644
--- a/tests/integration/lsp_tests.rs
+++ b/tests/integration/lsp_tests.rs
@@ -1050,6 +1050,191 @@ fn lsp_workspace_enable_paths_no_workspace_configuration() {
}
#[test]
+fn lsp_did_refresh_deno_configuration_tree_notification() {
+ let context = TestContextBuilder::new().use_temp_cwd().build();
+ let temp_dir = context.temp_dir();
+ temp_dir.create_dir_all("workspace/member1");
+ temp_dir.create_dir_all("workspace/member2");
+ temp_dir.create_dir_all("non_workspace1");
+ temp_dir.create_dir_all("non_workspace2");
+ temp_dir.write(
+ "workspace/deno.json",
+ json!({
+ "workspace": [
+ "member1",
+ "member2",
+ ],
+ })
+ .to_string(),
+ );
+ temp_dir.write("workspace/member1/deno.json", json!({}).to_string());
+ temp_dir.write("workspace/member1/package.json", json!({}).to_string());
+ temp_dir.write("workspace/member2/package.json", json!({}).to_string());
+ temp_dir.write("non_workspace1/deno.json", json!({}).to_string());
+ let mut client = context.new_lsp_command().build();
+ client.initialize_default();
+ let res = client
+ .read_notification_with_method::<Value>(
+ "deno/didRefreshDenoConfigurationTree",
+ )
+ .unwrap();
+ assert_eq!(
+ res,
+ json!({
+ "data": [
+ {
+ "scopeUri": temp_dir.url().join("non_workspace1/").unwrap(),
+ "workspaceRootScopeUri": null,
+ "denoJson": {
+ "uri": temp_dir.url().join("non_workspace1/deno.json").unwrap(),
+ },
+ "packageJson": null,
+ },
+ {
+ "scopeUri": temp_dir.url().join("workspace/").unwrap(),
+ "workspaceRootScopeUri": null,
+ "denoJson": {
+ "uri": temp_dir.url().join("workspace/deno.json").unwrap(),
+ },
+ "packageJson": null,
+ },
+ {
+ "scopeUri": temp_dir.url().join("workspace/member1/").unwrap(),
+ "workspaceRootScopeUri": temp_dir.url().join("workspace/").unwrap(),
+ "denoJson": {
+ "uri": temp_dir.url().join("workspace/member1/deno.json").unwrap(),
+ },
+ "packageJson": {
+ "uri": temp_dir.url().join("workspace/member1/package.json").unwrap(),
+ },
+ },
+ {
+ "scopeUri": temp_dir.url().join("workspace/member2/").unwrap(),
+ "workspaceRootScopeUri": temp_dir.url().join("workspace/").unwrap(),
+ "denoJson": null,
+ "packageJson": {
+ "uri": temp_dir.url().join("workspace/member2/package.json").unwrap(),
+ },
+ },
+ ],
+ }),
+ );
+ temp_dir.write("non_workspace2/deno.json", json!({}).to_string());
+ client.did_change_watched_files(json!({
+ "changes": [{
+ "uri": temp_dir.url().join("non_workspace2/deno.json").unwrap(),
+ "type": 1,
+ }],
+ }));
+ let res = client
+ .read_notification_with_method::<Value>(
+ "deno/didRefreshDenoConfigurationTree",
+ )
+ .unwrap();
+ assert_eq!(
+ res,
+ json!({
+ "data": [
+ {
+ "scopeUri": temp_dir.url().join("non_workspace1/").unwrap(),
+ "workspaceRootScopeUri": null,
+ "denoJson": {
+ "uri": temp_dir.url().join("non_workspace1/deno.json").unwrap(),
+ },
+ "packageJson": null,
+ },
+ {
+ "scopeUri": temp_dir.url().join("non_workspace2/").unwrap(),
+ "workspaceRootScopeUri": null,
+ "denoJson": {
+ "uri": temp_dir.url().join("non_workspace2/deno.json").unwrap(),
+ },
+ "packageJson": null,
+ },
+ {
+ "scopeUri": temp_dir.url().join("workspace/").unwrap(),
+ "workspaceRootScopeUri": null,
+ "denoJson": {
+ "uri": temp_dir.url().join("workspace/deno.json").unwrap(),
+ },
+ "packageJson": null,
+ },
+ {
+ "scopeUri": temp_dir.url().join("workspace/member1/").unwrap(),
+ "workspaceRootScopeUri": temp_dir.url().join("workspace/").unwrap(),
+ "denoJson": {
+ "uri": temp_dir.url().join("workspace/member1/deno.json").unwrap(),
+ },
+ "packageJson": {
+ "uri": temp_dir.url().join("workspace/member1/package.json").unwrap(),
+ },
+ },
+ {
+ "scopeUri": temp_dir.url().join("workspace/member2/").unwrap(),
+ "workspaceRootScopeUri": temp_dir.url().join("workspace/").unwrap(),
+ "denoJson": null,
+ "packageJson": {
+ "uri": temp_dir.url().join("workspace/member2/package.json").unwrap(),
+ },
+ },
+ ],
+ }),
+ );
+ client.change_configuration(json!({
+ "deno": {
+ "disablePaths": ["non_workspace1"],
+ },
+ }));
+ let res = client
+ .read_notification_with_method::<Value>(
+ "deno/didRefreshDenoConfigurationTree",
+ )
+ .unwrap();
+ assert_eq!(
+ res,
+ json!({
+ "data": [
+ {
+ "scopeUri": temp_dir.url().join("non_workspace2/").unwrap(),
+ "workspaceRootScopeUri": null,
+ "denoJson": {
+ "uri": temp_dir.url().join("non_workspace2/deno.json").unwrap(),
+ },
+ "packageJson": null,
+ },
+ {
+ "scopeUri": temp_dir.url().join("workspace/").unwrap(),
+ "workspaceRootScopeUri": null,
+ "denoJson": {
+ "uri": temp_dir.url().join("workspace/deno.json").unwrap(),
+ },
+ "packageJson": null,
+ },
+ {
+ "scopeUri": temp_dir.url().join("workspace/member1/").unwrap(),
+ "workspaceRootScopeUri": temp_dir.url().join("workspace/").unwrap(),
+ "denoJson": {
+ "uri": temp_dir.url().join("workspace/member1/deno.json").unwrap(),
+ },
+ "packageJson": {
+ "uri": temp_dir.url().join("workspace/member1/package.json").unwrap(),
+ },
+ },
+ {
+ "scopeUri": temp_dir.url().join("workspace/member2/").unwrap(),
+ "workspaceRootScopeUri": temp_dir.url().join("workspace/").unwrap(),
+ "denoJson": null,
+ "packageJson": {
+ "uri": temp_dir.url().join("workspace/member2/package.json").unwrap(),
+ },
+ },
+ ],
+ }),
+ );
+ client.shutdown();
+}
+
+#[test]
fn lsp_did_change_deno_configuration_notification() {
let context = TestContextBuilder::new().use_temp_cwd().build();
let temp_dir = context.temp_dir();
@@ -1642,15 +1827,41 @@ fn lsp_hover_disabled() {
fn lsp_inlay_hints() {
let context = TestContextBuilder::new().use_temp_cwd().build();
let mut client = context.new_lsp_command().build();
- client.initialize(|builder| {
- builder.enable_inlay_hints();
- });
+ client.initialize_default();
+ client.change_configuration(json!({
+ "deno": {
+ "enable": true,
+ },
+ "typescript": {
+ "inlayHints": {
+ "parameterNames": {
+ "enabled": "all",
+ },
+ "parameterTypes": {
+ "enabled": true,
+ },
+ "variableTypes": {
+ "enabled": true,
+ },
+ "propertyDeclarationTypes": {
+ "enabled": true,
+ },
+ "functionLikeReturnTypes": {
+ "enabled": true,
+ },
+ "enumMemberValues": {
+ "enabled": true,
+ },
+ },
+ },
+ }));
client.did_open(json!({
"textDocument": {
"uri": "file:///a/file.ts",
"languageId": "typescript",
"version": 1,
- "text": r#"function a(b: string) {
+ "text": r#"
+ function a(b: string) {
return b;
}
@@ -1669,8 +1880,19 @@ fn lsp_inlay_hints() {
}
["a"].map((v) => v + v);
- "#
- }
+
+ interface Bar {
+ someField: string;
+ }
+ function getBar(): Bar {
+ return { someField: "foo" };
+ }
+ // This shouldn't have a type hint because the variable name makes it
+ // redundant.
+ const bar = getBar();
+ const someValue = getBar();
+ "#,
+ },
}));
let res = client.write_request(
"textDocument/inlayHint",
@@ -1679,65 +1901,130 @@ fn lsp_inlay_hints() {
"uri": "file:///a/file.ts",
},
"range": {
- "start": { "line": 0, "character": 0 },
- "end": { "line": 19, "character": 0, }
- }
+ "start": { "line": 1, "character": 0 },
+ "end": { "line": 31, "character": 0, },
+ },
}),
);
assert_eq!(
res,
json!([
{
- "position": { "line": 0, "character": 21 },
- "label": ": string",
+ "position": { "line": 1, "character": 29 },
+ "label": [{ "value": ": " }, { "value": "string" }],
"kind": 1,
- "paddingLeft": true
+ "paddingLeft": true,
}, {
- "position": { "line": 4, "character": 10 },
- "label": "b:",
+ "position": { "line": 5, "character": 10 },
+ "label": [
+ {
+ "value": "b",
+ "location": {
+ "uri": "file:///a/file.ts",
+ "range": {
+ "start": { "line": 1, "character": 19 },
+ "end": { "line": 1, "character": 20 },
+ },
+ },
+ },
+ { "value": ":" },
+ ],
"kind": 2,
- "paddingRight": true
+ "paddingRight": true,
}, {
- "position": { "line": 7, "character": 11 },
+ "position": { "line": 8, "character": 11 },
"label": "= 0",
- "paddingLeft": true
+ "paddingLeft": true,
}, {
- "position": { "line": 10, "character": 17 },
- "label": "string:",
+ "position": { "line": 11, "character": 17 },
+ "label": [
+ {
+ "value": "string",
+ "location": {
+ "uri": "deno:/asset/lib.es5.d.ts",
+ "range": {
+ "start": { "line": 41, "character": 26 },
+ "end": { "line": 41, "character": 32 },
+ },
+ },
+ },
+ { "value": ":" },
+ ],
"kind": 2,
- "paddingRight": true
+ "paddingRight": true,
}, {
- "position": { "line": 10, "character": 24 },
- "label": "radix:",
+ "position": { "line": 11, "character": 24 },
+ "label": [
+ {
+ "value": "radix",
+ "location": {
+ "uri": "deno:/asset/lib.es5.d.ts",
+ "range": {
+ "start": { "line": 41, "character": 42 },
+ "end": { "line": 41, "character": 47 },
+ },
+ },
+ },
+ { "value": ":" },
+ ],
"kind": 2,
- "paddingRight": true
+ "paddingRight": true,
}, {
- "position": { "line": 12, "character": 15 },
- "label": ": number",
+ "position": { "line": 13, "character": 15 },
+ "label": [{ "value": ": " }, { "value": "number" }],
"kind": 1,
- "paddingLeft": true
+ "paddingLeft": true,
}, {
- "position": { "line": 15, "character": 11 },
- "label": ": number",
+ "position": { "line": 16, "character": 11 },
+ "label": [{ "value": ": " }, { "value": "number" }],
"kind": 1,
- "paddingLeft": true
+ "paddingLeft": true,
}, {
- "position": { "line": 18, "character": 18 },
- "label": "callbackfn:",
+ "position": { "line": 19, "character": 18 },
+ "label": [
+ {
+ "value": "callbackfn",
+ "location": {
+ "uri": "deno:/asset/lib.es5.d.ts",
+ "range": {
+ "start": { "line": 1462, "character": 11 },
+ "end": { "line": 1462, "character": 21 },
+ },
+ },
+ },
+ { "value": ":" },
+ ],
"kind": 2,
- "paddingRight": true
+ "paddingRight": true,
}, {
- "position": { "line": 18, "character": 20 },
- "label": ": string",
+ "position": { "line": 19, "character": 20 },
+ "label": [{ "value": ": " }, { "value": "string" }],
"kind": 1,
- "paddingLeft": true
+ "paddingLeft": true,
}, {
- "position": { "line": 18, "character": 21 },
- "label": ": string",
+ "position": { "line": 19, "character": 21 },
+ "label": [{ "value": ": " }, { "value": "string" }],
"kind": 1,
- "paddingLeft": true
- }
- ])
+ "paddingLeft": true,
+ }, {
+ "position": { "line": 30, "character": 23 },
+ "label": [
+ { "value": ": " },
+ {
+ "value": "Bar",
+ "location": {
+ "uri": "file:///a/file.ts",
+ "range": {
+ "start": { "line": 21, "character": 18 },
+ "end": { "line": 21, "character": 21 },
+ },
+ },
+ },
+ ],
+ "kind": 1,
+ "paddingLeft": true,
+ },
+ ]),
);
client.shutdown();
}
@@ -5668,7 +5955,7 @@ fn lsp_jsr_code_action_missing_declaration() {
"character": 6,
},
},
- "newText": "import type { ReturnType } from \"jsr:@denotest/types-file/types\";\n",
+ "newText": "import { ReturnType } from \"jsr:@denotest/types-file/types\";\n",
},
{
"range": {
@@ -6109,6 +6396,45 @@ fn lsp_cache_on_save() {
client.shutdown();
}
+// Regression test for https://github.com/denoland/deno/issues/25999.
+#[test]
+fn lsp_asset_document_dom_code_action() {
+ let context = TestContextBuilder::new().use_temp_cwd().build();
+ let temp_dir = context.temp_dir();
+ temp_dir.write(
+ "deno.json",
+ json!({
+ "compilerOptions": {
+ "lib": ["deno.window", "dom"],
+ },
+ })
+ .to_string(),
+ );
+ let mut client = context.new_lsp_command().build();
+ client.initialize_default();
+ client.did_open(json!({
+ "textDocument": {
+ "uri": temp_dir.url().join("file.ts").unwrap(),
+ "languageId": "typescript",
+ "version": 1,
+ "text": r#""#,
+ },
+ }));
+ let res = client.write_request(
+ "textDocument/codeAction",
+ json!({
+ "textDocument": { "uri": "asset:///lib.dom.d.ts" },
+ "range": {
+ "start": { "line": 0, "character": 0 },
+ "end": { "line": 0, "character": 0 },
+ },
+ "context": { "diagnostics": [], "only": ["quickfix"] },
+ }),
+ );
+ assert_eq!(res, json!(null));
+ client.shutdown();
+}
+
// Regression test for https://github.com/denoland/deno/issues/22122.
#[test]
fn lsp_cache_then_definition() {
@@ -6182,6 +6508,16 @@ fn lsp_code_actions_imports() {
let context = TestContextBuilder::new().use_temp_cwd().build();
let mut client = context.new_lsp_command().build();
client.initialize_default();
+ client.change_configuration(json!({
+ "deno": {
+ "enable": true,
+ },
+ "typescript": {
+ "preferences": {
+ "preferTypeOnlyAutoImports": true,
+ },
+ },
+ }));
client.did_open(json!({
"textDocument": {
"uri": "file:///a/file00.ts",
@@ -6293,6 +6629,23 @@ export class DuckConfig {
}]
}
}, {
+ "title": "Add all missing imports",
+ "kind": "quickfix",
+ "diagnostics": [{
+ "range": {
+ "start": { "line": 0, "character": 50 },
+ "end": { "line": 0, "character": 67 }
+ },
+ "severity": 1,
+ "code": 2304,
+ "source": "deno-ts",
+ "message": "Cannot find name 'DuckConfigOptions'."
+ }],
+ "data": {
+ "specifier": "file:///a/file00.ts",
+ "fixId": "fixMissingImport"
+ }
+ }, {
"title": "Add import from \"./file01.ts\"",
"kind": "quickfix",
"diagnostics": [{
@@ -6320,23 +6673,6 @@ export class DuckConfig {
}]
}]
}
- }, {
- "title": "Add all missing imports",
- "kind": "quickfix",
- "diagnostics": [{
- "range": {
- "start": { "line": 0, "character": 50 },
- "end": { "line": 0, "character": 67 }
- },
- "severity": 1,
- "code": 2304,
- "source": "deno-ts",
- "message": "Cannot find name 'DuckConfigOptions'."
- }],
- "data": {
- "specifier": "file:///a/file00.ts",
- "fixId": "fixMissingImport"
- }
}])
);
let res = client.write_request(
@@ -6481,7 +6817,7 @@ fn lsp_code_actions_imports_dts() {
"start": { "line": 0, "character": 0 },
"end": { "line": 0, "character": 0 },
},
- "newText": "import type { SomeType } from \"./decl.d.ts\";\n",
+ "newText": "import { SomeType } from \"./decl.d.ts\";\n",
}],
}],
},
@@ -6491,6 +6827,117 @@ fn lsp_code_actions_imports_dts() {
}
#[test]
+fn lsp_code_actions_import_map_remap() {
+ let context = TestContextBuilder::new().use_temp_cwd().build();
+ let temp_dir = context.temp_dir();
+ temp_dir.write(
+ "deno.json",
+ json!({
+ "imports": {
+ "foo": "./foo.ts",
+ "bar": "./bar.ts",
+ },
+ })
+ .to_string(),
+ );
+ temp_dir.write("foo.ts", "");
+ temp_dir.write("bar.ts", "");
+ let mut client = context.new_lsp_command().build();
+ client.initialize_default();
+ let diagnostics = client.did_open(json!({
+ "textDocument": {
+ "uri": temp_dir.url().join("file.ts").unwrap(),
+ "languageId": "typescript",
+ "version": 1,
+ "text": r#"
+ import "./foo.ts";
+ import type {} from "./bar.ts";
+ "#,
+ }
+ }));
+ let res = client.write_request(
+ "textDocument/codeAction",
+ json!({
+ "textDocument": { "uri": temp_dir.url().join("file.ts").unwrap() },
+ "range": {
+ "start": { "line": 0, "character": 0 },
+ "end": { "line": 3, "character": 0 },
+ },
+ "context": {
+ "diagnostics": diagnostics.all(),
+ "only": ["quickfix"],
+ },
+ }),
+ );
+ assert_eq!(
+ res,
+ json!([
+ {
+ "title": "Update \"./foo.ts\" to \"foo\" to use import map.",
+ "kind": "quickfix",
+ "diagnostics": [
+ {
+ "range": {
+ "start": { "line": 1, "character": 15 },
+ "end": { "line": 1, "character": 25 },
+ },
+ "severity": 4,
+ "code": "import-map-remap",
+ "source": "deno",
+ "message": "The import specifier can be remapped to \"foo\" which will resolve it via the active import map.",
+ "data": { "from": "./foo.ts", "to": "foo" },
+ },
+ ],
+ "edit": {
+ "changes": {
+ temp_dir.url().join("file.ts").unwrap(): [
+ {
+ "range": {
+ "start": { "line": 1, "character": 15 },
+ "end": { "line": 1, "character": 25 },
+ },
+ "newText": "\"foo\"",
+ },
+ ],
+ },
+ },
+ },
+ {
+ "title": "Update \"./bar.ts\" to \"bar\" to use import map.",
+ "kind": "quickfix",
+ "diagnostics": [
+ {
+ "range": {
+ "start": { "line": 2, "character": 28 },
+ "end": { "line": 2, "character": 38 },
+ },
+ "severity": 4,
+ "code": "import-map-remap",
+ "source": "deno",
+ "message": "The import specifier can be remapped to \"bar\" which will resolve it via the active import map.",
+ "data": { "from": "./bar.ts", "to": "bar" },
+ },
+ ],
+ "edit": {
+ "changes": {
+ temp_dir.url().join("file.ts").unwrap(): [
+ {
+ "range": {
+ "start": { "line": 2, "character": 28 },
+ "end": { "line": 2, "character": 38 },
+ },
+ "newText": "\"bar\"",
+ },
+ ],
+ },
+ },
+ },
+ ]),
+ );
+ client.shutdown();
+}
+
+#[test]
fn lsp_code_actions_refactor() {
let context = TestContextBuilder::new().use_temp_cwd().build();
let mut client = context.new_lsp_command().build();
@@ -6801,7 +7248,7 @@ fn lsp_code_actions_imports_respects_fmt_config() {
"start": { "line": 0, "character": 0 },
"end": { "line": 0, "character": 0 }
},
- "newText": "import type { DuckConfigOptions } from './file01.ts'\n"
+ "newText": "import { DuckConfigOptions } from './file01.ts'\n"
}]
}]
}
@@ -6854,7 +7301,7 @@ fn lsp_code_actions_imports_respects_fmt_config() {
"start": { "line": 0, "character": 0 },
"end": { "line": 0, "character": 0 }
},
- "newText": "import type { DuckConfigOptions } from './file01.ts'\n"
+ "newText": "import { DuckConfigOptions } from './file01.ts'\n"
}]
}]
},
@@ -6954,7 +7401,7 @@ fn lsp_quote_style_from_workspace_settings() {
"start": { "line": 0, "character": 0 },
"end": { "line": 0, "character": 0 },
},
- "newText": "import type { DuckConfigOptions } from './file01.ts';\n",
+ "newText": "import { DuckConfigOptions } from './file01.ts';\n",
}],
}],
},
@@ -6998,7 +7445,7 @@ fn lsp_quote_style_from_workspace_settings() {
"start": { "line": 0, "character": 0 },
"end": { "line": 0, "character": 0 },
},
- "newText": "import type { DuckConfigOptions } from \"./file01.ts\";\n",
+ "newText": "import { DuckConfigOptions } from \"./file01.ts\";\n",
}],
}],
},
@@ -7679,6 +8126,275 @@ fn lsp_npm_completions_auto_import_and_quick_fix_no_import_map() {
}
#[test]
+fn lsp_npm_auto_import_and_quick_fix_byonm() {
+ let context = TestContextBuilder::new()
+ .use_http_server()
+ .use_temp_cwd()
+ .add_npm_env_vars()
+ .build();
+ let temp_dir = context.temp_dir();
+ temp_dir.write("deno.json", json!({}).to_string());
+ temp_dir.write(
+ "package.json",
+ json!({
+ "dependencies": {
+ "cowsay": "*",
+ },
+ })
+ .to_string(),
+ );
+ context
+ .new_command()
+ .args("install")
+ .run()
+ .skip_output_check();
+ temp_dir.write("other.ts", "import \"cowsay\";\n");
+ let mut client = context.new_lsp_command().build();
+ client.initialize_default();
+ let diagnostics = client.did_open(json!({
+ "textDocument": {
+ "uri": temp_dir.url().join("file.ts").unwrap(),
+ "languageId": "typescript",
+ "version": 1,
+ "text": "think({ text: \"foo\" });\n",
+ },
+ }));
+ let list = client.get_completion_list(
+ temp_dir.url().join("file.ts").unwrap(),
+ (0, 5),
+ json!({ "triggerKind": 1 }),
+ );
+ assert!(!list.is_incomplete);
+ let item = list
+ .items
+ .iter()
+ .find(|item| item.label == "think")
+ .unwrap();
+ let res = client.write_request("completionItem/resolve", item);
+ assert_eq!(
+ res,
+ json!({
+ "label": "think",
+ "labelDetails": {
+ "description": "cowsay",
+ },
+ "kind": 3,
+ "detail": "function think(options: IOptions): string",
+ "documentation": {
+ "kind": "markdown",
+ "value": "\n\n*@param* \noptions ## Face :\nEither choose a mode (set the value as true) **_or_**\nset your own defined eyes and tongue to `e` and `T`.\n- ### `e` : eyes\n- ### `T` : tongue\n\n## Cow :\nEither specify a cow name (e.g. \"fox\") **_or_**\nset the value of `r` to true which selects a random cow.\n- ### `r` : random selection\n- ### `f` : cow name - from `cows` folder\n\n## Modes :\nModes are just ready-to-use faces, here's their list:\n- #### `b` : borg\n- #### `d` : dead \n- #### `g` : greedy\n- #### `p` : paranoia\n- #### `s` : stoned\n- #### `t` : tired\n- #### `w` : youthful\n- #### `y` : wired \n\n*@example* \n```\n// custom cow and face\ncowsay.think({\n text: 'Hello world!',\n e: '^^', // eyes\n T: 'U ', // tongue\n f: 'USA' // name of the cow from `cows` folder\n})\n\n// using a random cow\ncowsay.think({\n text: 'Hello world!',\n e: 'xx', // eyes\n r: true, // random mode - use a random cow.\n})\n\n// using a mode\ncowsay.think({\n text: 'Hello world!',\n y: true, // using y mode - youthful mode\n})\n```",
+ },
+ "sortText": "￿16_0",
+ "additionalTextEdits": [
+ {
+ "range": {
+ "start": { "line": 0, "character": 0 },
+ "end": { "line": 0, "character": 0 },
+ },
+ "newText": "import { think } from \"cowsay\";\n\n",
+ },
+ ],
+ }),
+ );
+ let diagnostics = diagnostics
+ .messages_with_file_and_source(
+ temp_dir.url().join("file.ts").unwrap().as_str(),
+ "deno-ts",
+ )
+ .diagnostics;
+ let res = client.write_request(
+ "textDocument/codeAction",
+ json!(json!({
+ "textDocument": {
+ "uri": temp_dir.url().join("file.ts").unwrap(),
+ },
+ "range": {
+ "start": { "line": 0, "character": 0 },
+ "end": { "line": 0, "character": 5 },
+ },
+ "context": {
+ "diagnostics": &diagnostics,
+ "only": ["quickfix"],
+ },
+ })),
+ );
+ assert_eq!(
+ res,
+ json!([
+ {
+ "title": "Add import from \"cowsay\"",
+ "kind": "quickfix",
+ "diagnostics": &diagnostics,
+ "edit": {
+ "documentChanges": [{
+ "textDocument": {
+ "uri": temp_dir.url().join("file.ts").unwrap(),
+ "version": 1,
+ },
+ "edits": [{
+ "range": {
+ "start": { "line": 0, "character": 0 },
+ "end": { "line": 0, "character": 0 },
+ },
+ "newText": "import { think } from \"cowsay\";\n\n",
+ }],
+ }],
+ },
+ },
+ {
+ "title": "Add missing function declaration 'think'",
+ "kind": "quickfix",
+ "diagnostics": &diagnostics,
+ "edit": {
+ "documentChanges": [
+ {
+ "textDocument": {
+ "uri": temp_dir.url().join("file.ts").unwrap(),
+ "version": 1,
+ },
+ "edits": [
+ {
+ "range": {
+ "start": { "line": 1, "character": 0 },
+ "end": { "line": 1, "character": 0 },
+ },
+ "newText": "\nfunction think(arg0: { text: string; }) {\n throw new Error(\"Function not implemented.\");\n}\n",
+ },
+ ],
+ },
+ ],
+ },
+ },
+ ]),
+ );
+ client.shutdown();
+}
+
+#[test]
+fn lsp_npm_auto_import_with_deno_types() {
+ let context = TestContextBuilder::new()
+ .use_http_server()
+ .use_temp_cwd()
+ .add_npm_env_vars()
+ .build();
+ let temp_dir = context.temp_dir();
+ temp_dir.write(
+ "deno.json",
+ json!({
+ "compilerOptions": {
+ "jsx": "react-jsx",
+ "jsxImportSource": "react",
+ "jsxImportSourceTypes": "@types/react",
+ },
+ })
+ .to_string(),
+ );
+ temp_dir.write(
+ "package.json",
+ json!({
+ "dependencies": {
+ "react": "*",
+ "@types/react": "*",
+ "lz-string": "1.3",
+ "@types/lz-string": "1.3",
+ },
+ })
+ .to_string(),
+ );
+ context.run_npm("install");
+ temp_dir.write(
+ "other.ts",
+ r#"
+ // @deno-types="@types/lz-string"
+ import "lz-string";
+ "#,
+ );
+ let mut client = context.new_lsp_command().build();
+ client.initialize_default();
+ client.did_open(json!({
+ "textDocument": {
+ "uri": temp_dir.url().join("file.ts").unwrap(),
+ "languageId": "typescript",
+ "version": 1,
+ "text": r#"
+ compressToBase64();
+ createRef();
+ "#,
+ },
+ }));
+ let list = client.get_completion_list(
+ temp_dir.url().join("file.ts").unwrap(),
+ (1, 24),
+ json!({ "triggerKind": 1 }),
+ );
+ let item = list
+ .items
+ .iter()
+ .find(|item| item.label == "compressToBase64")
+ .unwrap();
+ let res = client.write_request("completionItem/resolve", item);
+ assert_eq!(
+ res,
+ json!({
+ "label": "compressToBase64",
+ "labelDetails": {
+ "description": "lz-string",
+ },
+ "kind": 2,
+ "detail": "(method) LZString.LZStringStatic.compressToBase64(uncompressed: string): string",
+ "documentation": {
+ "kind": "markdown",
+ "value": "Compresses input string producing an instance of a ASCII UTF-16 string,\nwhich represents the original string encoded in Base64.\nThe result can be safely transported outside the browser with a\nguarantee that none of the characters produced need to be URL-encoded.\n\n*@param* - uncompressed A string which should be compressed.",
+ },
+ "sortText": "￿16_0",
+ "additionalTextEdits": [
+ {
+ "range": {
+ "start": { "line": 0, "character": 0 },
+ "end": { "line": 0, "character": 0 },
+ },
+ "newText": "// @deno-types=\"@types/lz-string\"\nimport { compressToBase64 } from \"lz-string\";\n",
+ },
+ ],
+ }),
+ );
+ let list = client.get_completion_list(
+ temp_dir.url().join("file.ts").unwrap(),
+ (2, 17),
+ json!({ "triggerKind": 1 }),
+ );
+ let item = list
+ .items
+ .iter()
+ .find(|item| item.label == "createRef")
+ .unwrap();
+ let res = client.write_request("completionItem/resolve", item);
+ assert_eq!(
+ res,
+ json!({
+ "label": "createRef",
+ "labelDetails": {
+ "description": "react",
+ },
+ "kind": 3,
+ "detail": "function React.createRef<T>(): React.RefObject<T>",
+ "documentation": { "kind": "markdown", "value": "" },
+ "sortText": "￿16_0",
+ "additionalTextEdits": [
+ {
+ "range": {
+ "start": { "line": 0, "character": 0 },
+ "end": { "line": 0, "character": 0 },
+ },
+ "newText": "// @deno-types=\"@types/react\"\nimport { createRef } from \"react\";\n",
+ },
+ ],
+ }),
+ );
+ client.shutdown();
+}
+
+#[test]
fn lsp_completions_node_specifier() {
let context = TestContextBuilder::new().use_temp_cwd().build();
let temp_dir = context.temp_dir();
@@ -7790,8 +8506,8 @@ fn lsp_infer_return_type() {
let context = TestContextBuilder::new().use_temp_cwd().build();
let temp_dir = context.temp_dir();
temp_dir.write("deno.json", json!({}).to_string());
- let types_file = source_file(
- temp_dir.path().join("types.d.ts"),
+ temp_dir.write(
+ "types.d.ts",
r#"
export interface SomeInterface {
someField: number;
@@ -7872,7 +8588,7 @@ fn lsp_infer_return_type() {
"start": { "line": 1, "character": 20 },
"end": { "line": 1, "character": 20 },
},
- "newText": format!(": import(\"{}\").SomeInterface", types_file.url()),
+ "newText": ": import(\"./types.d.ts\").SomeInterface",
},
],
},
@@ -9403,14 +10119,15 @@ fn lsp_auto_discover_registry() {
"triggerCharacter": "@"
}),
);
- let (method, res) = client.read_notification();
- assert_eq!(method, "deno/registryState");
+ let res = client
+ .read_notification_with_method::<Value>("deno/registryState")
+ .unwrap();
assert_eq!(
res,
- Some(json!({
+ json!({
"origin": "http://localhost:4545",
"suggestions": true,
- }))
+ }),
);
client.shutdown();
}
@@ -10117,7 +10834,6 @@ fn lsp_diagnostics_refresh_dependents() {
assert_eq!(json!(diagnostics.all()), json!([])); // no diagnostics now
client.shutdown();
- assert_eq!(client.queue_len(), 0);
}
// Regression test for https://github.com/denoland/deno/issues/10897.
@@ -10964,7 +11680,7 @@ fn lsp_format_with_config() {
},
"options": {
"tabSize": 2,
- "insertSpaces": false
+ "insertSpaces": true,
}
}),
);
@@ -15076,25 +15792,23 @@ fn lsp_sloppy_imports() {
fn lsp_sloppy_imports_prefers_dts() {
let context = TestContextBuilder::new().use_temp_cwd().build();
let temp_dir = context.temp_dir();
- let temp_dir = temp_dir.path();
-
- temp_dir
- .join("deno.json")
- .write(r#"{ "unstable": ["sloppy-imports"] }"#);
-
- let mut client: LspClient = context
- .new_lsp_command()
- .set_root_dir(temp_dir.clone())
- .build();
- client.initialize_default();
-
- temp_dir.join("a.js").write("export const foo: number;");
-
- let a_dts = source_file(temp_dir.join("a.d.ts"), "export const foo = 3;");
+ temp_dir.write("deno.json", json!({}).to_string());
+ temp_dir.write("a.js", "export const foo: number;");
+ let a_dts =
+ source_file(temp_dir.path().join("a.d.ts"), "export const foo = 3;");
let file = source_file(
- temp_dir.join("file.ts"),
+ temp_dir.path().join("file.ts"),
"import { foo } from './a.js';\nconsole.log(foo);",
);
+ let mut client: LspClient = context.new_lsp_command().build();
+ client.initialize_default();
+ client.change_configuration(json!({
+ "deno": {
+ "enable": true,
+ "unstable": ["sloppy-imports"],
+ },
+ }));
+
let diagnostics = client.did_open_file(&file);
// no other warnings because "a.js" exists
assert_eq!(
@@ -15550,6 +16264,55 @@ fn lsp_cjs_import_dual() {
}
#[test]
+fn lsp_type_commonjs() {
+ let context = TestContextBuilder::new()
+ .use_http_server()
+ .use_temp_cwd()
+ .add_npm_env_vars()
+ .build();
+ let temp_dir = context.temp_dir();
+ temp_dir.write("deno.json", r#"{}"#);
+ temp_dir.write(
+ "package.json",
+ r#"{
+ "type": "commonjs",
+ "dependencies": {
+ "@denotest/dual-cjs-esm": "1"
+ }
+}"#,
+ );
+ context.run_npm("install");
+
+ let mut client = context.new_lsp_command().build();
+ client.initialize_default();
+ let main_url = temp_dir.path().join("main.ts").url_file();
+ let diagnostics = client.did_open(
+ json!({
+ "textDocument": {
+ "uri": main_url,
+ "languageId": "typescript",
+ "version": 1,
+ // getKind() should resolve as "cjs" and cause a type checker error
+ "text": "import mod = require('@denotest/dual-cjs-esm');\nconst kind: 'other' = mod.getKind(); console.log(kind);",
+ }
+ }),
+ );
+ assert_eq!(
+ json!(diagnostics.all()),
+ json!([{
+ "range": {
+ "start": { "line": 1, "character": 6, },
+ "end": { "line": 1, "character": 10, },
+ },
+ "severity": 1,
+ "code": 2322,
+ "source": "deno-ts",
+ "message": "Type '\"cjs\"' is not assignable to type '\"other\"'.",
+ }])
+ );
+}
+
+#[test]
fn lsp_ts_code_fix_any_param() {
let context = TestContextBuilder::new().use_temp_cwd().build();
let temp_dir = context.temp_dir();
diff --git a/tests/integration/node_unit_tests.rs b/tests/integration/node_unit_tests.rs
index d66db5a40..9cb1af949 100644
--- a/tests/integration/node_unit_tests.rs
+++ b/tests/integration/node_unit_tests.rs
@@ -72,6 +72,7 @@ util::unit_test_factory!(
dgram_test,
domain_test,
fs_test,
+ fetch_test,
http_test,
http2_test,
inspector_test,
@@ -212,3 +213,7 @@ itest!(unhandled_rejection_web_process {
envs: env_vars_for_npm_tests(),
http_server: true,
});
+
+// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+// The itest macro is deprecated. Please move your new test to ~/tests/specs.
+// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
diff --git a/tests/integration/npm_tests.rs b/tests/integration/npm_tests.rs
index f47b1bdd4..f8c6eebf3 100644
--- a/tests/integration/npm_tests.rs
+++ b/tests/integration/npm_tests.rs
@@ -876,7 +876,7 @@ fn auto_discover_lock_file() {
.run();
output
.assert_matches_text(
-r#"Download http://localhost:4260/@denotest/bin
+r#"Download http://localhost:4260/@denotest%2fbin
error: Integrity check failed for package: "npm:@denotest/bin@1.0.0". Unable to verify that the package
is the same as when the lockfile was generated.
@@ -1058,10 +1058,10 @@ fn reload_info_not_found_cache_but_exists_remote() {
.run();
output.assert_matches_text(concat!(
"[UNORDERED_START]\n",
- "Download http://localhost:4260/@denotest/esm-basic\n",
- "Download http://localhost:4260/@denotest/esm-import-cjs-default\n",
- "Download http://localhost:4260/@denotest/cjs-default-export\n",
- "Download http://localhost:4260/@denotest/cjs-default-export/1.0.0.tgz\n",
+ "Download http://localhost:4260/@denotest%2fesm-basic\n",
+ "Download http://localhost:4260/@denotest%2fesm-import-cjs-default\n",
+ "Download http://localhost:4260/@denotest%2fcjs-default-export\n",
+ "Download http://localhost:4260/@denotestcjs-default-export/1.0.0.tgz\n",
"Download http://localhost:4260/@denotest/esm-basic/1.0.0.tgz\n",
"Download http://localhost:4260/@denotest/esm-import-cjs-default/1.0.0.tgz\n",
"[UNORDERED_END]\n",
@@ -1088,8 +1088,8 @@ fn reload_info_not_found_cache_but_exists_remote() {
let output = test_context.new_command().args("run main.ts").run();
output.assert_matches_text(concat!(
"[UNORDERED_START]\n",
- "Download http://localhost:4260/@denotest/esm-import-cjs-default\n",
- "Download http://localhost:4260/@denotest/cjs-default-export\n",
+ "Download http://localhost:4260/@denotest%2fesm-import-cjs-default\n",
+ "Download http://localhost:4260/@denotest%2fcjs-default-export\n",
"[UNORDERED_END]\n",
"Node esm importing node cjs\n[WILDCARD]",
));
@@ -1120,8 +1120,8 @@ fn reload_info_not_found_cache_but_exists_remote() {
let output = test_context.new_command().args("run main.ts").run();
output.assert_matches_text(concat!(
"[UNORDERED_START]\n",
- "Download http://localhost:4260/@denotest/esm-import-cjs-default\n",
- "Download http://localhost:4260/@denotest/cjs-default-export\n",
+ "Download http://localhost:4260/@denotest%2fesm-import-cjs-default\n",
+ "Download http://localhost:4260/@denotest%2fcjs-default-export\n",
"[UNORDERED_END]\n",
"Node esm importing node cjs\n[WILDCARD]",
));
@@ -1159,8 +1159,8 @@ fn reload_info_not_found_cache_but_exists_remote() {
let output = test_context.new_command().args("run main.ts").run();
output.assert_matches_text(concat!(
"[UNORDERED_START]\n",
- "Download http://localhost:4260/@denotest/esm-import-cjs-default\n",
- "Download http://localhost:4260/@denotest/cjs-default-export\n",
+ "Download http://localhost:4260/@denotest%2fesm-import-cjs-default\n",
+ "Download http://localhost:4260/@denotest%2fcjs-default-export\n",
"[UNORDERED_END]\n",
"[UNORDERED_START]\n",
"Initialize @denotest/cjs-default-export@1.0.0\n",
@@ -1196,9 +1196,9 @@ fn reload_info_not_found_cache_but_exists_remote() {
let output = test_context.new_command().args("run main.ts").run();
output.assert_matches_text(concat!(
"[UNORDERED_START]\n",
- "Download http://localhost:4260/@denotest/esm-basic\n",
- "Download http://localhost:4260/@denotest/esm-import-cjs-default\n",
- "Download http://localhost:4260/@denotest/cjs-default-export\n",
+ "Download http://localhost:4260/@denotest%2fesm-basic\n",
+ "Download http://localhost:4260/@denotest%2fesm-import-cjs-default\n",
+ "Download http://localhost:4260/@denotest%2fcjs-default-export\n",
"[UNORDERED_END]\n",
"Initialize @denotest/esm-basic@1.0.0\n",
"Node esm importing node cjs\n[WILDCARD]",
@@ -1237,9 +1237,9 @@ fn reload_info_not_found_cache_but_exists_remote() {
let output = test_context.new_command().args("run main.ts").run();
output.assert_matches_text(concat!(
"[UNORDERED_START]\n",
- "Download http://localhost:4260/@denotest/cjs-default-export\n",
- "Download http://localhost:4260/@denotest/esm-basic\n",
- "Download http://localhost:4260/@denotest/esm-import-cjs-default\n",
+ "Download http://localhost:4260/@denotest%2fcjs-default-export\n",
+ "Download http://localhost:4260/@denotest%2fesm-basic\n",
+ "Download http://localhost:4260/@denotest%2fesm-import-cjs-default\n",
"[UNORDERED_END]\n",
"Node esm importing node cjs\n[WILDCARD]",
));
@@ -1419,7 +1419,7 @@ fn top_level_install_package_json_explicit_opt_in() {
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:4260/@denotest/esm-basic\n",
+ "Download http://localhost:4260/@denotest%2fesm-basic\n",
"Download http://localhost:4260/@denotest/esm-basic/1.0.0.tgz\n",
"Initialize @denotest/esm-basic@1.0.0\n",
));
diff --git a/tests/integration/repl_tests.rs b/tests/integration/repl_tests.rs
index 4e00398ce..9eceb2f05 100644
--- a/tests/integration/repl_tests.rs
+++ b/tests/integration/repl_tests.rs
@@ -255,6 +255,20 @@ fn console_log() {
console.write_line("'world'");
console.expect("\"world\"");
});
+
+ // https://github.com/denoland/deno/issues/21428
+ let (out, err) = util::run_and_collect_output_with_args(
+ true,
+ vec![
+ "repl",
+ "--eval-file=./../specs/repl/console_log/093_console_log_format.js",
+ ],
+ None,
+ None,
+ false,
+ );
+ assert_contains!(out, "0.5");
+ assert!(err.is_empty());
}
#[test]
diff --git a/tests/integration/run_tests.rs b/tests/integration/run_tests.rs
index ca24f18f4..c97b700c5 100644
--- a/tests/integration/run_tests.rs
+++ b/tests/integration/run_tests.rs
@@ -16,280 +16,19 @@ use deno_tls::rustls;
use deno_tls::rustls::ClientConnection;
use deno_tls::rustls_pemfile;
use deno_tls::TlsStream;
+use hickory_client::serialize::txt::Parser;
use pretty_assertions::assert_eq;
use test_util as util;
use test_util::itest;
use test_util::TempDir;
-use trust_dns_client::serialize::txt::Lexer;
-use trust_dns_client::serialize::txt::Parser;
use util::assert_contains;
use util::assert_not_contains;
-use util::env_vars_for_npm_tests;
use util::PathRef;
use util::TestContext;
use util::TestContextBuilder;
const CODE_CACHE_DB_FILE_NAME: &str = "v8_code_cache_v2";
-itest!(stdout_write_all {
- args: "run --quiet run/stdout_write_all.ts",
- output: "run/stdout_write_all.out",
-});
-
-itest!(stdin_read_all {
- args: "run --quiet run/stdin_read_all.ts",
- output: "run/stdin_read_all.out",
- input: Some("01234567890123456789012345678901234567890123456789"),
-});
-
-itest!(stdout_write_sync_async {
- args: "run --quiet run/stdout_write_sync_async.ts",
- output: "run/stdout_write_sync_async.out",
-});
-
-itest!(_001_hello {
- args: "run --reload run/001_hello.js",
- output: "run/001_hello.js.out",
-});
-
-itest!(_002_hello {
- args: "run --quiet --reload run/002_hello.ts",
- output: "run/002_hello.ts.out",
-});
-
-itest!(_003_relative_import {
- args: "run --quiet --reload run/003_relative_import.ts",
- output: "run/003_relative_import.ts.out",
-});
-
-itest!(_004_set_timeout {
- args: "run --quiet --reload run/004_set_timeout.ts",
- output: "run/004_set_timeout.ts.out",
-});
-
-itest!(_005_more_imports {
- args: "run --quiet --reload run/005_more_imports.ts",
- output: "run/005_more_imports.ts.out",
-});
-
-itest!(_006_url_imports {
- args: "run --quiet --reload --allow-import run/006_url_imports.ts",
- output: "run/006_url_imports.ts.out",
- http_server: true,
-});
-
-itest!(_012_async {
- args: "run --quiet --reload run/012_async.ts",
- output: "run/012_async.ts.out",
-});
-
-itest!(_013_dynamic_import {
- args: "run --quiet --reload --allow-read run/013_dynamic_import.ts",
- output: "run/013_dynamic_import.ts.out",
-});
-
-itest!(_014_duplicate_import {
- args: "run --quiet --reload --allow-read run/014_duplicate_import.ts ",
- output: "run/014_duplicate_import.ts.out",
-});
-
-itest!(_015_duplicate_parallel_import {
- args:
- "run --quiet --reload --allow-read run/015_duplicate_parallel_import.js",
- output: "run/015_duplicate_parallel_import.js.out",
-});
-
-itest!(_016_double_await {
- args: "run --quiet --allow-read --reload run/016_double_await.ts",
- output: "run/016_double_await.ts.out",
-});
-
-itest!(_017_import_redirect {
- args: "run --quiet --allow-import --reload run/017_import_redirect.ts",
- output: "run/017_import_redirect.ts.out",
-});
-
-itest!(_017_import_redirect_check {
- args:
- "run --quiet --allow-import --reload --check run/017_import_redirect.ts",
- output: "run/017_import_redirect.ts.out",
-});
-
-itest!(_017_import_redirect_vendor_dir {
- args:
- "run --quiet --allow-import --reload --vendor --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 --allow-import --reload run/017_import_redirect.ts",
- output: "run/017_import_redirect_info.out",
-});
-
-itest!(_018_async_catch {
- args: "run --quiet --reload run/018_async_catch.ts",
- output: "run/018_async_catch.ts.out",
-});
-
-itest!(_019_media_types {
- args: "run --reload --allow-import run/019_media_types.ts",
- output: "run/019_media_types.ts.out",
- http_server: true,
-});
-
-itest!(_020_json_modules {
- args: "run --reload run/020_json_modules.ts",
- output: "run/020_json_modules.ts.out",
- exit_code: 1,
-});
-
-itest!(_021_mjs_modules {
- args: "run --quiet --reload run/021_mjs_modules.ts",
- output: "run/021_mjs_modules.ts.out",
-});
-
-itest!(_025_reload_js_type_error {
- args: "run --quiet --reload run/025_reload_js_type_error.js",
- output: "run/025_reload_js_type_error.js.out",
-});
-
-itest!(_027_redirect_typescript {
- args: "run --quiet --reload --allow-import run/027_redirect_typescript.ts",
- output: "run/027_redirect_typescript.ts.out",
- http_server: true,
-});
-
-itest!(_027_redirect_typescript_vendor_dir {
- args:
- "run --quiet --reload --vendor --allow-import $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",
- output: "run/028_args.ts.out",
-});
-
-itest!(_033_import_map_remote {
- args:
- "run --quiet --reload --allow-import --import-map=http://127.0.0.1:4545/import_maps/import_map_remote.json import_maps/test_remote.ts",
- output: "run/033_import_map_remote.out",
- http_server: true,
-});
-
-itest!(_033_import_map_vendor_dir_remote {
- args:
- "run --quiet --reload --allow-import --import-map=http://127.0.0.1:4545/import_maps/import_map_remote.json --vendor $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 --allow-import --import-map=data:application/json;charset=utf-8;base64,ewogICJpbXBvcnRzIjogewogICAgInRlc3Rfc2VydmVyLyI6ICJodHRwOi8vbG9jYWxob3N0OjQ1NDUvIgogIH0KfQ== run/import_maps/test_data.ts",
- output: "run/import_maps/test_data.ts.out",
- http_server: true,
-});
-
-itest!(onload {
- args: "run --quiet --reload --config ../config/deno.json run/onload/main.ts",
- output: "run/onload/main.out",
-});
-
-itest!(_035_cached_only_flag {
- args: "run --reload --check --allow-import --cached-only http://127.0.0.1:4545/run/019_media_types.ts",
- output: "run/035_cached_only_flag.out",
- exit_code: 1,
- http_server: true,
-});
-
-itest!(_038_checkjs {
- // checking if JS file is run through TS compiler
- args:
- "run --reload --config run/checkjs.tsconfig.json --check run/038_checkjs.js",
- exit_code: 1,
- output: "run/038_checkjs.js.out",
-});
-
-itest!(_042_dyn_import_evalcontext {
- args: "run --quiet --allow-read --reload run/042_dyn_import_evalcontext.ts",
- output: "run/042_dyn_import_evalcontext.ts.out",
-});
-
-itest!(_044_bad_resource {
- args: "run --quiet --reload --allow-read run/044_bad_resource.ts",
- output: "run/044_bad_resource.ts.out",
- exit_code: 1,
-});
-
-itest!(_046_tsx {
- args: "run --quiet --reload run/046_jsx_test.tsx",
- output: "run/046_jsx_test.tsx.out",
-});
-
-itest!(_047_jsx {
- args: "run --quiet --reload run/047_jsx_test.jsx",
- output: "run/047_jsx_test.jsx.out",
-});
-
-itest!(_048_media_types_jsx {
- args: "run --reload --allow-import run/048_media_types_jsx.ts",
- output: "run/048_media_types_jsx.ts.out",
- http_server: true,
-});
-
-itest!(_052_no_remote_flag {
- args:
- "run --reload --check --allow-import --no-remote http://127.0.0.1:4545/run/019_media_types.ts",
- output: "run/052_no_remote_flag.out",
- exit_code: 1,
- http_server: true,
-});
-
-itest!(_058_tasks_microtasks_close {
- args: "run --quiet run/058_tasks_microtasks_close.ts",
- output: "run/058_tasks_microtasks_close.ts.out",
-});
-
-itest!(_059_fs_relative_path_perm {
- args: "run run/059_fs_relative_path_perm.ts",
- output: "run/059_fs_relative_path_perm.ts.out",
- exit_code: 1,
-});
-
-itest!(_070_location {
- args: "run --location https://foo/bar?baz#bat run/070_location.ts",
- output: "run/070_location.ts.out",
-});
-
-itest!(_071_location_unset {
- args: "run run/071_location_unset.ts",
- output: "run/071_location_unset.ts.out",
-});
-
-itest!(_072_location_relative_fetch {
- args: "run --location http://127.0.0.1:4545/ --allow-net run/072_location_relative_fetch.ts",
- output: "run/072_location_relative_fetch.ts.out",
- http_server: true,
-});
-
-// tests the beforeunload event
-itest!(beforeunload_event {
- args: "run run/before_unload.js",
- output: "run/before_unload.js.out",
-});
-
-// tests the serialization of webstorage (both localStorage and sessionStorage)
-itest!(webstorage_serialization {
- args: "run run/webstorage/serialization.ts",
- output: "run/webstorage/serialization.ts.out",
-});
-
// tests to ensure that when `--location` is set, all code shares the same
// localStorage cache based on the origin of the location URL.
#[test]
@@ -394,41 +133,6 @@ fn webstorage_main_module() {
.assert_matches_text("Storage { hello: \"deno\", length: 1 }\n");
}
-itest!(_075_import_local_query_hash {
- args: "run run/075_import_local_query_hash.ts",
- output: "run/075_import_local_query_hash.ts.out",
-});
-
-itest!(_077_fetch_empty {
- args: "run -A run/077_fetch_empty.ts",
- output: "run/077_fetch_empty.ts.out",
- exit_code: 1,
-});
-
-itest!(_078_unload_on_exit {
- args: "run run/078_unload_on_exit.ts",
- output: "run/078_unload_on_exit.ts.out",
- exit_code: 1,
-});
-
-itest!(_079_location_authentication {
- args:
- "run --location https://foo:bar@baz/qux run/079_location_authentication.ts",
- output: "run/079_location_authentication.ts.out",
-});
-
-itest!(_081_location_relative_fetch_redirect {
- args: "run --location http://127.0.0.1:4546/ --allow-net run/081_location_relative_fetch_redirect.ts",
- output: "run/081_location_relative_fetch_redirect.ts.out",
- http_server: true,
- });
-
-itest!(_082_prepare_stack_trace_throw {
- args: "run run/082_prepare_stack_trace_throw.js",
- output: "run/082_prepare_stack_trace_throw.js.out",
- exit_code: 1,
-});
-
#[test]
fn _083_legacy_external_source_map() {
let _g = util::http_server();
@@ -457,27 +161,6 @@ fn _083_legacy_external_source_map() {
assert_eq!(out, "");
}
-itest!(dynamic_import_async_error {
- args: "run --allow-read run/dynamic_import_async_error/main.ts",
- output: "run/dynamic_import_async_error/main.out",
-});
-
-itest!(dynamic_import_already_rejected {
- args: "run --allow-read run/dynamic_import_already_rejected/main.ts",
- output: "run/dynamic_import_already_rejected/main.out",
-});
-
-itest!(dynamic_import_concurrent_non_statically_analyzable {
- args: "run --allow-import --allow-read --allow-net --quiet run/dynamic_import_concurrent_non_statically_analyzable/main.ts",
- output: "run/dynamic_import_concurrent_non_statically_analyzable/main.out",
- http_server: true,
-});
-
-itest!(_088_dynamic_import_already_evaluating {
- args: "run --allow-read run/088_dynamic_import_already_evaluating.ts",
- output: "run/088_dynamic_import_already_evaluating.ts.out",
-});
-
itest!(_089_run_allow_list {
args: "run --allow-run=curl run/089_run_allow_list.ts",
envs: vec![
@@ -713,16 +396,6 @@ fn permission_request_long() {
});
}
-itest!(deny_all_permission_args {
- args: "run --deny-env --deny-read --deny-write --deny-ffi --deny-run --deny-sys --deny-net run/deny_all_permission_args.js",
- output: "run/deny_all_permission_args.out",
-});
-
-itest!(deny_some_permission_args {
- args: "run --allow-env --deny-env=FOO --allow-read --deny-read=/foo --allow-write --deny-write=/foo --allow-ffi --deny-ffi=/foo --allow-run --deny-run=foo --allow-sys --deny-sys=hostname --allow-net --deny-net=127.0.0.1 run/deny_some_permission_args.js",
- output: "run/deny_some_permission_args.out",
-});
-
#[test]
fn permissions_cache() {
TestContext::default()
@@ -745,62 +418,6 @@ fn permissions_cache() {
});
}
-itest!(env_file {
- args: "run --env=env --allow-env run/env_file.ts",
- output: "run/env_file.out",
-});
-
-itest!(env_file_missing {
- args: "run --env=missing --allow-env run/env_file.ts",
- output: "run/env_file_missing.out",
-});
-
-itest!(_091_use_define_for_class_fields {
- args: "run --check run/091_use_define_for_class_fields.ts",
- output: "run/091_use_define_for_class_fields.ts.out",
- exit_code: 1,
-});
-
-itest!(js_import_detect {
- args: "run --quiet --reload run/js_import_detect.ts",
- output: "run/js_import_detect.ts.out",
- exit_code: 0,
-});
-
-itest!(blob_gc_finalization {
- args: "run run/blob_gc_finalization.js",
- output: "run/blob_gc_finalization.js.out",
- exit_code: 0,
-});
-
-itest!(fetch_response_finalization {
- args:
- "run --v8-flags=--expose-gc --allow-net run/fetch_response_finalization.js",
- output: "run/fetch_response_finalization.js.out",
- http_server: true,
- exit_code: 0,
-});
-
-itest!(import_type {
- args: "run --reload run/import_type.ts",
- output: "run/import_type.ts.out",
-});
-
-itest!(import_type_no_check {
- args: "run --reload --no-check run/import_type.ts",
- output: "run/import_type.ts.out",
-});
-
-itest!(private_field_presence {
- args: "run --reload run/private_field_presence.ts",
- output: "run/private_field_presence.ts.out",
-});
-
-itest!(private_field_presence_no_check {
- args: "run --reload --no-check run/private_field_presence.ts",
- output: "run/private_field_presence.ts.out",
-});
-
itest!(lock_write_fetch {
args:
"run --quiet --allow-import --allow-read --allow-write --allow-env --allow-run run/lock_write_fetch/main.ts",
@@ -809,33 +426,6 @@ itest!(lock_write_fetch {
exit_code: 0,
});
-itest!(lock_check_ok {
- args:
- "run --quiet --allow-import --lock=run/lock_check_ok.json http://127.0.0.1:4545/run/003_relative_import.ts",
- output: "run/003_relative_import.ts.out",
- http_server: true,
-});
-
-itest!(lock_check_ok2 {
- args:
- "run --allow-import --lock=run/lock_check_ok2.json run/019_media_types.ts",
- output: "run/019_media_types.ts.out",
- http_server: true,
-});
-
-itest!(lock_v2_check_ok {
- args:
- "run --allow-import --quiet --lock=run/lock_v2_check_ok.json http://127.0.0.1:4545/run/003_relative_import.ts",
- output: "run/003_relative_import.ts.out",
- http_server: true,
-});
-
-itest!(lock_v2_check_ok2 {
- args: "run --allow-import --lock=run/lock_v2_check_ok2.json run/019_media_types.ts",
- output: "run/019_media_types.ts.out",
- http_server: true,
-});
-
#[test]
fn lock_redirects() {
let context = TestContextBuilder::new()
@@ -898,7 +488,7 @@ fn lock_redirects() {
.run()
.assert_matches_text(concat!(
"Download http://localhost:4545/echo.ts\n",
- "Download http://localhost:4260/@denotest/esm-basic\n",
+ "Download http://localhost:4260/@denotest%2fesm-basic\n",
"Download http://localhost:4260/@denotest/esm-basic/1.0.0.tgz\n",
"Hi, there",
));
@@ -1234,141 +824,12 @@ fn get_lockfile_npm_package_integrity(
.to_string()
}
-itest!(mts_dmts_mjs {
- args: "run subdir/import.mts",
- output: "run/mts_dmts_mjs.out",
-});
-
-itest!(mts_dmts_mjs_no_check {
- args: "run --no-check subdir/import.mts",
- output: "run/mts_dmts_mjs.out",
-});
-
-itest!(async_error {
- exit_code: 1,
- args: "run --reload run/async_error.ts",
- output: "run/async_error.ts.out",
-});
-
-itest!(config {
- args:
- "run --reload --config run/config/tsconfig.json --check run/config/main.ts",
- output: "run/config/main.out",
-});
-
-itest!(config_types {
- args:
- "run --reload --quiet --check=all --config run/config_types/tsconfig.json run/config_types/main.ts",
- output: "run/config_types/main.out",
-});
-
-itest!(config_types_remote {
- http_server: true,
- args: "run --allow-import --reload --quiet --check=all --config run/config_types/remote.tsconfig.json run/config_types/main.ts",
- output: "run/config_types/main.out",
-});
-
-itest!(empty_typescript {
- args: "run --reload --check run/empty.ts",
- output_str: Some("Check file:[WILDCARD]/run/empty.ts\n"),
-});
-
-itest!(error_001 {
- args: "run --reload run/error_001.ts",
- exit_code: 1,
- output: "run/error_001.ts.out",
-});
-
-itest!(error_002 {
- args: "run --reload run/error_002.ts",
- exit_code: 1,
- output: "run/error_002.ts.out",
-});
-
-itest!(error_003_typescript {
- args: "run --reload --check run/error_003_typescript.ts",
- exit_code: 1,
- output: "run/error_003_typescript.ts.out",
-});
-
-// Supposing that we've already attempted to run error_003_typescript.ts
-// we want to make sure that JS wasn't emitted. Running again without reload flag
-// should result in the same output.
-// https://github.com/denoland/deno/issues/2436
-itest!(error_003_typescript2 {
- args: "run --check run/error_003_typescript.ts",
- exit_code: 1,
- output: "run/error_003_typescript.ts.out",
-});
-
-itest!(error_004_missing_module {
- args: "run --reload run/error_004_missing_module.ts",
- exit_code: 1,
- output: "run/error_004_missing_module.ts.out",
-});
-
-itest!(error_005_missing_dynamic_import {
- args:
- "run --reload --allow-read --quiet run/error_005_missing_dynamic_import.ts",
- exit_code: 1,
- output: "run/error_005_missing_dynamic_import.ts.out",
-});
-
-itest!(error_006_import_ext_failure {
- args: "run --reload run/error_006_import_ext_failure.ts",
- exit_code: 1,
- output: "run/error_006_import_ext_failure.ts.out",
-});
-
-itest!(error_007_any {
- args: "run --reload run/error_007_any.ts",
- exit_code: 1,
- output: "run/error_007_any.ts.out",
-});
-
-itest!(error_008_checkjs {
- args: "run --reload run/error_008_checkjs.js",
- exit_code: 1,
- output: "run/error_008_checkjs.js.out",
-});
-
-itest!(error_009_extensions_error {
- args: "run run/error_009_extensions_error.js",
- output: "run/error_009_extensions_error.js.out",
- exit_code: 1,
-});
-
-itest!(error_011_bad_module_specifier {
- args: "run --reload run/error_011_bad_module_specifier.ts",
- exit_code: 1,
- output: "run/error_011_bad_module_specifier.ts.out",
-});
-
-itest!(error_012_bad_dynamic_import_specifier {
- args: "run --reload --check run/error_012_bad_dynamic_import_specifier.ts",
- exit_code: 1,
- output: "run/error_012_bad_dynamic_import_specifier.ts.out",
-});
-
itest!(error_013_missing_script {
args: "run --reload missing_file_name",
exit_code: 1,
output: "run/error_013_missing_script.out",
});
-itest!(error_014_catch_dynamic_import_error {
- args:
- "run --reload --allow-read run/error_014_catch_dynamic_import_error.js",
- output: "run/error_014_catch_dynamic_import_error.js.out",
-});
-
-itest!(error_015_dynamic_import_permissions {
- args: "run --reload --quiet run/error_015_dynamic_import_permissions.js",
- output: "run/error_015_dynamic_import_permissions.out",
- exit_code: 1,
- http_server: true,
-});
-
// We have an allow-import flag but not allow-read, it should still result in error.
itest!(error_016_dynamic_import_permissions2 {
args:
@@ -1378,60 +839,6 @@ itest!(error_016_dynamic_import_permissions2 {
http_server: true,
});
-itest!(error_017_hide_long_source_ts {
- args: "run --reload --check run/error_017_hide_long_source_ts.ts",
- output: "run/error_017_hide_long_source_ts.ts.out",
- exit_code: 1,
-});
-
-itest!(error_018_hide_long_source_js {
- args: "run run/error_018_hide_long_source_js.js",
- output: "run/error_018_hide_long_source_js.js.out",
- exit_code: 1,
-});
-
-itest!(error_019_stack_function {
- args: "run run/error_019_stack_function.ts",
- output: "run/error_019_stack_function.ts.out",
- exit_code: 1,
-});
-
-itest!(error_020_stack_constructor {
- args: "run run/error_020_stack_constructor.ts",
- output: "run/error_020_stack_constructor.ts.out",
- exit_code: 1,
-});
-
-itest!(error_021_stack_method {
- args: "run run/error_021_stack_method.ts",
- output: "run/error_021_stack_method.ts.out",
- exit_code: 1,
-});
-
-itest!(error_022_stack_custom_error {
- args: "run run/error_022_stack_custom_error.ts",
- output: "run/error_022_stack_custom_error.ts.out",
- exit_code: 1,
-});
-
-itest!(error_023_stack_async {
- args: "run run/error_023_stack_async.ts",
- output: "run/error_023_stack_async.ts.out",
- exit_code: 1,
-});
-
-itest!(error_024_stack_promise_all {
- args: "run run/error_024_stack_promise_all.ts",
- output: "run/error_024_stack_promise_all.ts.out",
- exit_code: 1,
-});
-
-itest!(error_025_tab_indent {
- args: "run run/error_025_tab_indent",
- output: "run/error_025_tab_indent.out",
- exit_code: 1,
-});
-
itest!(error_026_remote_import_error {
args: "run --allow-import run/error_026_remote_import_error.ts",
output: "run/error_026_remote_import_error.ts.out",
@@ -1439,42 +846,6 @@ itest!(error_026_remote_import_error {
http_server: true,
});
-itest!(error_for_await {
- args: "run --reload --check run/error_for_await.ts",
- output: "run/error_for_await.ts.out",
- exit_code: 1,
-});
-
-itest!(error_missing_module_named_import {
- args: "run --reload run/error_missing_module_named_import.ts",
- output: "run/error_missing_module_named_import.ts.out",
- exit_code: 1,
-});
-
-itest!(error_no_check {
- args: "run --reload --no-check run/error_no_check.ts",
- output: "run/error_no_check.ts.out",
- exit_code: 1,
-});
-
-itest!(error_syntax {
- args: "run --reload run/error_syntax.js",
- exit_code: 1,
- output: "run/error_syntax.js.out",
-});
-
-itest!(error_syntax_empty_trailing_line {
- args: "run --reload run/error_syntax_empty_trailing_line.mjs",
- exit_code: 1,
- output: "run/error_syntax_empty_trailing_line.mjs.out",
-});
-
-itest!(error_type_definitions {
- args: "run --reload --check run/error_type_definitions.ts",
- exit_code: 1,
- output: "run/error_type_definitions.ts.out",
-});
-
itest!(error_local_static_import_from_remote_ts {
args: "run --allow-import --reload http://localhost:4545/run/error_local_static_import_from_remote.ts",
exit_code: 1,
@@ -1489,138 +860,18 @@ itest!(error_local_static_import_from_remote_js {
output: "run/error_local_static_import_from_remote.js.out",
});
-itest!(exit_error42 {
- exit_code: 42,
- args: "run --quiet --reload run/exit_error42.ts",
- output: "run/exit_error42.ts.out",
-});
-
-itest!(set_exit_code_0 {
- args: "run --no-check run/set_exit_code_0.ts",
- output_str: Some(""),
- exit_code: 0,
-});
-
-itest!(set_exit_code_1 {
- args: "run --no-check run/set_exit_code_1.ts",
- output_str: Some(""),
- exit_code: 42,
-});
-
-itest!(set_exit_code_2 {
- args: "run --no-check run/set_exit_code_2.ts",
- output_str: Some(""),
- exit_code: 42,
-});
-
-itest!(op_exit_op_set_exit_code_in_worker {
- args: "run --no-check --allow-read run/op_exit_op_set_exit_code_in_worker.ts",
- exit_code: 21,
- output_str: Some(""),
-});
-
-itest!(deno_exit_tampering {
- args: "run --no-check run/deno_exit_tampering.ts",
- output_str: Some(""),
- exit_code: 42,
-});
-
-itest!(heapstats {
- args: "run --quiet --v8-flags=--expose-gc run/heapstats.js",
- output: "run/heapstats.js.out",
-});
-
-itest!(finalization_registry {
- args: "run --quiet --v8-flags=--expose-gc run/finalization_registry.js",
- output: "run/finalization_registry.js.out",
-});
-
-itest!(https_import {
- args: "run --allow-import --quiet --reload --cert tls/RootCA.pem run/https_import.ts",
- output: "run/https_import.ts.out",
- http_server: true,
-});
-
-itest!(if_main {
- args: "run --quiet --reload run/if_main.ts",
- output: "run/if_main.ts.out",
-});
-
itest!(import_meta {
args: "run --allow-import --quiet --reload --import-map=run/import_meta/importmap.json run/import_meta/main.ts",
output: "run/import_meta/main.out",
http_server: true,
});
-itest!(main_module {
- args: "run --quiet --reload run/main_module/main.ts",
- output: "run/main_module/main.out",
-});
-
-itest!(no_check {
- args: "run --allow-import --quiet --reload --no-check run/006_url_imports.ts",
- output: "run/006_url_imports.ts.out",
- http_server: true,
-});
-
-itest!(no_check_decorators {
- args: "run --quiet --reload --no-check run/decorators/experimental/no_check/main.ts",
- output: "run/decorators/experimental/no_check/main.out",
-});
-
-itest!(decorators_tc39_proposal {
- args: "run --quiet --reload --check run/decorators/tc39_proposal/main.ts",
- output: "run/decorators/tc39_proposal/main.out",
-});
-
-itest!(check_remote {
- args:
- "run --quiet --allow-import --reload --check=all run/no_check_remote.ts",
- output: "run/no_check_remote.ts.disabled.out",
- exit_code: 1,
- http_server: true,
-});
-
itest!(no_check_remote {
args: "run --allow-import --quiet --reload --no-check=remote run/no_check_remote.ts",
output: "run/no_check_remote.ts.enabled.out",
http_server: true,
});
-itest!(runtime_decorators {
- args: "run --quiet --reload --no-check run/decorators/experimental/runtime/main.ts",
- output: "run/decorators/experimental/runtime/main.out",
-});
-
-itest!(seed_random {
- args: "run --seed=100 run/seed_random.js",
- output: "run/seed_random.js.out",
-});
-
-itest!(type_definitions {
- args: "run --reload run/type_definitions.ts",
- output: "run/type_definitions.ts.out",
-});
-
-itest!(type_definitions_for_export {
- args: "run --reload --check run/type_definitions_for_export.ts",
- output: "run/type_definitions_for_export.ts.out",
- exit_code: 1,
-});
-
-itest!(type_directives_01 {
- args:
- "run --allow-import --reload --check=all -L debug run/type_directives_01.ts",
- output: "run/type_directives_01.ts.out",
- http_server: true,
-});
-
-itest!(type_directives_02 {
- args:
- "run --allow-import --reload --check=all -L debug run/type_directives_02.ts",
- output: "run/type_directives_02.ts.out",
-});
-
#[test]
fn type_directives_js_main() {
let context = TestContext::default();
@@ -1642,216 +893,6 @@ itest!(type_directives_redirect {
http_server: true,
});
-itest!(type_headers_deno_types {
- args: "run --allow-import --reload --check run/type_headers_deno_types.ts",
- output: "run/type_headers_deno_types.ts.out",
- http_server: true,
-});
-
-itest!(ts_type_imports {
- args: "run --reload --check run/ts_type_imports.ts",
- output: "run/ts_type_imports.ts.out",
- exit_code: 1,
-});
-
-itest!(ts_decorators {
- args: "run --reload --check run/decorators/experimental/ts/main.ts",
- output: "run/decorators/experimental/ts/main.out",
-});
-
-itest!(ts_type_only_import {
- args: "run --reload --check run/ts_type_only_import.ts",
- output: "run/ts_type_only_import.ts.out",
-});
-
-itest!(swc_syntax_error {
- args: "run --reload --check run/swc_syntax_error.ts",
- output: "run/swc_syntax_error.ts.out",
- exit_code: 1,
-});
-
-itest!(unbuffered_stderr {
- args: "run --reload run/unbuffered_stderr.ts",
- output: "run/unbuffered_stderr.ts.out",
-});
-
-itest!(unbuffered_stdout {
- args: "run --quiet --reload run/unbuffered_stdout.ts",
- output: "run/unbuffered_stdout.ts.out",
-});
-
-itest!(v8_flags_run {
- args: "run --v8-flags=--expose-gc run/v8_flags.js",
- output: "run/v8_flags.js.out",
-});
-
-itest!(v8_flags_env_run {
- envs: vec![("DENO_V8_FLAGS".to_string(), "--expose-gc".to_string())],
- args: "run run/v8_flags.js",
- output: "run/v8_flags.js.out",
-});
-
-itest!(v8_flags_unrecognized {
- args: "repl --v8-flags=--foo,bar,--trace-gc,-baz",
- output: "run/v8_flags_unrecognized.out",
- exit_code: 1,
-});
-
-itest!(v8_help {
- args: "repl --v8-flags=--help",
- output: "run/v8_help.out",
-});
-
-itest!(unsupported_dynamic_import_scheme {
- args: "eval import('xxx:')",
- output: "run/unsupported_dynamic_import_scheme.out",
- exit_code: 1,
-});
-
-itest!(wasm {
- args: "run --quiet run/wasm.ts",
- output: "run/wasm.ts.out",
-});
-
-itest!(wasm_shared {
- args: "run --quiet run/wasm_shared.ts",
- output: "run/wasm_shared.out",
-});
-
-itest!(wasm_async {
- args: "run run/wasm_async.js",
- output: "run/wasm_async.out",
-});
-
-itest!(wasm_unreachable {
- args: "run --allow-read run/wasm_unreachable.js",
- output: "run/wasm_unreachable.out",
- exit_code: 1,
-});
-
-itest!(wasm_url {
- args: "run --quiet --allow-net=localhost:4545 run/wasm_url.js",
- output: "run/wasm_url.out",
- exit_code: 1,
- http_server: true,
-});
-
-itest!(weakref {
- args: "run --quiet --reload run/weakref.ts",
- output: "run/weakref.ts.out",
-});
-
-itest!(top_level_await_order {
- args: "run --allow-read run/top_level_await/order.js",
- output: "run/top_level_await/order.out",
-});
-
-itest!(top_level_await_loop {
- args: "run --allow-read run/top_level_await/loop.js",
- output: "run/top_level_await/loop.out",
-});
-
-itest!(top_level_await_circular {
- args: "run --allow-read run/top_level_await/circular.js",
- output: "run/top_level_await/circular.out",
- exit_code: 1,
-});
-
-// Regression test for https://github.com/denoland/deno/issues/11238.
-itest!(top_level_await_nested {
- args: "run --allow-read run/top_level_await/nested/main.js",
- output: "run/top_level_await/nested.out",
-});
-
-itest!(top_level_await_unresolved {
- args: "run run/top_level_await/unresolved.js",
- output: "run/top_level_await/unresolved.out",
- exit_code: 1,
-});
-
-itest!(top_level_await {
- args: "run --allow-read run/top_level_await/top_level_await.js",
- output: "run/top_level_await/top_level_await.out",
-});
-
-itest!(top_level_await_ts {
- args: "run --quiet --allow-read run/top_level_await/top_level_await.ts",
- output: "run/top_level_await/top_level_await.out",
-});
-
-itest!(top_level_for_await {
- args: "run --quiet run/top_level_await/top_level_for_await.js",
- output: "run/top_level_await/top_level_for_await.out",
-});
-
-itest!(top_level_for_await_ts {
- args: "run --quiet run/top_level_await/top_level_for_await.ts",
- output: "run/top_level_await/top_level_for_await.out",
-});
-
-itest!(unstable_worker {
- args: "run --reload --quiet --allow-read run/unstable_worker.ts",
- output: "run/unstable_worker.ts.out",
-});
-
-itest!(unstable_worker_options_disabled {
- args: "run --quiet --reload --allow-read run/unstable_worker_options.js",
- output: "run/unstable_worker_options.disabled.out",
- exit_code: 70,
-});
-
-itest!(unstable_worker_options_enabled {
- args: "run --quiet --reload --allow-read --unstable-worker-options run/unstable_worker_options.js",
- output: "run/unstable_worker_options.enabled.out",
-});
-
-itest!(unstable_broadcast_channel_disabled {
- args: "run --quiet --reload --allow-read run/unstable_broadcast_channel.js",
- output: "run/unstable_broadcast_channel.disabled.out",
-});
-
-itest!(unstable_broadcast_channel_enabled {
- args: "run --quiet --reload --allow-read --unstable-broadcast-channel run/unstable_broadcast_channel.js",
- output: "run/unstable_broadcast_channel.enabled.out",
-});
-
-itest!(unstable_cron_disabled {
- args: "run --quiet --reload --allow-read run/unstable_cron.js",
- output: "run/unstable_cron.disabled.out",
-});
-
-itest!(unstable_cron_enabled {
- args:
- "run --quiet --reload --allow-read --unstable-cron run/unstable_cron.js",
- output: "run/unstable_cron.enabled.out",
-});
-
-itest!(unstable_net_disabled {
- args: "run --quiet --reload --allow-read run/unstable_net.js",
- output: "run/unstable_net.disabled.out",
-});
-
-itest!(unstable_net_enabled {
- args: "run --quiet --reload --allow-read --unstable-net run/unstable_net.js",
- output: "run/unstable_net.enabled.out",
-});
-
-itest!(unstable_kv_disabled {
- args: "run --quiet --reload --allow-read run/unstable_kv.js",
- output: "run/unstable_kv.disabled.out",
-});
-
-itest!(unstable_kv_enabled {
- args: "run --quiet --reload --allow-read --unstable-kv run/unstable_kv.js",
- output: "run/unstable_kv.enabled.out",
-});
-
-itest!(import_compression {
- args: "run --allow-import --quiet --reload --allow-net run/import_compression/main.ts",
- output: "run/import_compression/main.out",
- http_server: true,
-});
-
itest!(disallow_http_from_https_js {
args: "run --allow-import --quiet --reload --cert tls/RootCA.pem https://localhost:5545/run/disallow_http_from_https.js",
output: "run/disallow_http_from_https_js.out",
@@ -1866,131 +907,6 @@ itest!(disallow_http_from_https_ts {
exit_code: 1,
});
-itest!(dynamic_import_conditional {
- args: "run --quiet --reload run/dynamic_import_conditional.js",
- output: "run/dynamic_import_conditional.js.out",
-});
-
-itest!(tsx_imports {
- args: "run --reload --check run/tsx_imports/tsx_imports.ts",
- output: "run/tsx_imports/tsx_imports.ts.out",
-});
-
-itest!(fix_dynamic_import_errors {
- args: "run --reload run/fix_dynamic_import_errors.js",
- output: "run/fix_dynamic_import_errors.js.out",
-});
-
-itest!(fix_emittable_skipped {
- args: "run --reload run/fix_emittable_skipped.js",
- output: "run/fix_emittable_skipped.ts.out",
-});
-
-itest!(fix_js_import_js {
- args: "run --quiet --reload run/fix_js_import_js.ts",
- output: "run/fix_js_import_js.ts.out",
-});
-
-itest!(fix_js_imports {
- args: "run --quiet --reload run/fix_js_imports.ts",
- output: "run/fix_js_imports.ts.out",
-});
-
-itest!(fix_tsc_file_exists {
- args: "run --quiet --reload tsc/test.js",
- output: "run/fix_tsc_file_exists.out",
-});
-
-itest!(fix_worker_dispatchevent {
- args: "run --quiet --reload run/fix_worker_dispatchevent.ts",
- output: "run/fix_worker_dispatchevent.ts.out",
-});
-
-itest!(es_private_fields {
- args: "run --quiet --reload run/es_private_fields.js",
- output: "run/es_private_fields.js.out",
-});
-
-itest!(ts_import_from_js {
- args: "run --allow-import --quiet --reload run/ts_import_from_js/main.js",
- output: "run/ts_import_from_js/main.out",
- http_server: true,
-});
-
-itest!(jsx_import_from_ts {
- args: "run --quiet --reload run/jsx_import_from_ts.ts",
- output: "run/jsx_import_from_ts.ts.out",
-});
-
-itest!(jsx_import_source_pragma {
- args: "run --reload --allow-import run/jsx_import_source_pragma.tsx",
- output: "run/jsx_import_source.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_pragma_with_config {
- args:
- "run --reload --allow-import --config jsx/deno-jsx.jsonc --no-lock run/jsx_import_source_pragma.tsx",
- output: "run/jsx_import_source.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_pragma_with_dev_config {
- args:
- "run --reload --allow-import --config jsx/deno-jsxdev.jsonc --no-lock run/jsx_import_source_pragma.tsx",
- output: "run/jsx_import_source_dev.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_no_pragma {
- args:
- "run --allow-import --reload --config jsx/deno-jsx.jsonc --no-lock run/jsx_import_source_no_pragma.tsx",
- output: "run/jsx_import_source.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_no_pragma_dev {
- args: "run --allow-import --reload --config jsx/deno-jsxdev.jsonc --no-lock run/jsx_import_source_no_pragma.tsx",
- output: "run/jsx_import_source_dev.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_pragma_import_map {
- args: "run --allow-import --reload --import-map jsx/import-map.json run/jsx_import_source_pragma_import_map.tsx",
- output: "run/jsx_import_source_import_map.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_pragma_import_map_dev {
- args: "run --allow-import --reload --import-map jsx/import-map.json --config jsx/deno-jsxdev-import-map.jsonc run/jsx_import_source_pragma_import_map.tsx",
- output: "run/jsx_import_source_import_map_dev.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_precompile_import_map {
- args: "run --allow-import --reload --check --import-map jsx/import-map.json --no-lock --config jsx/deno-jsx-precompile.jsonc run/jsx_precompile/no_pragma.tsx",
- output: "run/jsx_precompile/no_pragma.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_precompile_import_map_skip_element {
- args: "run --allow-import --reload --check --import-map jsx/import-map.json --no-lock --config jsx/deno-jsx-precompile-skip.jsonc run/jsx_precompile/skip.tsx",
- output: "run/jsx_precompile/skip.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_import_map {
- args: "run --allow-import --reload --import-map jsx/import-map.json --no-lock --config jsx/deno-jsx-import-map.jsonc run/jsx_import_source_no_pragma.tsx",
- output: "run/jsx_import_source_import_map.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_import_map_dev {
- args: "run --allow-import --reload --import-map jsx/import-map.json --no-lock --config jsx/deno-jsxdev-import-map.jsonc run/jsx_import_source_no_pragma.tsx",
- output: "run/jsx_import_source_import_map_dev.out",
- http_server: true,
-});
-
itest!(jsx_import_source_import_map_scoped {
args: "run --allow-import --reload --import-map jsx/import-map-scoped.json --no-lock --config jsx/deno-jsx-import-map.jsonc subdir/jsx_import_source_no_pragma.tsx",
output: "run/jsx_import_source_import_map.out",
@@ -2003,289 +919,12 @@ itest!(jsx_import_source_import_map_scoped_dev {
http_server: true,
});
-itest!(jsx_import_source_pragma_no_check {
- args:
- "run --allow-import --reload --no-check run/jsx_import_source_pragma.tsx",
- output: "run/jsx_import_source.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_pragma_with_config_no_check {
- args: "run --allow-import --reload --config jsx/deno-jsx.jsonc --no-lock --no-check run/jsx_import_source_pragma.tsx",
- output: "run/jsx_import_source.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_pragma_with_config_vendor_dir {
- args: "run --allow-import --reload --config jsx/deno-jsx.jsonc --no-lock --vendor $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 --allow-import --reload --config jsx/deno-jsx.jsonc --no-lock --no-check run/jsx_import_source_no_pragma.tsx",
- output: "run/jsx_import_source.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_pragma_import_map_no_check {
- args: "run --allow-import --reload --import-map jsx/import-map.json --no-check run/jsx_import_source_pragma_import_map.tsx",
- output: "run/jsx_import_source_import_map.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_import_map_no_check {
- args: "run --allow-import --reload --import-map jsx/import-map.json --no-lock --config jsx/deno-jsx-import-map.jsonc --no-check run/jsx_import_source_no_pragma.tsx",
- output: "run/jsx_import_source_import_map.out",
- http_server: true,
-});
-
-itest!(jsx_import_source_error {
- args: "run --config jsx/deno-jsx-error.jsonc --check run/jsx_import_source_no_pragma.tsx",
- output: "run/jsx_import_source_error.out",
- exit_code: 1,
-});
-
-itest!(single_compile_with_reload {
- args: "run --reload --allow-read run/single_compile_with_reload.ts",
- output: "run/single_compile_with_reload.ts.out",
-});
-
-itest!(proto_exploit {
- args: "run run/proto_exploit.js",
- output: "run/proto_exploit.js.out",
-});
-
-itest!(reference_types {
- args: "run --reload --quiet run/reference_types.ts",
- output: "run/reference_types.ts.out",
-});
-
-itest!(references_types_remote {
- http_server: true,
- args: "run --reload --quiet run/reference_types_remote.ts",
- output: "run/reference_types_remote.ts.out",
-});
-
-itest!(reference_types_error {
- args:
- "run --config run/checkjs.tsconfig.json --check run/reference_types_error.js",
- output: "run/reference_types_error.js.out",
- exit_code: 1,
-});
-
-itest!(reference_types_error_vendor_dir {
- args:
- "run --config run/checkjs.tsconfig.json --check --vendor $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(""),
-});
-
-itest!(import_data_url_error_stack {
- args: "run --quiet --reload run/import_data_url_error_stack.ts",
- output: "run/import_data_url_error_stack.ts.out",
- exit_code: 1,
-});
-
-itest!(import_data_url_import_relative {
- args: "run --quiet --reload run/import_data_url_import_relative.ts",
- output: "run/import_data_url_import_relative.ts.out",
- exit_code: 1,
-});
-
-itest!(import_data_url_imports {
- args: "run --allow-import --quiet --reload run/import_data_url_imports.ts",
- output: "run/import_data_url_imports.ts.out",
- http_server: true,
-});
-
-itest!(import_data_url_jsx {
- args: "run --quiet --reload run/import_data_url_jsx.ts",
- output: "run/import_data_url_jsx.ts.out",
-});
-
-itest!(import_data_url {
- args: "run --quiet --reload run/import_data_url.ts",
- output: "run/import_data_url.ts.out",
-});
-
-itest!(import_dynamic_data_url {
- args: "run --quiet --reload run/import_dynamic_data_url.ts",
- output: "run/import_dynamic_data_url.ts.out",
-});
-
-itest!(import_blob_url_error_stack {
- args: "run --quiet --reload run/import_blob_url_error_stack.ts",
- output: "run/import_blob_url_error_stack.ts.out",
- exit_code: 1,
-});
-
-itest!(import_blob_url_import_relative {
- args: "run --quiet --reload run/import_blob_url_import_relative.ts",
- output: "run/import_blob_url_import_relative.ts.out",
- exit_code: 1,
-});
-
-itest!(import_blob_url_imports {
- args:
- "run --allow-import --quiet --reload --allow-net=localhost:4545 run/import_blob_url_imports.ts",
- output: "run/import_blob_url_imports.ts.out",
- http_server: true,
-});
-
-itest!(import_blob_url_jsx {
- args: "run --quiet --reload run/import_blob_url_jsx.ts",
- output: "run/import_blob_url_jsx.ts.out",
-});
-
-itest!(import_blob_url {
- args: "run --quiet --reload run/import_blob_url.ts",
- output: "run/import_blob_url.ts.out",
-});
-
-itest!(import_file_with_colon {
- args: "run --allow-import --quiet --reload run/import_file_with_colon.ts",
- output: "run/import_file_with_colon.ts.out",
- http_server: true,
-});
-
-itest!(import_extensionless {
- args: "run --allow-import --quiet --reload run/import_extensionless.ts",
- output: "run/import_extensionless.ts.out",
- http_server: true,
-});
-
-itest!(classic_workers_event_loop {
- args:
- "run --enable-testing-features-do-not-use run/classic_workers_event_loop.js",
- output: "run/classic_workers_event_loop.js.out",
-});
-
// FIXME(bartlomieju): disabled, because this test is very flaky on CI
// itest!(local_sources_not_cached_in_memory {
// args: "run --allow-read --allow-write run/no_mem_cache.js",
// output: "run/no_mem_cache.js.out",
// });
-// This test checks that inline source map data is used. It uses a hand crafted
-// source map that maps to a file that exists, but is not loaded into the module
-// graph (inline_js_source_map_2.ts) (because there are no direct dependencies).
-// Source line is not remapped because no inline source contents are included in
-// the sourcemap and the file is not present in the dependency graph.
-itest!(inline_js_source_map_2 {
- args: "run --quiet run/inline_js_source_map_2.js",
- output: "run/inline_js_source_map_2.js.out",
- exit_code: 1,
-});
-
-// This test checks that inline source map data is used. It uses a hand crafted
-// source map that maps to a file that exists, but is not loaded into the module
-// graph (inline_js_source_map_2.ts) (because there are no direct dependencies).
-// Source line remapped using th inline source contents that are included in the
-// inline source map.
-itest!(inline_js_source_map_2_with_inline_contents {
- args: "run --quiet run/inline_js_source_map_2_with_inline_contents.js",
- output: "run/inline_js_source_map_2_with_inline_contents.js.out",
- exit_code: 1,
-});
-
-// This test checks that inline source map data is used. It uses a hand crafted
-// source map that maps to a file that exists, and is loaded into the module
-// graph because of a direct import statement (inline_js_source_map.ts). The
-// source map was generated from an earlier version of this file, where the throw
-// was not commented out. The source line is remapped using source contents that
-// from the module graph.
-itest!(inline_js_source_map_with_contents_from_graph {
- args: "run --allow-import --quiet run/inline_js_source_map_with_contents_from_graph.js",
- output: "run/inline_js_source_map_with_contents_from_graph.js.out",
- exit_code: 1,
- http_server: true,
-});
-
-// This test ensures that a descriptive error is shown when we're unable to load
-// the import map. Even though this tests only the `run` subcommand, we can be sure
-// that the error message is similar for other subcommands as they all use
-// `program_state.maybe_import_map` to access the import map underneath.
-itest!(error_import_map_unable_to_load {
- args: "run --import-map=import_maps/does_not_exist.json import_maps/test.ts",
- output: "run/error_import_map_unable_to_load.out",
- exit_code: 1,
-});
-
-// Test that setting `self` in the main thread to some other value doesn't break
-// the world.
-itest!(replace_self {
- args: "run run/replace_self.js",
- output: "run/replace_self.js.out",
-});
-
-itest!(worker_event_handler_test {
- args: "run --quiet --reload --allow-read run/worker_event_handler_test.js",
- output: "run/worker_event_handler_test.js.out",
-});
-
-itest!(worker_close_race {
- args: "run --quiet --reload --allow-read run/worker_close_race.js",
- output: "run/worker_close_race.js.out",
-});
-
-itest!(worker_drop_handle_race {
- args: "run --quiet --reload --allow-read run/worker_drop_handle_race.js",
- output: "run/worker_drop_handle_race.js.out",
- exit_code: 1,
-});
-
-itest!(worker_drop_handle_race_terminate {
- args: "run run/worker_drop_handle_race_terminate.js",
- output: "run/worker_drop_handle_race_terminate.js.out",
-});
-
-itest!(worker_close_nested {
- args: "run --quiet --reload --allow-read run/worker_close_nested.js",
- output: "run/worker_close_nested.js.out",
-});
-
-itest!(worker_message_before_close {
- args: "run --quiet --reload --allow-read run/worker_message_before_close.js",
- output: "run/worker_message_before_close.js.out",
-});
-
-itest!(worker_close_in_wasm_reactions {
- args:
- "run --quiet --reload --allow-read run/worker_close_in_wasm_reactions.js",
- output: "run/worker_close_in_wasm_reactions.js.out",
-});
-
-itest!(shebang_tsc {
- args: "run --quiet --check run/shebang.ts",
- output: "run/shebang.ts.out",
-});
-
-itest!(shebang_swc {
- args: "run --quiet run/shebang.ts",
- output: "run/shebang.ts.out",
-});
-
-itest!(shebang_with_json_imports_tsc {
- args: "run --quiet import_attributes/json_with_shebang.ts",
- output: "import_attributes/json_with_shebang.ts.out",
- exit_code: 1,
-});
-
-itest!(shebang_with_json_imports_swc {
- args: "run --quiet --no-check import_attributes/json_with_shebang.ts",
- output: "import_attributes/json_with_shebang.ts.out",
- exit_code: 1,
-});
-
#[test]
fn no_validate_asm() {
let output = util::deno_cmd()
@@ -2523,7 +1162,6 @@ fn dont_cache_on_check_fail() {
mod permissions {
use test_util as util;
- use test_util::itest;
use util::TestContext;
#[test]
@@ -2973,31 +1611,6 @@ mod permissions {
});
}
- itest!(_063_permissions_revoke {
- args: "run --allow-read=foo,bar run/063_permissions_revoke.ts",
- output: "run/063_permissions_revoke.ts.out",
- });
-
- itest!(_063_permissions_revoke_sync {
- args: "run --allow-read=foo,bar run/063_permissions_revoke_sync.ts",
- output: "run/063_permissions_revoke.ts.out",
- });
-
- itest!(_064_permissions_revoke_global {
- args: "run --allow-read=foo,bar run/064_permissions_revoke_global.ts",
- output: "run/064_permissions_revoke_global.ts.out",
- });
-
- itest!(_064_permissions_revoke_global_sync {
- args: "run --allow-read=foo,bar run/064_permissions_revoke_global_sync.ts",
- output: "run/064_permissions_revoke_global.ts.out",
- });
-
- itest!(_065_permissions_revoke_net {
- args: "run --allow-net run/065_permissions_revoke_net.ts",
- output: "run/065_permissions_revoke_net.ts.out",
- });
-
#[test]
fn _066_prompt() {
TestContext::default()
@@ -3033,63 +1646,8 @@ mod permissions {
console.expect("The end of test");
});
}
-
- itest!(dynamic_import_static_analysis_no_permissions {
- args: "run --quiet --reload --no-prompt dynamic_import/static_analysis_no_permissions.ts",
- output: "dynamic_import/static_analysis_no_permissions.ts.out",
- });
-
- itest!(dynamic_import_permissions_remote_remote {
- args: "run --quiet --reload --allow-import=localhost:4545 dynamic_import/permissions_remote_remote.ts",
- output: "dynamic_import/permissions_remote_remote.ts.out",
- http_server: true,
- exit_code: 1,
- });
-
- itest!(dynamic_import_permissions_data_remote {
- args: "run --quiet --reload --allow-import=localhost:4545 dynamic_import/permissions_data_remote.ts",
- output: "dynamic_import/permissions_data_remote.ts.out",
- http_server: true,
- exit_code: 1,
- });
-
- itest!(dynamic_import_permissions_blob_remote {
- args: "run --quiet --reload --allow-net=localhost:4545 dynamic_import/permissions_blob_remote.ts",
- output: "dynamic_import/permissions_blob_remote.ts.out",
- http_server: true,
- exit_code: 1,
- });
-
- itest!(dynamic_import_permissions_data_local {
- args: "run --quiet --reload --allow-net=localhost:4545 dynamic_import/permissions_data_local.ts",
- output: "dynamic_import/permissions_data_local.ts.out",
- http_server: true,
- exit_code: 1,
- });
-
- itest!(dynamic_import_permissions_blob_local {
- args: "run --quiet --reload --allow-net=localhost:4545 dynamic_import/permissions_blob_local.ts",
- output: "dynamic_import/permissions_blob_local.ts.out",
- http_server: true,
- exit_code: 1,
- });
}
-itest!(tls_starttls {
- args: "run --quiet --reload --allow-net --allow-read --cert tls/RootCA.pem --config ../config/deno.json run/tls_starttls.js",
- output: "run/tls.out",
-});
-
-itest!(tls_connecttls {
- args: "run --quiet --reload --allow-net --allow-read --cert tls/RootCA.pem --config ../config/deno.json run/tls_connecttls.js",
- output: "run/tls.out",
-});
-
-itest!(byte_order_mark {
- args: "run --no-check run/byte_order_mark.ts",
- output: "run/byte_order_mark.out",
-});
-
#[test]
#[cfg(windows)]
fn process_stdin_read_unblock() {
@@ -3137,24 +1695,6 @@ fn issue9750() {
});
}
-// Regression test for https://github.com/denoland/deno/issues/11451.
-itest!(dom_exception_formatting {
- args: "run run/dom_exception_formatting.ts",
- output: "run/dom_exception_formatting.ts.out",
- exit_code: 1,
-});
-
-itest!(long_data_url_formatting {
- args: "run run/long_data_url_formatting.ts",
- output: "run/long_data_url_formatting.ts.out",
- exit_code: 1,
-});
-
-itest!(eval_context_throw_dom_exception {
- args: "run run/eval_context_throw_dom_exception.js",
- output: "run/eval_context_throw_dom_exception.js.out",
-});
-
#[test]
#[cfg(unix)]
fn navigator_language_unix() {
@@ -3278,85 +1818,6 @@ fn issue12807() {
assert!(status.success());
}
-itest!(issue_13562 {
- args: "run run/issue13562.ts",
- output: "run/issue13562.ts.out",
-});
-
-itest!(import_attributes_static_import {
- args: "run --allow-read import_attributes/static_import.ts",
- output: "import_attributes/static_import.out",
-});
-
-itest!(import_attributes_static_export {
- args: "run --allow-read import_attributes/static_export.ts",
- output: "import_attributes/static_export.out",
-});
-
-itest!(import_attributes_static_error {
- args: "run --allow-read import_attributes/static_error.ts",
- output: "import_attributes/static_error.out",
- exit_code: 1,
-});
-
-itest!(import_attributes_dynamic_import {
- args: "run --allow-read --check import_attributes/dynamic_import.ts",
- output: "import_attributes/dynamic_import.out",
-});
-
-itest!(import_attributes_dynamic_error {
- args: "run --allow-read import_attributes/dynamic_error.ts",
- output: "import_attributes/dynamic_error.out",
- exit_code: 1,
-});
-
-itest!(import_attributes_type_check {
- args: "run --allow-read --check import_attributes/type_check.ts",
- output: "import_attributes/type_check.out",
- exit_code: 1,
-});
-
-itest!(colors_without_global_this {
- args: "run run/colors_without_globalThis.js",
- output_str: Some("true\n"),
-});
-
-itest!(config_auto_discovered_for_local_script {
- args: "run --quiet run/with_config/frontend_work.ts",
- output_str: Some("ok\n"),
-});
-
-itest!(config_auto_discovered_for_local_script_log {
- args: "run -L debug run/with_config/frontend_work.ts",
- output: "run/with_config/auto_discovery_log.out",
-});
-
-itest!(no_config_auto_discovery_for_local_script {
- args: "run --quiet --no-config --check run/with_config/frontend_work.ts",
- output: "run/with_config/no_auto_discovery.out",
- exit_code: 1,
-});
-
-itest!(config_not_auto_discovered_for_remote_script {
- args: "run --allow-import --quiet http://127.0.0.1:4545/run/with_config/server_side_work.ts",
- output_str: Some("ok\n"),
- http_server: true,
-});
-
-// In this case we shouldn't discover `package.json` file, because it's in a
-// directory that is above the directory containing `deno.json` file.
-itest!(
- package_json_auto_discovered_for_local_script_arg_with_stop {
- args: "run -L debug with_stop/some/nested/dir/main.ts",
- output: "run/with_package_json/with_stop/main.out",
- cwd: Some("run/with_package_json/"),
- copy_temp_dir: Some("run/with_package_json/"),
- envs: env_vars_for_npm_tests(),
- http_server: true,
- exit_code: 1,
- }
-);
-
#[test]
fn package_json_no_node_modules_dir_created() {
// it should not create a node_modules directory
@@ -3395,81 +1856,6 @@ fn node_modules_dir_no_npm_specifiers_no_dir_created() {
assert!(!temp_dir.path().join("node_modules").exists());
}
-itest!(wasm_streaming_panic_test {
- args: "run run/wasm_streaming_panic_test.js",
- output: "run/wasm_streaming_panic_test.js.out",
- exit_code: 1,
-});
-
-// Regression test for https://github.com/denoland/deno/issues/13897.
-itest!(fetch_async_error_stack {
- args: "run --quiet -A run/fetch_async_error_stack.ts",
- output: "run/fetch_async_error_stack.ts.out",
- exit_code: 1,
-});
-
-itest!(event_listener_error {
- args: "run --quiet run/event_listener_error.ts",
- output: "run/event_listener_error.ts.out",
- exit_code: 1,
-});
-
-itest!(event_listener_error_handled {
- args: "run --quiet run/event_listener_error_handled.ts",
- output: "run/event_listener_error_handled.ts.out",
-});
-
-// https://github.com/denoland/deno/pull/14159#issuecomment-1092285446
-itest!(event_listener_error_immediate_exit {
- args: "run --quiet run/event_listener_error_immediate_exit.ts",
- output: "run/event_listener_error_immediate_exit.ts.out",
- exit_code: 1,
-});
-
-// https://github.com/denoland/deno/pull/14159#issuecomment-1092285446
-itest!(event_listener_error_immediate_exit_worker {
- args: "run --quiet -A run/event_listener_error_immediate_exit_worker.ts",
- output: "run/event_listener_error_immediate_exit_worker.ts.out",
- exit_code: 1,
-});
-
-itest!(set_timeout_error {
- args: "run --quiet run/set_timeout_error.ts",
- output: "run/set_timeout_error.ts.out",
- exit_code: 1,
-});
-
-itest!(set_timeout_error_handled {
- args: "run --quiet run/set_timeout_error_handled.ts",
- output: "run/set_timeout_error_handled.ts.out",
-});
-
-itest!(aggregate_error {
- args: "run --quiet run/aggregate_error.ts",
- output: "run/aggregate_error.out",
- exit_code: 1,
-});
-
-itest!(complex_error {
- args: "run --quiet run/complex_error.ts",
- output: "run/complex_error.ts.out",
- exit_code: 1,
-});
-
-// Regression test for https://github.com/denoland/deno/issues/16340.
-itest!(error_with_errors_prop {
- args: "run --quiet run/error_with_errors_prop.js",
- output: "run/error_with_errors_prop.js.out",
- exit_code: 1,
-});
-
-// Regression test for https://github.com/denoland/deno/issues/12143.
-itest!(js_root_with_ts_check {
- args: "run --quiet --check run/js_root_with_ts_check.js",
- output: "run/js_root_with_ts_check.js.out",
- exit_code: 1,
-});
-
#[test]
fn check_local_then_remote() {
let _http_guard = util::http_server();
@@ -3502,18 +1888,6 @@ fn check_local_then_remote() {
assert_contains!(stderr, "Type 'string' is not assignable to type 'number'.");
}
-// Regression test for https://github.com/denoland/deno/issues/15163
-itest!(check_js_points_to_ts {
- args: "run --quiet --check --config run/checkjs.tsconfig.json run/check_js_points_to_ts/test.js",
- output: "run/check_js_points_to_ts/test.js.out",
- exit_code: 1,
-});
-
-itest!(no_prompt_flag {
- args: "run --quiet --no-prompt run/no_prompt.ts",
- output_str: Some(""),
-});
-
#[test]
fn permission_request_with_no_prompt() {
TestContext::default()
@@ -3544,57 +1918,6 @@ fn deno_no_prompt_environment_variable() {
assert!(output.status.success());
}
-itest!(report_error {
- args: "run --quiet run/report_error.ts",
- output: "run/report_error.ts.out",
- exit_code: 1,
-});
-
-itest!(report_error_handled {
- args: "run --quiet run/report_error_handled.ts",
- output: "run/report_error_handled.ts.out",
-});
-
-// Regression test for https://github.com/denoland/deno/issues/15513.
-itest!(report_error_end_of_program {
- args: "run --quiet run/report_error_end_of_program.ts",
- output: "run/report_error_end_of_program.ts.out",
- exit_code: 1,
-});
-
-itest!(queue_microtask_error {
- args: "run --quiet run/queue_microtask_error.ts",
- output: "run/queue_microtask_error.ts.out",
- exit_code: 1,
-});
-
-itest!(queue_microtask_error_handled {
- args: "run --quiet run/queue_microtask_error_handled.ts",
- output: "run/queue_microtask_error_handled.ts.out",
-});
-
-itest!(spawn_stdout_inherit {
- args: "run --quiet -A run/spawn_stdout_inherit.ts",
- output: "run/spawn_stdout_inherit.ts.out",
-});
-
-itest!(error_name_non_string {
- args: "run --quiet run/error_name_non_string.js",
- output: "run/error_name_non_string.js.out",
- exit_code: 1,
-});
-
-itest!(custom_inspect_url {
- args: "run run/custom_inspect_url.js",
- output: "run/custom_inspect_url.js.out",
-});
-
-itest!(config_json_import {
- args: "run --quiet -c jsx/deno-jsx.json run/config_json_import.ts",
- output: "run/config_json_import.ts.out",
- http_server: true,
-});
-
#[test]
fn running_declaration_files() {
let context = TestContextBuilder::new().use_temp_cwd().build();
@@ -3605,18 +1928,14 @@ fn running_declaration_files() {
temp_dir.write(file, "");
context
.new_command()
- .args_vec(["run", file])
+ // todo(dsherret): investigate why --allow-read is required here
+ .args_vec(["run", "--allow-read", file])
.run()
.skip_output_check()
.assert_exit_code(0);
}
}
-itest!(test_and_bench_are_noops_in_run {
- args: "run run/test_and_bench_in_run.js",
- output_str: Some(""),
-});
-
#[cfg(not(target_os = "windows"))]
itest!(spawn_kill_permissions {
args: "run --quiet --allow-run=cat spawn_kill_permissions.ts",
@@ -3627,51 +1946,6 @@ itest!(spawn_kill_permissions {
output_str: Some(""),
});
-itest!(followup_dyn_import_resolved {
- args: "run --allow-read run/followup_dyn_import_resolves/main.ts",
- output: "run/followup_dyn_import_resolves/main.ts.out",
-});
-
-itest!(unhandled_rejection {
- args: "run --check run/unhandled_rejection.ts",
- output: "run/unhandled_rejection.ts.out",
-});
-
-itest!(unhandled_rejection_sync_error {
- args: "run --check run/unhandled_rejection_sync_error.ts",
- output: "run/unhandled_rejection_sync_error.ts.out",
-});
-
-// Regression test for https://github.com/denoland/deno/issues/15661
-itest!(unhandled_rejection_dynamic_import {
- args: "run --allow-read run/unhandled_rejection_dynamic_import/main.ts",
- output: "run/unhandled_rejection_dynamic_import/main.ts.out",
- exit_code: 1,
-});
-
-// Regression test for https://github.com/denoland/deno/issues/16909
-itest!(unhandled_rejection_dynamic_import2 {
- args: "run --allow-read run/unhandled_rejection_dynamic_import2/main.ts",
- output: "run/unhandled_rejection_dynamic_import2/main.ts.out",
-});
-
-itest!(rejection_handled {
- args: "run --check run/rejection_handled.ts",
- output: "run/rejection_handled.out",
-});
-
-itest!(nested_error {
- args: "run run/nested_error/main.ts",
- output: "run/nested_error/main.ts.out",
- exit_code: 1,
-});
-
-itest!(node_env_var_allowlist {
- args: "run --no-prompt run/node_env_var_allowlist.ts",
- output: "run/node_env_var_allowlist.ts.out",
- exit_code: 1,
-});
-
#[test]
fn cache_test() {
let _g = util::http_server();
@@ -3890,6 +2164,11 @@ fn basic_auth_tokens() {
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_resolve_dns() {
+ use hickory_server::authority::Catalog;
+ use hickory_server::authority::ZoneType;
+ use hickory_server::proto::rr::Name;
+ use hickory_server::store::in_memory::InMemoryAuthority;
+ use hickory_server::ServerFuture;
use std::net::SocketAddr;
use std::str::FromStr;
use std::sync::Arc;
@@ -3897,11 +2176,6 @@ async fn test_resolve_dns() {
use tokio::net::TcpListener;
use tokio::net::UdpSocket;
use tokio::sync::oneshot;
- use trust_dns_server::authority::Catalog;
- use trust_dns_server::authority::ZoneType;
- use trust_dns_server::proto::rr::Name;
- use trust_dns_server::store::in_memory::InMemoryAuthority;
- use trust_dns_server::ServerFuture;
const DNS_PORT: u16 = 4553;
@@ -3911,9 +2185,12 @@ async fn test_resolve_dns() {
util::testdata_path().join("run/resolve_dns.zone.in"),
)
.unwrap();
- let lexer = Lexer::new(&zone_file);
- let records =
- Parser::new().parse(lexer, Some(Name::from_str("example.com").unwrap()));
+ let records = Parser::new(
+ &zone_file,
+ None,
+ Some(Name::from_str("example.com").unwrap()),
+ )
+ .parse();
if records.is_err() {
panic!("failed to parse: {:?}", records.err())
}
@@ -4211,48 +2488,6 @@ fn broken_stdout_repl() {
assert_not_contains!(stderr, "panic");
}
-itest!(error_cause {
- args: "run run/error_cause.ts",
- output: "run/error_cause.ts.out",
- exit_code: 1,
-});
-
-itest!(error_cause_recursive_aggregate {
- args: "run error_cause_recursive_aggregate.ts",
- output: "error_cause_recursive_aggregate.ts.out",
- exit_code: 1,
-});
-
-itest!(error_cause_recursive_tail {
- args: "run error_cause_recursive_tail.ts",
- output: "error_cause_recursive_tail.ts.out",
- exit_code: 1,
-});
-
-itest!(error_cause_recursive {
- args: "run run/error_cause_recursive.ts",
- output: "run/error_cause_recursive.ts.out",
- exit_code: 1,
-});
-
-itest!(js_without_extension {
- args: "run --ext js --check file_extensions/js_without_extension",
- output: "file_extensions/js_without_extension.out",
- exit_code: 0,
-});
-
-itest!(ts_without_extension {
- args: "run --ext ts --check file_extensions/ts_without_extension",
- output: "file_extensions/ts_without_extension.out",
- exit_code: 0,
-});
-
-itest!(ext_flag_takes_precedence_over_extension {
- args: "run --ext ts --check file_extensions/ts_with_js_extension.js",
- output: "file_extensions/ts_with_js_extension.out",
- exit_code: 0,
-});
-
#[tokio::test(flavor = "multi_thread")]
async fn websocketstream_ping() {
let _g = util::http_server();
@@ -4434,24 +2669,6 @@ async fn websocket_server_idletimeout() {
assert_eq!(child.wait().unwrap().code(), Some(123));
}
-itest!(no_lock_flag {
- args: "run --allow-import --no-lock run/no_lock_flag/main.ts",
- output: "run/no_lock_flag/main.out",
- http_server: true,
- exit_code: 0,
-});
-
-itest!(permission_args {
- args: "run run/001_hello.js --allow-net",
- output: "run/permission_args.out",
- envs: vec![("NO_COLOR".to_string(), "1".to_string())],
-});
-
-itest!(permission_args_quiet {
- args: "run --quiet run/001_hello.js --allow-net",
- output: "run/001_hello.js.out",
-});
-
// Regression test for https://github.com/denoland/deno/issues/16772
#[test]
fn file_fetcher_preserves_permissions() {
@@ -4559,12 +2776,6 @@ fn permission_prompt_escapes_ansi_codes_and_control_chars() {
}
}
-itest!(dynamic_import_syntax_error {
- args: "run -A run/dynamic_import_syntax_error.js",
- output: "run/dynamic_import_syntax_error.js.out",
- exit_code: 1,
-});
-
itest!(extension_import {
args: "run run/extension_import.ts",
output: "run/extension_import.ts.out",
@@ -4678,56 +2889,6 @@ console.log(returnsHi());"#,
.assert_exit_code(1);
}
-itest!(explicit_resource_management {
- args: "run --quiet --check run/explicit_resource_management/main.ts",
- output: "run/explicit_resource_management/main.out",
-});
-
-itest!(unsafe_proto {
- args: "run -A run/unsafe_proto/main.js",
- output: "run/unsafe_proto/main.out",
- http_server: false,
- exit_code: 0,
-});
-
-itest!(unsafe_proto_flag {
- args: "run -A --unstable-unsafe-proto run/unsafe_proto/main.js",
- output: "run/unsafe_proto/main_with_unsafe_proto_flag.out",
- http_server: false,
- exit_code: 0,
-});
-
-// TODO(bartlomieju): temporary disabled
-// itest!(warn_on_deprecated_api {
-// args: "run -A run/warn_on_deprecated_api/main.js",
-// output: "run/warn_on_deprecated_api/main.out",
-// http_server: true,
-// exit_code: 0,
-// });
-
-// itest!(warn_on_deprecated_api_verbose {
-// args: "run -A run/warn_on_deprecated_api/main.js",
-// output: "run/warn_on_deprecated_api/main.verbose.out",
-// envs: vec![("DENO_VERBOSE_WARNINGS".to_string(), "1".to_string())],
-// http_server: true,
-// exit_code: 0,
-// });
-
-// itest!(warn_on_deprecated_api_with_flag {
-// args: "run -A --quiet run/warn_on_deprecated_api/main.js",
-// output: "run/warn_on_deprecated_api/main_disabled_flag.out",
-// http_server: true,
-// exit_code: 0,
-// });
-
-// itest!(warn_on_deprecated_api_with_env_var {
-// args: "run -A run/warn_on_deprecated_api/main.js",
-// envs: vec![("DENO_NO_DEPRECATION_WARNINGS".to_string(), "1".to_string())],
-// output: "run/warn_on_deprecated_api/main_disabled_env.out",
-// http_server: true,
-// exit_code: 0,
-// });
-
#[test]
fn deno_json_imports_expand() {
let test_context = TestContextBuilder::for_npm().use_temp_cwd().build();
diff --git a/tests/integration/watcher_tests.rs b/tests/integration/watcher_tests.rs
index 122353bba..055e46af9 100644
--- a/tests/integration/watcher_tests.rs
+++ b/tests/integration/watcher_tests.rs
@@ -55,7 +55,7 @@ where
let mut str = String::new();
while let Some(t) = next_line(stderr_lines).await {
let t = util::strip_ansi_codes(&t);
- if t.starts_with("Watcher File change detected") {
+ if t.starts_with("Watcher Restarting! File change detected") {
continue;
}
if t.starts_with("Watcher") {
@@ -567,6 +567,82 @@ async fn run_watch_no_dynamic() {
}
#[flaky_test(tokio)]
+async fn serve_watch_all() {
+ let t = TempDir::new();
+ let main_file_to_watch = t.path().join("main_file_to_watch.js");
+ main_file_to_watch.write(
+ "export default {
+ fetch(_request) {
+ return new Response(\"aaaaaaqqq!\");
+ },
+ };",
+ );
+
+ let another_file = t.path().join("another_file.js");
+ another_file.write("");
+
+ let mut child = util::deno_cmd()
+ .current_dir(t.path())
+ .arg("serve")
+ .arg(format!("--watch={another_file}"))
+ .arg("-L")
+ .arg("debug")
+ .arg(&main_file_to_watch)
+ .env("NO_COLOR", "1")
+ .piped_output()
+ .spawn()
+ .unwrap();
+ let (mut stdout_lines, mut stderr_lines) = child_lines(&mut child);
+
+ wait_for_watcher("main_file_to_watch.js", &mut stderr_lines).await;
+
+ // Change content of the file
+ main_file_to_watch.write(
+ "export default {
+ fetch(_request) {
+ return new Response(\"aaaaaaqqq123!\");
+ },
+ };",
+ );
+ wait_contains("Restarting", &mut stderr_lines).await;
+ wait_for_watcher("main_file_to_watch.js", &mut stderr_lines).await;
+
+ another_file.write("export const foo = 0;");
+ // Confirm that the added file is watched as well
+ wait_contains("Restarting", &mut stderr_lines).await;
+ wait_for_watcher("main_file_to_watch.js", &mut stderr_lines).await;
+
+ main_file_to_watch
+ .write("import { foo } from './another_file.js'; console.log(foo);");
+ wait_contains("Restarting", &mut stderr_lines).await;
+ wait_for_watcher("main_file_to_watch.js", &mut stderr_lines).await;
+ wait_contains("0", &mut stdout_lines).await;
+
+ another_file.write("export const foo = 42;");
+ wait_contains("Restarting", &mut stderr_lines).await;
+ wait_for_watcher("main_file_to_watch.js", &mut stderr_lines).await;
+ wait_contains("42", &mut stdout_lines).await;
+
+ // Confirm that watch continues even with wrong syntax error
+ another_file.write("syntax error ^^");
+
+ wait_contains("Restarting", &mut stderr_lines).await;
+ wait_contains("error:", &mut stderr_lines).await;
+ wait_for_watcher("main_file_to_watch.js", &mut stderr_lines).await;
+
+ main_file_to_watch.write(
+ "export default {
+ fetch(_request) {
+ return new Response(\"aaaaaaqqq!\");
+ },
+ };",
+ );
+ wait_contains("Restarting", &mut stderr_lines).await;
+ wait_for_watcher("main_file_to_watch.js", &mut stderr_lines).await;
+ check_alive_then_kill(child);
+}
+
+#[flaky_test(tokio)]
async fn run_watch_npm_specifier() {
let _g = util::http_server();
let t = TempDir::new();