summaryrefslogtreecommitdiff
path: root/tests/testdata/test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/testdata/test')
-rw-r--r--tests/testdata/test/aggregate_error.out22
-rw-r--r--tests/testdata/test/aggregate_error.ts6
-rw-r--r--tests/testdata/test/allow_all.out18
-rw-r--r--tests/testdata/test/allow_all.ts43
-rw-r--r--tests/testdata/test/allow_none.out51
-rw-r--r--tests/testdata/test/allow_none.ts23
-rw-r--r--tests/testdata/test/before_unload_prevent_default.out5
-rw-r--r--tests/testdata/test/before_unload_prevent_default.ts6
-rw-r--r--tests/testdata/test/captured_output.ts33
-rw-r--r--tests/testdata/test/captured_output.worker.js6
-rw-r--r--tests/testdata/test/check_local_by_default.out4
-rw-r--r--tests/testdata/test/check_local_by_default.ts3
-rw-r--r--tests/testdata/test/check_local_by_default2.out4
-rw-r--r--tests/testdata/test/check_local_by_default2.ts6
-rw-r--r--tests/testdata/test/clear_timeout.out8
-rw-r--r--tests/testdata/test/clear_timeout.ts5
-rw-r--r--tests/testdata/test/collect.deprecated.out10
-rw-r--r--tests/testdata/test/collect.out9
-rw-r--r--tests/testdata/test/collect/deno.deprecated.jsonc7
-rw-r--r--tests/testdata/test/collect/deno.jsonc5
-rw-r--r--tests/testdata/test/collect/deno.malformed.jsonc5
-rw-r--r--tests/testdata/test/collect/deno2.jsonc6
-rw-r--r--tests/testdata/test/collect/ignore/test.ts1
-rw-r--r--tests/testdata/test/collect/include.ts0
-rw-r--r--tests/testdata/test/collect/include/2_test.ts0
-rw-r--r--tests/testdata/test/collect/include/test.ts0
-rw-r--r--tests/testdata/test/collect/test.ts0
-rw-r--r--tests/testdata/test/collect2.out7
-rw-r--r--tests/testdata/test/collect_with_malformed_config.out4
-rw-r--r--tests/testdata/test/deno.glob.json11
-rw-r--r--tests/testdata/test/deno_custom_jsx.json6
-rw-r--r--tests/testdata/test/doc.out9
-rw-r--r--tests/testdata/test/doc.ts38
-rw-r--r--tests/testdata/test/doc_only.out4
-rw-r--r--tests/testdata/test/doc_only/mod.ts10
-rw-r--r--tests/testdata/test/exit_sanitizer.out38
-rw-r--r--tests/testdata/test/exit_sanitizer.ts11
-rw-r--r--tests/testdata/test/fail.out91
-rw-r--r--tests/testdata/test/fail.ts30
-rw-r--r--tests/testdata/test/fail_fast.out20
-rw-r--r--tests/testdata/test/fail_fast.ts30
-rw-r--r--tests/testdata/test/fail_fast_other.ts3
-rw-r--r--tests/testdata/test/fail_fast_with_val.out23
-rw-r--r--tests/testdata/test/fail_fast_with_val.ts30
-rw-r--r--tests/testdata/test/file_protocol.out6
-rw-r--r--tests/testdata/test/file_protocol.ts1
-rw-r--r--tests/testdata/test/filter.out12
-rw-r--r--tests/testdata/test/filter/a_test.ts3
-rw-r--r--tests/testdata/test/filter/b_test.ts3
-rw-r--r--tests/testdata/test/filter/c_test.ts3
-rw-r--r--tests/testdata/test/filtered_out_only.out5
-rw-r--r--tests/testdata/test/filtered_out_only.ts2
-rw-r--r--tests/testdata/test/finally_timeout.out20
-rw-r--r--tests/testdata/test/finally_timeout.ts11
-rw-r--r--tests/testdata/test/glob/data/tes.ts3
-rw-r--r--tests/testdata/test/glob/data/test1.js3
-rw-r--r--tests/testdata/test/glob/data/test1.ts3
-rw-r--r--tests/testdata/test/glob/data/test12.ts3
-rw-r--r--tests/testdata/test/glob/nested/fizz/bar.ts3
-rw-r--r--tests/testdata/test/glob/nested/fizz/bazz.ts3
-rw-r--r--tests/testdata/test/glob/nested/fizz/fizz.ts2
-rw-r--r--tests/testdata/test/glob/nested/fizz/foo.ts3
-rw-r--r--tests/testdata/test/glob/nested/foo/bar.ts3
-rw-r--r--tests/testdata/test/glob/nested/foo/bazz.ts3
-rw-r--r--tests/testdata/test/glob/nested/foo/fizz.ts3
-rw-r--r--tests/testdata/test/glob/nested/foo/foo.ts3
-rw-r--r--tests/testdata/test/glob/pages/[id].ts3
-rw-r--r--tests/testdata/test/hello_world.out5
-rw-r--r--tests/testdata/test/hello_world.ts9
-rw-r--r--tests/testdata/test/hide_empty_suites.out4
-rw-r--r--tests/testdata/test/ignore.out15
-rw-r--r--tests/testdata/test/ignore.ts17
-rw-r--r--tests/testdata/test/ignore_permissions.out6
-rw-r--r--tests/testdata/test/ignore_permissions.ts16
-rw-r--r--tests/testdata/test/interval.out5
-rw-r--r--tests/testdata/test/interval.ts1
-rw-r--r--tests/testdata/test/load_unload.out6
-rw-r--r--tests/testdata/test/load_unload.ts22
-rw-r--r--tests/testdata/test/markdown.md31
-rw-r--r--tests/testdata/test/markdown.out7
-rw-r--r--tests/testdata/test/markdown_full_block_names.md19
-rw-r--r--tests/testdata/test/markdown_full_block_names.out6
-rw-r--r--tests/testdata/test/markdown_windows.md31
-rw-r--r--tests/testdata/test/markdown_windows.out7
-rw-r--r--tests/testdata/test/markdown_with_comment.md36
-rw-r--r--tests/testdata/test/markdown_with_comment.out5
-rw-r--r--tests/testdata/test/meta.out11
-rw-r--r--tests/testdata/test/meta.ts7
-rw-r--r--tests/testdata/test/no_check.out19
-rw-r--r--tests/testdata/test/no_check.ts1
-rw-r--r--tests/testdata/test/no_color.ts17
-rw-r--r--tests/testdata/test/no_prompt_by_default.out16
-rw-r--r--tests/testdata/test/no_prompt_by_default.ts3
-rw-r--r--tests/testdata/test/no_prompt_with_denied_perms.out16
-rw-r--r--tests/testdata/test/no_prompt_with_denied_perms.ts3
-rw-r--r--tests/testdata/test/no_run.out5
-rw-r--r--tests/testdata/test/no_run.ts1
-rw-r--r--tests/testdata/test/non_error_thrown.out40
-rw-r--r--tests/testdata/test/non_error_thrown.ts23
-rw-r--r--tests/testdata/test/only.out8
-rw-r--r--tests/testdata/test/only.ts20
-rw-r--r--tests/testdata/test/ops_sanitizer_closed_inside_started_before.out19
-rw-r--r--tests/testdata/test/ops_sanitizer_closed_inside_started_before.ts5
-rw-r--r--tests/testdata/test/ops_sanitizer_missing_details.out18
-rw-r--r--tests/testdata/test/ops_sanitizer_missing_details.ts10
-rw-r--r--tests/testdata/test/ops_sanitizer_multiple_timeout_tests.out45
-rw-r--r--tests/testdata/test/ops_sanitizer_multiple_timeout_tests.ts10
-rw-r--r--tests/testdata/test/ops_sanitizer_multiple_timeout_tests_no_trace.out25
-rw-r--r--tests/testdata/test/ops_sanitizer_nexttick.out6
-rw-r--r--tests/testdata/test/ops_sanitizer_nexttick.ts11
-rw-r--r--tests/testdata/test/ops_sanitizer_step_leak.out10
-rw-r--r--tests/testdata/test/ops_sanitizer_step_leak.ts10
-rw-r--r--tests/testdata/test/ops_sanitizer_timeout_failure.out6
-rw-r--r--tests/testdata/test/ops_sanitizer_timeout_failure.ts22
-rw-r--r--tests/testdata/test/ops_sanitizer_unstable.out22
-rw-r--r--tests/testdata/test/ops_sanitizer_unstable.ts9
-rw-r--r--tests/testdata/test/overloads.out11
-rw-r--r--tests/testdata/test/overloads.ts6
-rw-r--r--tests/testdata/test/parallel_output.out56
-rw-r--r--tests/testdata/test/parallel_output.ts27
-rw-r--r--tests/testdata/test/pass.junit.out38
-rw-r--r--tests/testdata/test/pass.out53
-rw-r--r--tests/testdata/test/pass.ts37
-rw-r--r--tests/testdata/test/quiet.out8
-rw-r--r--tests/testdata/test/quiet.ts15
-rw-r--r--tests/testdata/test/recursive_permissions_pledge.js6
-rw-r--r--tests/testdata/test/relative_pattern_dot_slash/deno.json7
-rw-r--r--tests/testdata/test/relative_pattern_dot_slash/output.out5
-rw-r--r--tests/testdata/test/relative_pattern_dot_slash/test/add.mjs3
-rw-r--r--tests/testdata/test/relative_pattern_dot_slash/test/add.test.mjs7
-rw-r--r--tests/testdata/test/replace_timers.js7
-rw-r--r--tests/testdata/test/replace_timers.js.out7
-rw-r--r--tests/testdata/test/report_error.out23
-rw-r--r--tests/testdata/test/report_error.ts6
-rw-r--r--tests/testdata/test/resource_sanitizer.out20
-rw-r--r--tests/testdata/test/resource_sanitizer.ts4
-rw-r--r--tests/testdata/test/short-pass-jobs-flag-warning.out8
-rw-r--r--tests/testdata/test/short-pass.out5
-rw-r--r--tests/testdata/test/short-pass.ts1
-rw-r--r--tests/testdata/test/shuffle.out39
-rw-r--r--tests/testdata/test/shuffle/bar_test.ts3
-rw-r--r--tests/testdata/test/shuffle/baz_test.ts3
-rw-r--r--tests/testdata/test/shuffle/foo_test.ts3
-rw-r--r--tests/testdata/test/sigint_with_hanging_test.out10
-rw-r--r--tests/testdata/test/sigint_with_hanging_test.ts15
-rw-r--r--tests/testdata/test/steps/failing_steps.dot.out53
-rw-r--r--tests/testdata/test/steps/failing_steps.out59
-rw-r--r--tests/testdata/test/steps/failing_steps.tap.out43
-rw-r--r--tests/testdata/test/steps/failing_steps.ts27
-rw-r--r--tests/testdata/test/steps/ignored_steps.dot.out5
-rw-r--r--tests/testdata/test/steps/ignored_steps.out8
-rw-r--r--tests/testdata/test/steps/ignored_steps.tap.out8
-rw-r--r--tests/testdata/test/steps/ignored_steps.ts16
-rw-r--r--tests/testdata/test/steps/invalid_usage.out82
-rw-r--r--tests/testdata/test/steps/invalid_usage.ts118
-rw-r--r--tests/testdata/test/steps/output_within.out29
-rw-r--r--tests/testdata/test/steps/output_within.ts15
-rw-r--r--tests/testdata/test/steps/passing_steps.dot.out17
-rw-r--r--tests/testdata/test/steps/passing_steps.out44
-rw-r--r--tests/testdata/test/steps/passing_steps.tap.out42
-rw-r--r--tests/testdata/test/steps/passing_steps.ts127
-rw-r--r--tests/testdata/test/text.md1
-rw-r--r--tests/testdata/test/text.out3
-rw-r--r--tests/testdata/test/trace_ops_caught_error/main.out6
-rw-r--r--tests/testdata/test/trace_ops_caught_error/main.ts12
-rw-r--r--tests/testdata/test/uncaught_errors.out59
-rw-r--r--tests/testdata/test/uncaught_errors_1.ts9
-rw-r--r--tests/testdata/test/uncaught_errors_2.ts8
-rw-r--r--tests/testdata/test/uncaught_errors_3.ts1
-rw-r--r--tests/testdata/test/unhandled_rejection.out22
-rw-r--r--tests/testdata/test/unhandled_rejection.ts3
-rw-r--r--tests/testdata/test/unresolved_promise.out10
-rw-r--r--tests/testdata/test/unresolved_promise.ts1
173 files changed, 2682 insertions, 0 deletions
diff --git a/tests/testdata/test/aggregate_error.out b/tests/testdata/test/aggregate_error.out
new file mode 100644
index 000000000..e70bf5963
--- /dev/null
+++ b/tests/testdata/test/aggregate_error.out
@@ -0,0 +1,22 @@
+running 1 test from ./test/aggregate_error.ts
+aggregate ... FAILED ([WILDCARD])
+
+ ERRORS
+
+aggregate => ./test/aggregate_error.ts:[WILDCARD]
+error: AggregateError
+ Error: Error 1
+ at [WILDCARD]/testdata/test/aggregate_error.ts:2:18
+ Error: Error 2
+ at [WILDCARD]/testdata/test/aggregate_error.ts:3:18
+ throw new AggregateError([error1, error2]);
+ ^
+ at [WILDCARD]/testdata/test/aggregate_error.ts:5:9
+
+ FAILURES
+
+aggregate => ./test/aggregate_error.ts:[WILDCARD]
+
+FAILED | 0 passed | 1 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/aggregate_error.ts b/tests/testdata/test/aggregate_error.ts
new file mode 100644
index 000000000..0661ea249
--- /dev/null
+++ b/tests/testdata/test/aggregate_error.ts
@@ -0,0 +1,6 @@
+Deno.test("aggregate", function () {
+ const error1 = new Error("Error 1");
+ const error2 = new Error("Error 2");
+
+ throw new AggregateError([error1, error2]);
+});
diff --git a/tests/testdata/test/allow_all.out b/tests/testdata/test/allow_all.out
new file mode 100644
index 000000000..8b783b823
--- /dev/null
+++ b/tests/testdata/test/allow_all.out
@@ -0,0 +1,18 @@
+[WILDCARD]
+running 14 tests from [WILDCARD]
+read false ... ok [WILDCARD]
+read true ... ok [WILDCARD]
+write false ... ok [WILDCARD]
+write true ... ok [WILDCARD]
+net false ... ok [WILDCARD]
+net true ... ok [WILDCARD]
+env false ... ok [WILDCARD]
+env true ... ok [WILDCARD]
+run false ... ok [WILDCARD]
+run true ... ok [WILDCARD]
+ffi false ... ok [WILDCARD]
+ffi true ... ok [WILDCARD]
+hrtime false ... ok [WILDCARD]
+hrtime true ... ok [WILDCARD]
+
+ok | 14 passed | 0 failed [WILDCARD]
diff --git a/tests/testdata/test/allow_all.ts b/tests/testdata/test/allow_all.ts
new file mode 100644
index 000000000..e533bc017
--- /dev/null
+++ b/tests/testdata/test/allow_all.ts
@@ -0,0 +1,43 @@
+import { assertEquals } from "../../../test_util/std/assert/mod.ts";
+
+const permissions: Deno.PermissionName[] = [
+ "read",
+ "write",
+ "net",
+ "env",
+ "run",
+ "ffi",
+ "hrtime",
+];
+
+for (const name of permissions) {
+ Deno.test({
+ name: `${name} false`,
+ permissions: {
+ [name]: false,
+ },
+ async fn() {
+ for await (const n of permissions) {
+ const status = await Deno.permissions.query({ name: n });
+ assertEquals(status.state, "prompt");
+ }
+ },
+ });
+
+ Deno.test({
+ name: `${name} true`,
+ permissions: {
+ [name]: true,
+ },
+ async fn() {
+ for await (const n of permissions) {
+ const status = await Deno.permissions.query({ name: n });
+ if (n === name) {
+ assertEquals(status.state, "granted");
+ } else {
+ assertEquals(status.state, "prompt");
+ }
+ }
+ },
+ });
+}
diff --git a/tests/testdata/test/allow_none.out b/tests/testdata/test/allow_none.out
new file mode 100644
index 000000000..aaa467344
--- /dev/null
+++ b/tests/testdata/test/allow_none.out
@@ -0,0 +1,51 @@
+[WILDCARD]
+running 7 tests from [WILDCARD]
+read ... FAILED [WILDCARD]
+write ... FAILED [WILDCARD]
+net ... FAILED [WILDCARD]
+env ... FAILED [WILDCARD]
+run ... FAILED [WILDCARD]
+ffi ... FAILED [WILDCARD]
+hrtime ... FAILED [WILDCARD]
+
+ ERRORS
+
+read => ./test/allow_none.ts:[WILDCARD]
+error: PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+write => ./test/allow_none.ts:[WILDCARD]
+error: PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+net => ./test/allow_none.ts:[WILDCARD]
+error: PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+env => ./test/allow_none.ts:[WILDCARD]
+error: PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+run => ./test/allow_none.ts:[WILDCARD]
+error: PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+ffi => ./test/allow_none.ts:[WILDCARD]
+error: PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+hrtime => ./test/allow_none.ts:[WILDCARD]
+error: PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+ FAILURES
+
+read => ./test/allow_none.ts:[WILDCARD]
+write => ./test/allow_none.ts:[WILDCARD]
+net => ./test/allow_none.ts:[WILDCARD]
+env => ./test/allow_none.ts:[WILDCARD]
+run => ./test/allow_none.ts:[WILDCARD]
+ffi => ./test/allow_none.ts:[WILDCARD]
+hrtime => ./test/allow_none.ts:[WILDCARD]
+
+FAILED | 0 passed | 7 failed [WILDCARD]
diff --git a/tests/testdata/test/allow_none.ts b/tests/testdata/test/allow_none.ts
new file mode 100644
index 000000000..04c40a093
--- /dev/null
+++ b/tests/testdata/test/allow_none.ts
@@ -0,0 +1,23 @@
+import { unreachable } from "../../../test_util/std/assert/mod.ts";
+
+const permissions: Deno.PermissionName[] = [
+ "read",
+ "write",
+ "net",
+ "env",
+ "run",
+ "ffi",
+ "hrtime",
+];
+
+for (const name of permissions) {
+ Deno.test({
+ name,
+ permissions: {
+ [name]: true,
+ },
+ fn() {
+ unreachable();
+ },
+ });
+}
diff --git a/tests/testdata/test/before_unload_prevent_default.out b/tests/testdata/test/before_unload_prevent_default.out
new file mode 100644
index 000000000..09da32ff9
--- /dev/null
+++ b/tests/testdata/test/before_unload_prevent_default.out
@@ -0,0 +1,5 @@
+running 1 test from [WILDCARD]/before_unload_prevent_default.ts
+foo ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/before_unload_prevent_default.ts b/tests/testdata/test/before_unload_prevent_default.ts
new file mode 100644
index 000000000..421ded520
--- /dev/null
+++ b/tests/testdata/test/before_unload_prevent_default.ts
@@ -0,0 +1,6 @@
+addEventListener("beforeunload", (e) => {
+ // The worker should be killed once tests are done regardless of this.
+ e.preventDefault();
+});
+
+Deno.test("foo", () => {});
diff --git a/tests/testdata/test/captured_output.ts b/tests/testdata/test/captured_output.ts
new file mode 100644
index 000000000..3eed249a2
--- /dev/null
+++ b/tests/testdata/test/captured_output.ts
@@ -0,0 +1,33 @@
+Deno.test("output", async () => {
+ await new Deno.Command(Deno.execPath(), {
+ args: ["eval", "console.log(0); console.error(1);"],
+ }).spawn().status;
+ new Deno.Command(Deno.execPath(), {
+ args: ["eval", "console.log(2); console.error(3);"],
+ stdout: "inherit",
+ stderr: "inherit",
+ }).outputSync();
+ await new Deno.Command(Deno.execPath(), {
+ args: ["eval", "console.log(4); console.error(5);"],
+ stdout: "inherit",
+ stderr: "inherit",
+ }).output();
+ const c = new Deno.Command(Deno.execPath(), {
+ args: ["eval", "console.log(6); console.error(7);"],
+ stdout: "inherit",
+ stderr: "inherit",
+ }).spawn();
+ await c.status;
+ const worker = new Worker(
+ import.meta.resolve("./captured_output.worker.js"),
+ { type: "module" },
+ );
+
+ // ensure worker output is captured
+ const response = new Promise<void>((resolve) =>
+ worker.onmessage = () => resolve()
+ );
+ worker.postMessage({});
+ await response;
+ worker.terminate();
+});
diff --git a/tests/testdata/test/captured_output.worker.js b/tests/testdata/test/captured_output.worker.js
new file mode 100644
index 000000000..f49f26880
--- /dev/null
+++ b/tests/testdata/test/captured_output.worker.js
@@ -0,0 +1,6 @@
+self.onmessage = () => {
+ console.log(8);
+ console.error(9);
+ self.postMessage({});
+ self.close();
+};
diff --git a/tests/testdata/test/check_local_by_default.out b/tests/testdata/test/check_local_by_default.out
new file mode 100644
index 000000000..4564f99b8
--- /dev/null
+++ b/tests/testdata/test/check_local_by_default.out
@@ -0,0 +1,4 @@
+running 0 tests from ./test/check_local_by_default.ts
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/check_local_by_default.ts b/tests/testdata/test/check_local_by_default.ts
new file mode 100644
index 000000000..2ae8c2692
--- /dev/null
+++ b/tests/testdata/test/check_local_by_default.ts
@@ -0,0 +1,3 @@
+import * as a from "http://localhost:4545/subdir/type_error.ts";
+
+console.log(a.a);
diff --git a/tests/testdata/test/check_local_by_default2.out b/tests/testdata/test/check_local_by_default2.out
new file mode 100644
index 000000000..b933ac483
--- /dev/null
+++ b/tests/testdata/test/check_local_by_default2.out
@@ -0,0 +1,4 @@
+error: TS2322 [ERROR]: Type '12' is not assignable to type '"b"'.
+const b: "b" = 12;
+ ^
+ at [WILDCARD]test/check_local_by_default2.ts:3:7
diff --git a/tests/testdata/test/check_local_by_default2.ts b/tests/testdata/test/check_local_by_default2.ts
new file mode 100644
index 000000000..5177ff944
--- /dev/null
+++ b/tests/testdata/test/check_local_by_default2.ts
@@ -0,0 +1,6 @@
+import * as a from "http://localhost:4545/subdir/type_error.ts";
+
+const b: "b" = 12;
+
+console.log(a.a);
+console.log(b);
diff --git a/tests/testdata/test/clear_timeout.out b/tests/testdata/test/clear_timeout.out
new file mode 100644
index 000000000..4d3ff8862
--- /dev/null
+++ b/tests/testdata/test/clear_timeout.out
@@ -0,0 +1,8 @@
+Check [WILDCARD]/test/clear_timeout.ts
+running 3 tests from ./test/clear_timeout.ts
+test 1 ... ok ([WILDCARD])
+test 2 ... ok ([WILDCARD])
+test 3 ... ok ([WILDCARD])
+
+ok | 3 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/clear_timeout.ts b/tests/testdata/test/clear_timeout.ts
new file mode 100644
index 000000000..00056e853
--- /dev/null
+++ b/tests/testdata/test/clear_timeout.ts
@@ -0,0 +1,5 @@
+clearTimeout(setTimeout(() => {}, 1000));
+
+Deno.test("test 1", () => {});
+Deno.test("test 2", () => {});
+Deno.test("test 3", () => {});
diff --git a/tests/testdata/test/collect.deprecated.out b/tests/testdata/test/collect.deprecated.out
new file mode 100644
index 000000000..7db2f276c
--- /dev/null
+++ b/tests/testdata/test/collect.deprecated.out
@@ -0,0 +1,10 @@
+Warning: "files" configuration is deprecated. Please use "include" and "exclude" instead.
+Check [WILDCARD]/test/collect/include/2_test.ts
+Check [WILDCARD]/test/collect/include/test.ts
+Check [WILDCARD]/test/collect/test.ts
+running 0 tests from [WILDCARD]/test/collect/include/2_test.ts
+running 0 tests from [WILDCARD]/test/collect/include/test.ts
+running 0 tests from [WILDCARD]/test/collect/test.ts
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/collect.out b/tests/testdata/test/collect.out
new file mode 100644
index 000000000..734adbe6b
--- /dev/null
+++ b/tests/testdata/test/collect.out
@@ -0,0 +1,9 @@
+Check [WILDCARD]/test/collect/include/2_test.ts
+Check [WILDCARD]/test/collect/include/test.ts
+Check [WILDCARD]/test/collect/test.ts
+running 0 tests from [WILDCARD]/test/collect/include/2_test.ts
+running 0 tests from [WILDCARD]/test/collect/include/test.ts
+running 0 tests from [WILDCARD]/test/collect/test.ts
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/collect/deno.deprecated.jsonc b/tests/testdata/test/collect/deno.deprecated.jsonc
new file mode 100644
index 000000000..b8acda27d
--- /dev/null
+++ b/tests/testdata/test/collect/deno.deprecated.jsonc
@@ -0,0 +1,7 @@
+{
+ "test": {
+ "files": {
+ "exclude": ["./ignore"]
+ }
+ }
+}
diff --git a/tests/testdata/test/collect/deno.jsonc b/tests/testdata/test/collect/deno.jsonc
new file mode 100644
index 000000000..e14ce86da
--- /dev/null
+++ b/tests/testdata/test/collect/deno.jsonc
@@ -0,0 +1,5 @@
+{
+ "test": {
+ "exclude": ["./ignore"]
+ }
+}
diff --git a/tests/testdata/test/collect/deno.malformed.jsonc b/tests/testdata/test/collect/deno.malformed.jsonc
new file mode 100644
index 000000000..f2d8cbc65
--- /dev/null
+++ b/tests/testdata/test/collect/deno.malformed.jsonc
@@ -0,0 +1,5 @@
+{
+ "test": {
+ "dont_know_this_field": {}
+ }
+}
diff --git a/tests/testdata/test/collect/deno2.jsonc b/tests/testdata/test/collect/deno2.jsonc
new file mode 100644
index 000000000..b7af09d1c
--- /dev/null
+++ b/tests/testdata/test/collect/deno2.jsonc
@@ -0,0 +1,6 @@
+{
+ "test": {
+ "include": ["./include/"],
+ "exclude": ["./ignore", "./include/2_test.ts"]
+ }
+}
diff --git a/tests/testdata/test/collect/ignore/test.ts b/tests/testdata/test/collect/ignore/test.ts
new file mode 100644
index 000000000..16fb63ba7
--- /dev/null
+++ b/tests/testdata/test/collect/ignore/test.ts
@@ -0,0 +1 @@
+throw new Error("this module should be ignored");
diff --git a/tests/testdata/test/collect/include.ts b/tests/testdata/test/collect/include.ts
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/testdata/test/collect/include.ts
diff --git a/tests/testdata/test/collect/include/2_test.ts b/tests/testdata/test/collect/include/2_test.ts
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/testdata/test/collect/include/2_test.ts
diff --git a/tests/testdata/test/collect/include/test.ts b/tests/testdata/test/collect/include/test.ts
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/testdata/test/collect/include/test.ts
diff --git a/tests/testdata/test/collect/test.ts b/tests/testdata/test/collect/test.ts
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/testdata/test/collect/test.ts
diff --git a/tests/testdata/test/collect2.out b/tests/testdata/test/collect2.out
new file mode 100644
index 000000000..0c00c956a
--- /dev/null
+++ b/tests/testdata/test/collect2.out
@@ -0,0 +1,7 @@
+Check [WILDCARD]/test/collect/include/test.ts
+Check [WILDCARD]/test/collect/test.ts
+running 0 tests from [WILDCARD]/test/collect/include/test.ts
+running 0 tests from [WILDCARD]/test/collect/test.ts
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/collect_with_malformed_config.out b/tests/testdata/test/collect_with_malformed_config.out
new file mode 100644
index 000000000..b31b18e6a
--- /dev/null
+++ b/tests/testdata/test/collect_with_malformed_config.out
@@ -0,0 +1,4 @@
+error: Failed to parse "test" configuration
+
+Caused by:
+ unknown field `dont_know_this_field`, expected one of `include`, `exclude`, `files`
diff --git a/tests/testdata/test/deno.glob.json b/tests/testdata/test/deno.glob.json
new file mode 100644
index 000000000..9deb4d2f2
--- /dev/null
+++ b/tests/testdata/test/deno.glob.json
@@ -0,0 +1,11 @@
+{
+ "test": {
+ "include": [
+ "glob/data/test1.?s",
+ "glob/nested/foo/*.ts",
+ "glob/nested/fizz/*.ts",
+ "glob/pages/[id].ts"
+ ],
+ "exclude": ["glob/nested/**/*bazz.ts"]
+ }
+}
diff --git a/tests/testdata/test/deno_custom_jsx.json b/tests/testdata/test/deno_custom_jsx.json
new file mode 100644
index 000000000..7ef04d829
--- /dev/null
+++ b/tests/testdata/test/deno_custom_jsx.json
@@ -0,0 +1,6 @@
+{
+ "compilerOptions": {
+ "jsx": "react-jsx",
+ "jsxImportSource": "https://esm.sh/react@18.1.0"
+ }
+}
diff --git a/tests/testdata/test/doc.out b/tests/testdata/test/doc.out
new file mode 100644
index 000000000..cd8bbb620
--- /dev/null
+++ b/tests/testdata/test/doc.out
@@ -0,0 +1,9 @@
+Check [WILDCARD]/doc.ts$6-9.js
+Check [WILDCARD]/doc.ts$10-13.jsx
+Check [WILDCARD]/doc.ts$14-17.ts
+Check [WILDCARD]/doc.ts$18-21.tsx
+Check [WILDCARD]/doc.ts$30-35.ts
+error: TS2367 [ERROR]: This comparison appears to be unintentional because the types 'string' and 'number' have no overlap.
+console.assert(check() == 42);
+ ~~~~~~~~~~~~~
+ at [WILDCARD]/doc.ts$30-35.ts:3:16
diff --git a/tests/testdata/test/doc.ts b/tests/testdata/test/doc.ts
new file mode 100644
index 000000000..519479fc5
--- /dev/null
+++ b/tests/testdata/test/doc.ts
@@ -0,0 +1,38 @@
+/**
+ * ```
+ * import * as doc from "./doc.ts";
+ * ```
+ *
+ * ```js
+ * import * as doc from "./doc.ts";
+ * ```
+ *
+ * ```jsx
+ * import * as doc from "./doc.ts";
+ * ```
+ *
+ * ```ts
+ * import * as doc from "./doc.ts";
+ * ```
+ *
+ * ```tsx
+ * import * as doc from "./doc.ts";
+ * ```
+ *
+ * ```text
+ * import * as doc from "./doc.ts";
+ * ```
+ *
+ * @module doc
+ */
+
+/**
+ * ```ts
+ * import { check } from "./doc.ts";
+ *
+ * console.assert(check() == 42);
+ * ```
+ */
+export function check(): string {
+ return "check";
+}
diff --git a/tests/testdata/test/doc_only.out b/tests/testdata/test/doc_only.out
new file mode 100644
index 000000000..2b8b6dc73
--- /dev/null
+++ b/tests/testdata/test/doc_only.out
@@ -0,0 +1,4 @@
+Check [WILDCARD]/test/doc_only/mod.ts$2-5.ts
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/doc_only/mod.ts b/tests/testdata/test/doc_only/mod.ts
new file mode 100644
index 000000000..467d850a2
--- /dev/null
+++ b/tests/testdata/test/doc_only/mod.ts
@@ -0,0 +1,10 @@
+/**
+ * ```ts
+ * import "./mod.ts";
+ * ```
+ */
+Deno.test("unreachable", function () {
+ throw new Error(
+ "modules that don't end with _test are scanned for documentation tests only should not be executed",
+ );
+});
diff --git a/tests/testdata/test/exit_sanitizer.out b/tests/testdata/test/exit_sanitizer.out
new file mode 100644
index 000000000..684001475
--- /dev/null
+++ b/tests/testdata/test/exit_sanitizer.out
@@ -0,0 +1,38 @@
+Check [WILDCARD]/test/exit_sanitizer.ts
+running 3 tests from ./test/exit_sanitizer.ts
+exit(0) ... FAILED ([WILDCARD])
+exit(1) ... FAILED ([WILDCARD])
+exit(2) ... FAILED ([WILDCARD])
+
+ ERRORS
+
+exit(0) => ./test/exit_sanitizer.ts:[WILDCARD]
+error: Error: Test case attempted to exit with exit code: 0
+ Deno.exit(0);
+ ^
+ at [WILDCARD]
+ at [WILDCARD]/test/exit_sanitizer.ts:2:8
+
+exit(1) => ./test/exit_sanitizer.ts:[WILDCARD]
+error: Error: Test case attempted to exit with exit code: 1
+ Deno.exit(1);
+ ^
+ at [WILDCARD]
+ at [WILDCARD]/test/exit_sanitizer.ts:6:8
+
+exit(2) => ./test/exit_sanitizer.ts:[WILDCARD]
+error: Error: Test case attempted to exit with exit code: 2
+ Deno.exit(2);
+ ^
+ at [WILDCARD]
+ at [WILDCARD]/test/exit_sanitizer.ts:10:8
+
+ FAILURES
+
+exit(0) => ./test/exit_sanitizer.ts:[WILDCARD]
+exit(1) => ./test/exit_sanitizer.ts:[WILDCARD]
+exit(2) => ./test/exit_sanitizer.ts:[WILDCARD]
+
+FAILED | 0 passed | 3 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/exit_sanitizer.ts b/tests/testdata/test/exit_sanitizer.ts
new file mode 100644
index 000000000..186406a9d
--- /dev/null
+++ b/tests/testdata/test/exit_sanitizer.ts
@@ -0,0 +1,11 @@
+Deno.test("exit(0)", function () {
+ Deno.exit(0);
+});
+
+Deno.test("exit(1)", function () {
+ Deno.exit(1);
+});
+
+Deno.test("exit(2)", function () {
+ Deno.exit(2);
+});
diff --git a/tests/testdata/test/fail.out b/tests/testdata/test/fail.out
new file mode 100644
index 000000000..3fcf6fd8f
--- /dev/null
+++ b/tests/testdata/test/fail.out
@@ -0,0 +1,91 @@
+Check [WILDCARD]/test/fail.ts
+running 10 tests from ./test/fail.ts
+test 0 ... FAILED ([WILDCARD])
+test 1 ... FAILED ([WILDCARD])
+test 2 ... FAILED ([WILDCARD])
+test 3 ... FAILED ([WILDCARD])
+test 4 ... FAILED ([WILDCARD])
+test 5 ... FAILED ([WILDCARD])
+test 6 ... FAILED ([WILDCARD])
+test 7 ... FAILED ([WILDCARD])
+test 8 ... FAILED ([WILDCARD])
+test 9 ... FAILED ([WILDCARD])
+
+ ERRORS
+
+test 0 => ./test/fail.ts:1:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/test/fail.ts:2:9
+
+test 1 => ./test/fail.ts:4:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/test/fail.ts:5:9
+
+test 2 => ./test/fail.ts:7:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/test/fail.ts:8:9
+
+test 3 => ./test/fail.ts:10:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/test/fail.ts:11:9
+
+test 4 => ./test/fail.ts:13:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/test/fail.ts:14:9
+
+test 5 => ./test/fail.ts:16:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/test/fail.ts:17:9
+
+test 6 => ./test/fail.ts:19:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/test/fail.ts:20:9
+
+test 7 => ./test/fail.ts:22:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/test/fail.ts:23:9
+
+test 8 => ./test/fail.ts:25:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/test/fail.ts:26:9
+
+test 9 => ./test/fail.ts:28:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/test/fail.ts:29:9
+
+ FAILURES
+
+test 0 => ./test/fail.ts:1:6
+test 1 => ./test/fail.ts:4:6
+test 2 => ./test/fail.ts:7:6
+test 3 => ./test/fail.ts:10:6
+test 4 => ./test/fail.ts:13:6
+test 5 => ./test/fail.ts:16:6
+test 6 => ./test/fail.ts:19:6
+test 7 => ./test/fail.ts:22:6
+test 8 => ./test/fail.ts:25:6
+test 9 => ./test/fail.ts:28:6
+
+FAILED | 0 passed | 10 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/fail.ts b/tests/testdata/test/fail.ts
new file mode 100644
index 000000000..9340db556
--- /dev/null
+++ b/tests/testdata/test/fail.ts
@@ -0,0 +1,30 @@
+Deno.test("test 0", () => {
+ throw new Error();
+});
+Deno.test("test 1", () => {
+ throw new Error();
+});
+Deno.test("test 2", () => {
+ throw new Error();
+});
+Deno.test("test 3", () => {
+ throw new Error();
+});
+Deno.test("test 4", () => {
+ throw new Error();
+});
+Deno.test("test 5", () => {
+ throw new Error();
+});
+Deno.test("test 6", () => {
+ throw new Error();
+});
+Deno.test("test 7", () => {
+ throw new Error();
+});
+Deno.test("test 8", () => {
+ throw new Error();
+});
+Deno.test("test 9", () => {
+ throw new Error();
+});
diff --git a/tests/testdata/test/fail_fast.out b/tests/testdata/test/fail_fast.out
new file mode 100644
index 000000000..606d5b345
--- /dev/null
+++ b/tests/testdata/test/fail_fast.out
@@ -0,0 +1,20 @@
+Check [WILDCARD]/test/fail_fast.ts
+Check [WILDCARD]/test/fail_fast_other.ts
+running 10 tests from ./test/fail_fast.ts
+test 1 ... FAILED ([WILDCARD])
+
+ ERRORS
+
+test 1 => ./test/fail_fast.ts:[WILDCARD]
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/test/fail_fast.ts:2:9
+
+ FAILURES
+
+test 1 => ./test/fail_fast.ts:[WILDCARD]
+
+FAILED | 0 passed | 1 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/fail_fast.ts b/tests/testdata/test/fail_fast.ts
new file mode 100644
index 000000000..637e825ec
--- /dev/null
+++ b/tests/testdata/test/fail_fast.ts
@@ -0,0 +1,30 @@
+Deno.test("test 1", () => {
+ throw new Error();
+});
+Deno.test("test 2", () => {
+ throw new Error();
+});
+Deno.test("test 3", () => {
+ throw new Error();
+});
+Deno.test("test 4", () => {
+ throw new Error();
+});
+Deno.test("test 5", () => {
+ throw new Error();
+});
+Deno.test("test 6", () => {
+ throw new Error();
+});
+Deno.test("test 7", () => {
+ throw new Error();
+});
+Deno.test("test 8", () => {
+ throw new Error();
+});
+Deno.test("test 9", () => {
+ throw new Error();
+});
+Deno.test("test 0", () => {
+ throw new Error();
+});
diff --git a/tests/testdata/test/fail_fast_other.ts b/tests/testdata/test/fail_fast_other.ts
new file mode 100644
index 000000000..02aa878cf
--- /dev/null
+++ b/tests/testdata/test/fail_fast_other.ts
@@ -0,0 +1,3 @@
+Deno.test("test 11", () => {
+ throw new Error();
+});
diff --git a/tests/testdata/test/fail_fast_with_val.out b/tests/testdata/test/fail_fast_with_val.out
new file mode 100644
index 000000000..a844b05c1
--- /dev/null
+++ b/tests/testdata/test/fail_fast_with_val.out
@@ -0,0 +1,23 @@
+[WILDCARD]
+running 10 tests from [WILDCARD]/test/fail_fast_with_val.ts
+test test 1 ... FAILED ([WILDCARD])
+test test 2 ... FAILED ([WILDCARD])
+
+ ERRORS
+
+test 1 => ./test/fail_fast_with_val.ts:[WILDCARD]
+error: Error
+ at [WILDCARD]/test/fail_fast_with_val.ts:2:9
+ at [WILDCARD]
+
+test 2 => ./test/fail_fast_with_val.ts:[WILDCARD]
+error: Error
+ at [WILDCARD]/test/fail_fast_with_val.ts:5:9
+ at [WILDCARD]
+
+ FAILURES
+
+test 1 => ./test/fail_fast_with_val.ts:[WILDCARD]
+test 2 => ./test/fail_fast_with_val.ts:[WILDCARD]
+
+FAILED | 0 passed | 2 failed ([WILDCARD])
diff --git a/tests/testdata/test/fail_fast_with_val.ts b/tests/testdata/test/fail_fast_with_val.ts
new file mode 100644
index 000000000..637e825ec
--- /dev/null
+++ b/tests/testdata/test/fail_fast_with_val.ts
@@ -0,0 +1,30 @@
+Deno.test("test 1", () => {
+ throw new Error();
+});
+Deno.test("test 2", () => {
+ throw new Error();
+});
+Deno.test("test 3", () => {
+ throw new Error();
+});
+Deno.test("test 4", () => {
+ throw new Error();
+});
+Deno.test("test 5", () => {
+ throw new Error();
+});
+Deno.test("test 6", () => {
+ throw new Error();
+});
+Deno.test("test 7", () => {
+ throw new Error();
+});
+Deno.test("test 8", () => {
+ throw new Error();
+});
+Deno.test("test 9", () => {
+ throw new Error();
+});
+Deno.test("test 0", () => {
+ throw new Error();
+});
diff --git a/tests/testdata/test/file_protocol.out b/tests/testdata/test/file_protocol.out
new file mode 100644
index 000000000..3f9c73f7e
--- /dev/null
+++ b/tests/testdata/test/file_protocol.out
@@ -0,0 +1,6 @@
+Check file://[WILDCARD]/test/file_protocol.ts
+running 1 test from ./test/file_protocol.ts
+test 0 ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/file_protocol.ts b/tests/testdata/test/file_protocol.ts
new file mode 100644
index 000000000..79128c2b3
--- /dev/null
+++ b/tests/testdata/test/file_protocol.ts
@@ -0,0 +1 @@
+Deno.test("test 0", () => {});
diff --git a/tests/testdata/test/filter.out b/tests/testdata/test/filter.out
new file mode 100644
index 000000000..af3e43ab8
--- /dev/null
+++ b/tests/testdata/test/filter.out
@@ -0,0 +1,12 @@
+Check [WILDCARD]/test/filter/a_test.ts
+Check [WILDCARD]/test/filter/b_test.ts
+Check [WILDCARD]/test/filter/c_test.ts
+running 1 test from [WILDCARD]/test/filter/a_test.ts
+foo ... ok ([WILDCARD])
+running 1 test from [WILDCARD]/test/filter/b_test.ts
+foo ... ok ([WILDCARD])
+running 1 test from [WILDCARD]/test/filter/c_test.ts
+foo ... ok ([WILDCARD])
+
+ok | 3 passed | 0 failed | 6 filtered out ([WILDCARD])
+
diff --git a/tests/testdata/test/filter/a_test.ts b/tests/testdata/test/filter/a_test.ts
new file mode 100644
index 000000000..a3f32968a
--- /dev/null
+++ b/tests/testdata/test/filter/a_test.ts
@@ -0,0 +1,3 @@
+Deno.test("foo", function () {});
+Deno.test("bar", function () {});
+Deno.test("baz", function () {});
diff --git a/tests/testdata/test/filter/b_test.ts b/tests/testdata/test/filter/b_test.ts
new file mode 100644
index 000000000..a3f32968a
--- /dev/null
+++ b/tests/testdata/test/filter/b_test.ts
@@ -0,0 +1,3 @@
+Deno.test("foo", function () {});
+Deno.test("bar", function () {});
+Deno.test("baz", function () {});
diff --git a/tests/testdata/test/filter/c_test.ts b/tests/testdata/test/filter/c_test.ts
new file mode 100644
index 000000000..a3f32968a
--- /dev/null
+++ b/tests/testdata/test/filter/c_test.ts
@@ -0,0 +1,3 @@
+Deno.test("foo", function () {});
+Deno.test("bar", function () {});
+Deno.test("baz", function () {});
diff --git a/tests/testdata/test/filtered_out_only.out b/tests/testdata/test/filtered_out_only.out
new file mode 100644
index 000000000..337893848
--- /dev/null
+++ b/tests/testdata/test/filtered_out_only.out
@@ -0,0 +1,5 @@
+running 1 test from ./test/filtered_out_only.ts
+foo ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed | 1 filtered out ([WILDCARD])
+
diff --git a/tests/testdata/test/filtered_out_only.ts b/tests/testdata/test/filtered_out_only.ts
new file mode 100644
index 000000000..bda301a43
--- /dev/null
+++ b/tests/testdata/test/filtered_out_only.ts
@@ -0,0 +1,2 @@
+Deno.test("foo", () => {});
+Deno.test("bar", { only: true }, () => {});
diff --git a/tests/testdata/test/finally_timeout.out b/tests/testdata/test/finally_timeout.out
new file mode 100644
index 000000000..26153da06
--- /dev/null
+++ b/tests/testdata/test/finally_timeout.out
@@ -0,0 +1,20 @@
+Check [WILDCARD]/test/finally_timeout.ts
+running 2 tests from ./test/finally_timeout.ts
+error ... FAILED ([WILDCARD])
+success ... ok ([WILDCARD])
+
+ ERRORS
+
+error => ./test/finally_timeout.ts:[WILDCARD]
+error: Error: fail
+ throw new Error("fail");
+ ^
+ at [WILDCARD]/test/finally_timeout.ts:4:11
+
+ FAILURES
+
+error => ./test/finally_timeout.ts:[WILDCARD]
+
+FAILED | 1 passed | 1 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/finally_timeout.ts b/tests/testdata/test/finally_timeout.ts
new file mode 100644
index 000000000..dcc0a4d64
--- /dev/null
+++ b/tests/testdata/test/finally_timeout.ts
@@ -0,0 +1,11 @@
+Deno.test("error", function () {
+ const timer = setTimeout(() => null, 10000);
+ try {
+ throw new Error("fail");
+ } finally {
+ clearTimeout(timer);
+ }
+});
+
+Deno.test("success", function () {
+});
diff --git a/tests/testdata/test/glob/data/tes.ts b/tests/testdata/test/glob/data/tes.ts
new file mode 100644
index 000000000..26f07fba5
--- /dev/null
+++ b/tests/testdata/test/glob/data/tes.ts
@@ -0,0 +1,3 @@
+function foo() {
+
+} \ No newline at end of file
diff --git a/tests/testdata/test/glob/data/test1.js b/tests/testdata/test/glob/data/test1.js
new file mode 100644
index 000000000..26f07fba5
--- /dev/null
+++ b/tests/testdata/test/glob/data/test1.js
@@ -0,0 +1,3 @@
+function foo() {
+
+} \ No newline at end of file
diff --git a/tests/testdata/test/glob/data/test1.ts b/tests/testdata/test/glob/data/test1.ts
new file mode 100644
index 000000000..26f07fba5
--- /dev/null
+++ b/tests/testdata/test/glob/data/test1.ts
@@ -0,0 +1,3 @@
+function foo() {
+
+} \ No newline at end of file
diff --git a/tests/testdata/test/glob/data/test12.ts b/tests/testdata/test/glob/data/test12.ts
new file mode 100644
index 000000000..26f07fba5
--- /dev/null
+++ b/tests/testdata/test/glob/data/test12.ts
@@ -0,0 +1,3 @@
+function foo() {
+
+} \ No newline at end of file
diff --git a/tests/testdata/test/glob/nested/fizz/bar.ts b/tests/testdata/test/glob/nested/fizz/bar.ts
new file mode 100644
index 000000000..26f07fba5
--- /dev/null
+++ b/tests/testdata/test/glob/nested/fizz/bar.ts
@@ -0,0 +1,3 @@
+function foo() {
+
+} \ No newline at end of file
diff --git a/tests/testdata/test/glob/nested/fizz/bazz.ts b/tests/testdata/test/glob/nested/fizz/bazz.ts
new file mode 100644
index 000000000..26f07fba5
--- /dev/null
+++ b/tests/testdata/test/glob/nested/fizz/bazz.ts
@@ -0,0 +1,3 @@
+function foo() {
+
+} \ No newline at end of file
diff --git a/tests/testdata/test/glob/nested/fizz/fizz.ts b/tests/testdata/test/glob/nested/fizz/fizz.ts
new file mode 100644
index 000000000..6940729e9
--- /dev/null
+++ b/tests/testdata/test/glob/nested/fizz/fizz.ts
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/testdata/test/glob/nested/fizz/foo.ts b/tests/testdata/test/glob/nested/fizz/foo.ts
new file mode 100644
index 000000000..26f07fba5
--- /dev/null
+++ b/tests/testdata/test/glob/nested/fizz/foo.ts
@@ -0,0 +1,3 @@
+function foo() {
+
+} \ No newline at end of file
diff --git a/tests/testdata/test/glob/nested/foo/bar.ts b/tests/testdata/test/glob/nested/foo/bar.ts
new file mode 100644
index 000000000..26f07fba5
--- /dev/null
+++ b/tests/testdata/test/glob/nested/foo/bar.ts
@@ -0,0 +1,3 @@
+function foo() {
+
+} \ No newline at end of file
diff --git a/tests/testdata/test/glob/nested/foo/bazz.ts b/tests/testdata/test/glob/nested/foo/bazz.ts
new file mode 100644
index 000000000..26f07fba5
--- /dev/null
+++ b/tests/testdata/test/glob/nested/foo/bazz.ts
@@ -0,0 +1,3 @@
+function foo() {
+
+} \ No newline at end of file
diff --git a/tests/testdata/test/glob/nested/foo/fizz.ts b/tests/testdata/test/glob/nested/foo/fizz.ts
new file mode 100644
index 000000000..26f07fba5
--- /dev/null
+++ b/tests/testdata/test/glob/nested/foo/fizz.ts
@@ -0,0 +1,3 @@
+function foo() {
+
+} \ No newline at end of file
diff --git a/tests/testdata/test/glob/nested/foo/foo.ts b/tests/testdata/test/glob/nested/foo/foo.ts
new file mode 100644
index 000000000..26f07fba5
--- /dev/null
+++ b/tests/testdata/test/glob/nested/foo/foo.ts
@@ -0,0 +1,3 @@
+function foo() {
+
+} \ No newline at end of file
diff --git a/tests/testdata/test/glob/pages/[id].ts b/tests/testdata/test/glob/pages/[id].ts
new file mode 100644
index 000000000..26f07fba5
--- /dev/null
+++ b/tests/testdata/test/glob/pages/[id].ts
@@ -0,0 +1,3 @@
+function foo() {
+
+} \ No newline at end of file
diff --git a/tests/testdata/test/hello_world.out b/tests/testdata/test/hello_world.out
new file mode 100644
index 000000000..aee8a64d4
--- /dev/null
+++ b/tests/testdata/test/hello_world.out
@@ -0,0 +1,5 @@
+running 1 test from ./test/hello_world.ts
+hello world test ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/hello_world.ts b/tests/testdata/test/hello_world.ts
new file mode 100644
index 000000000..4a1c3463f
--- /dev/null
+++ b/tests/testdata/test/hello_world.ts
@@ -0,0 +1,9 @@
+Deno.test({
+ name: "hello world test",
+ fn(): void {
+ const world = "world";
+ if ("world" !== world) {
+ throw new Error("world !== world");
+ }
+ },
+});
diff --git a/tests/testdata/test/hide_empty_suites.out b/tests/testdata/test/hide_empty_suites.out
new file mode 100644
index 000000000..d270cb05a
--- /dev/null
+++ b/tests/testdata/test/hide_empty_suites.out
@@ -0,0 +1,4 @@
+Check [WILDCARD]/test/pass.ts
+
+ok | 0 passed | 0 failed | 16 filtered out ([WILDCARD])
+
diff --git a/tests/testdata/test/ignore.out b/tests/testdata/test/ignore.out
new file mode 100644
index 000000000..e67406c63
--- /dev/null
+++ b/tests/testdata/test/ignore.out
@@ -0,0 +1,15 @@
+Check [WILDCARD]/test/ignore.ts
+running 10 tests from ./test/ignore.ts
+test 0 ... ignored ([WILDCARD])
+test 1 ... ignored ([WILDCARD])
+test 2 ... ignored ([WILDCARD])
+test 3 ... ignored ([WILDCARD])
+test 4 ... ignored ([WILDCARD])
+test 5 ... ignored ([WILDCARD])
+test 6 ... ignored ([WILDCARD])
+test 7 ... ignored ([WILDCARD])
+test 8 ... ignored ([WILDCARD])
+test 9 ... ignored ([WILDCARD])
+
+ok | 0 passed | 0 failed | 10 ignored ([WILDCARD])
+
diff --git a/tests/testdata/test/ignore.ts b/tests/testdata/test/ignore.ts
new file mode 100644
index 000000000..2339835db
--- /dev/null
+++ b/tests/testdata/test/ignore.ts
@@ -0,0 +1,17 @@
+for (let i = 0; i < 5; i++) {
+ Deno.test({
+ name: `test ${i}`,
+ ignore: true,
+ fn() {
+ throw new Error("unreachable");
+ },
+ });
+}
+for (let i = 5; i < 10; i++) {
+ Deno.test.ignore({
+ name: `test ${i}`,
+ fn() {
+ throw new Error("unreachable");
+ },
+ });
+}
diff --git a/tests/testdata/test/ignore_permissions.out b/tests/testdata/test/ignore_permissions.out
new file mode 100644
index 000000000..cc2574da9
--- /dev/null
+++ b/tests/testdata/test/ignore_permissions.out
@@ -0,0 +1,6 @@
+Check [WILDCARD]/test/ignore_permissions.ts
+running 1 test from ./test/ignore_permissions.ts
+ignore ... ignored ([WILDCARD])
+
+ok | 0 passed | 0 failed | 1 ignored ([WILDCARD])
+
diff --git a/tests/testdata/test/ignore_permissions.ts b/tests/testdata/test/ignore_permissions.ts
new file mode 100644
index 000000000..ff3084441
--- /dev/null
+++ b/tests/testdata/test/ignore_permissions.ts
@@ -0,0 +1,16 @@
+Deno.test({
+ name: "ignore",
+ permissions: {
+ read: true,
+ write: true,
+ net: true,
+ env: true,
+ run: true,
+ ffi: true,
+ hrtime: true,
+ },
+ ignore: true,
+ fn() {
+ throw new Error("unreachable");
+ },
+});
diff --git a/tests/testdata/test/interval.out b/tests/testdata/test/interval.out
new file mode 100644
index 000000000..1d0bc15ac
--- /dev/null
+++ b/tests/testdata/test/interval.out
@@ -0,0 +1,5 @@
+Check [WILDCARD]/test/interval.ts
+running 0 tests from ./test/interval.ts
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/interval.ts b/tests/testdata/test/interval.ts
new file mode 100644
index 000000000..7eb588c59
--- /dev/null
+++ b/tests/testdata/test/interval.ts
@@ -0,0 +1 @@
+setInterval(function () {}, 0);
diff --git a/tests/testdata/test/load_unload.out b/tests/testdata/test/load_unload.out
new file mode 100644
index 000000000..aef7531af
--- /dev/null
+++ b/tests/testdata/test/load_unload.out
@@ -0,0 +1,6 @@
+Check [WILDCARD]/test/load_unload.ts
+running 1 test from ./test/load_unload.ts
+test ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/load_unload.ts b/tests/testdata/test/load_unload.ts
new file mode 100644
index 000000000..2bd04a676
--- /dev/null
+++ b/tests/testdata/test/load_unload.ts
@@ -0,0 +1,22 @@
+let interval: number | null = null;
+addEventListener("load", () => {
+ if (interval) {
+ throw new Error("Interval is already set");
+ }
+
+ interval = setInterval(() => {}, 0);
+});
+
+addEventListener("unload", () => {
+ if (!interval) {
+ throw new Error("Interval was not set");
+ }
+
+ clearInterval(interval);
+});
+
+Deno.test("test", () => {
+ if (!interval) {
+ throw new Error("Interval was not set");
+ }
+});
diff --git a/tests/testdata/test/markdown.md b/tests/testdata/test/markdown.md
new file mode 100644
index 000000000..d18dbd108
--- /dev/null
+++ b/tests/testdata/test/markdown.md
@@ -0,0 +1,31 @@
+# Documentation
+
+The following block does not have a language attribute and should be ignored:
+
+```
+This is a fenced block without attributes, it's invalid and it should be ignored.
+```
+
+The following block should be given a js extension on extraction:
+
+```js
+console.log("js");
+```
+
+The following block should be given a ts extension on extraction:
+
+```ts
+console.log("ts");
+```
+
+The following example contains the ignore attribute and will be ignored:
+
+```ts ignore
+const value: Invalid = "ignored";
+```
+
+The following example will trigger the type-checker to fail:
+
+```ts
+const a: string = 42;
+```
diff --git a/tests/testdata/test/markdown.out b/tests/testdata/test/markdown.out
new file mode 100644
index 000000000..38c9f0349
--- /dev/null
+++ b/tests/testdata/test/markdown.out
@@ -0,0 +1,7 @@
+Check [WILDCARD]/test/markdown.md$11-14.js
+Check [WILDCARD]/test/markdown.md$17-20.ts
+Check [WILDCARD]/test/markdown.md$29-32.ts
+error: TS2322 [ERROR]: Type 'number' is not assignable to type 'string'.
+const a: string = 42;
+ ^
+ at [WILDCARD]/test/markdown.md$29-32.ts:1:7
diff --git a/tests/testdata/test/markdown_full_block_names.md b/tests/testdata/test/markdown_full_block_names.md
new file mode 100644
index 000000000..4f9e1ea51
--- /dev/null
+++ b/tests/testdata/test/markdown_full_block_names.md
@@ -0,0 +1,19 @@
+# Documentation
+
+The following block should be given a js extension on extraction:
+
+```javascript
+console.log("js");
+```
+
+The following example contains the ignore attribute and will be ignored:
+
+```typescript ignore
+const value: Invalid = "ignored";
+```
+
+The following example will trigger the type-checker to fail:
+
+```typescript
+const a: string = 42;
+```
diff --git a/tests/testdata/test/markdown_full_block_names.out b/tests/testdata/test/markdown_full_block_names.out
new file mode 100644
index 000000000..13051112e
--- /dev/null
+++ b/tests/testdata/test/markdown_full_block_names.out
@@ -0,0 +1,6 @@
+Check [WILDCARD]/test/markdown_full_block_names.md$5-8.js
+Check [WILDCARD]/test/markdown_full_block_names.md$17-20.ts
+error: TS2322 [ERROR]: Type 'number' is not assignable to type 'string'.
+const a: string = 42;
+ ^
+ at [WILDCARD]/test/markdown_full_block_names.md$17-20.ts:1:7
diff --git a/tests/testdata/test/markdown_windows.md b/tests/testdata/test/markdown_windows.md
new file mode 100644
index 000000000..d18dbd108
--- /dev/null
+++ b/tests/testdata/test/markdown_windows.md
@@ -0,0 +1,31 @@
+# Documentation
+
+The following block does not have a language attribute and should be ignored:
+
+```
+This is a fenced block without attributes, it's invalid and it should be ignored.
+```
+
+The following block should be given a js extension on extraction:
+
+```js
+console.log("js");
+```
+
+The following block should be given a ts extension on extraction:
+
+```ts
+console.log("ts");
+```
+
+The following example contains the ignore attribute and will be ignored:
+
+```ts ignore
+const value: Invalid = "ignored";
+```
+
+The following example will trigger the type-checker to fail:
+
+```ts
+const a: string = 42;
+```
diff --git a/tests/testdata/test/markdown_windows.out b/tests/testdata/test/markdown_windows.out
new file mode 100644
index 000000000..4810e50cd
--- /dev/null
+++ b/tests/testdata/test/markdown_windows.out
@@ -0,0 +1,7 @@
+Check [WILDCARD]/test/markdown_windows.md$11-14.js
+Check [WILDCARD]/test/markdown_windows.md$17-20.ts
+Check [WILDCARD]/test/markdown_windows.md$29-32.ts
+error: TS2322 [ERROR]: Type 'number' is not assignable to type 'string'.
+const a: string = 42;
+ ^
+ at [WILDCARD]/test/markdown_windows.md$29-32.ts:1:7
diff --git a/tests/testdata/test/markdown_with_comment.md b/tests/testdata/test/markdown_with_comment.md
new file mode 100644
index 000000000..886e88103
--- /dev/null
+++ b/tests/testdata/test/markdown_with_comment.md
@@ -0,0 +1,36 @@
+# Documentation
+
+The following examples are inside HTML comments and will not trigger the
+type-checker:
+
+<!-- ```ts ignore
+const value: Invalid = "ignored";
+``` -->
+
+<!--
+```ts
+const a: string = 42;
+```
+-->
+
+<!--
+
+This is a comment.
+
+```ts
+const a: string = 42;
+```
+
+Something something more comments.
+
+```typescript
+const a: boolean = "true";
+```
+
+-->
+
+The following example will trigger the type-checker to fail:
+
+```ts
+const a: string = 42;
+```
diff --git a/tests/testdata/test/markdown_with_comment.out b/tests/testdata/test/markdown_with_comment.out
new file mode 100644
index 000000000..b202919d8
--- /dev/null
+++ b/tests/testdata/test/markdown_with_comment.out
@@ -0,0 +1,5 @@
+Check [WILDCARD]/test/markdown_with_comment.md$34-37.ts
+error: TS2322 [ERROR]: Type 'number' is not assignable to type 'string'.
+const a: string = 42;
+ ^
+ at [WILDCARD]/test/markdown_with_comment.md$34-37.ts:1:7
diff --git a/tests/testdata/test/meta.out b/tests/testdata/test/meta.out
new file mode 100644
index 000000000..c46315ece
--- /dev/null
+++ b/tests/testdata/test/meta.out
@@ -0,0 +1,11 @@
+Check [WILDCARD]/test/meta.ts
+running 1 test from ./test/meta.ts
+check values ...
+------- output -------
+import.meta.main: false
+import.meta.url: [WILDCARD]/test/meta.ts
+----- output end -----
+check values ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/meta.ts b/tests/testdata/test/meta.ts
new file mode 100644
index 000000000..f2433a96d
--- /dev/null
+++ b/tests/testdata/test/meta.ts
@@ -0,0 +1,7 @@
+const main = import.meta.main;
+const url = import.meta.url;
+
+Deno.test("check values", () => {
+ console.log("import.meta.main: %s", main);
+ console.log("import.meta.url: %s", url);
+});
diff --git a/tests/testdata/test/no_check.out b/tests/testdata/test/no_check.out
new file mode 100644
index 000000000..66ad07e26
--- /dev/null
+++ b/tests/testdata/test/no_check.out
@@ -0,0 +1,19 @@
+Uncaught error from ./test/no_check.ts FAILED
+
+ ERRORS
+
+./test/no_check.ts (uncaught error)
+error: (in promise) TypeError: Cannot read properties of undefined (reading 'fn')
+Deno.test();
+ ^
+ at [WILDCARD]
+This error was not caught from a test and caused the test runner to fail on the referenced module.
+It most likely originated from a dangling promise, event/timeout handler or top-level code.
+
+ FAILURES
+
+./test/no_check.ts (uncaught error)
+
+FAILED | 0 passed | 1 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/no_check.ts b/tests/testdata/test/no_check.ts
new file mode 100644
index 000000000..79d75f989
--- /dev/null
+++ b/tests/testdata/test/no_check.ts
@@ -0,0 +1 @@
+Deno.test();
diff --git a/tests/testdata/test/no_color.ts b/tests/testdata/test/no_color.ts
new file mode 100644
index 000000000..38c531ee9
--- /dev/null
+++ b/tests/testdata/test/no_color.ts
@@ -0,0 +1,17 @@
+Deno.test({
+ name: "success",
+ fn() {},
+});
+
+Deno.test({
+ name: "fail",
+ fn() {
+ throw new Error("fail");
+ },
+});
+
+Deno.test({
+ name: "ignored",
+ ignore: true,
+ fn() {},
+});
diff --git a/tests/testdata/test/no_prompt_by_default.out b/tests/testdata/test/no_prompt_by_default.out
new file mode 100644
index 000000000..a35e3f7ae
--- /dev/null
+++ b/tests/testdata/test/no_prompt_by_default.out
@@ -0,0 +1,16 @@
+running 1 test from ./test/no_prompt_by_default.ts
+no prompt ... FAILED ([WILDCARD]s)
+
+ ERRORS
+
+no prompt => ./test/no_prompt_by_default.ts:[WILDCARD]
+error: PermissionDenied: Requires read access to "./some_file.txt", run again with the --allow-read flag
+[WILDCARD]
+
+ FAILURES
+
+no prompt => ./test/no_prompt_by_default.ts:[WILDCARD]
+
+FAILED | 0 passed | 1 failed ([WILDCARD]s)
+
+error: Test failed
diff --git a/tests/testdata/test/no_prompt_by_default.ts b/tests/testdata/test/no_prompt_by_default.ts
new file mode 100644
index 000000000..83837825d
--- /dev/null
+++ b/tests/testdata/test/no_prompt_by_default.ts
@@ -0,0 +1,3 @@
+Deno.test("no prompt", async () => {
+ await Deno.readTextFile("./some_file.txt");
+});
diff --git a/tests/testdata/test/no_prompt_with_denied_perms.out b/tests/testdata/test/no_prompt_with_denied_perms.out
new file mode 100644
index 000000000..4293ff1bb
--- /dev/null
+++ b/tests/testdata/test/no_prompt_with_denied_perms.out
@@ -0,0 +1,16 @@
+running 1 test from ./test/no_prompt_with_denied_perms.ts
+no prompt ... FAILED ([WILDCARD]s)
+
+ ERRORS
+
+no prompt => ./test/no_prompt_with_denied_perms.ts:[WILDCARD]
+error: PermissionDenied: Requires read access to "./some_file.txt", run again with the --allow-read flag
+[WILDCARD]
+
+ FAILURES
+
+no prompt => ./test/no_prompt_with_denied_perms.ts:[WILDCARD]
+
+FAILED | 0 passed | 1 failed ([WILDCARD]s)
+
+error: Test failed
diff --git a/tests/testdata/test/no_prompt_with_denied_perms.ts b/tests/testdata/test/no_prompt_with_denied_perms.ts
new file mode 100644
index 000000000..7fe5577cb
--- /dev/null
+++ b/tests/testdata/test/no_prompt_with_denied_perms.ts
@@ -0,0 +1,3 @@
+Deno.test("no prompt", { permissions: { read: false } }, async () => {
+ await Deno.readTextFile("./some_file.txt");
+});
diff --git a/tests/testdata/test/no_run.out b/tests/testdata/test/no_run.out
new file mode 100644
index 000000000..5edf03fe0
--- /dev/null
+++ b/tests/testdata/test/no_run.out
@@ -0,0 +1,5 @@
+Check [WILDCARD]/test/no_run.ts
+error: TS2322 [ERROR]: Type 'number' is not assignable to type 'string'.
+const _value: string = 1;
+ ~~~~~~
+ at [WILDCARD]/test/no_run.ts:1:7
diff --git a/tests/testdata/test/no_run.ts b/tests/testdata/test/no_run.ts
new file mode 100644
index 000000000..b75915753
--- /dev/null
+++ b/tests/testdata/test/no_run.ts
@@ -0,0 +1 @@
+const _value: string = 1;
diff --git a/tests/testdata/test/non_error_thrown.out b/tests/testdata/test/non_error_thrown.out
new file mode 100644
index 000000000..6755f2905
--- /dev/null
+++ b/tests/testdata/test/non_error_thrown.out
@@ -0,0 +1,40 @@
+running 6 tests from [WILDCARD]/non_error_thrown.ts
+foo ... FAILED ([WILDCARD])
+bar ... FAILED ([WILDCARD])
+baz ... FAILED ([WILDCARD])
+qux ... FAILED ([WILDCARD])
+quux ... FAILED ([WILDCARD])
+quuz ... FAILED ([WILDCARD])
+
+ ERRORS
+
+foo => [WILDCARD]/non_error_thrown.ts:1:6
+error: undefined
+
+bar => [WILDCARD]/non_error_thrown.ts:5:6
+error: null
+
+baz => [WILDCARD]/non_error_thrown.ts:9:6
+error: 123
+
+qux => [WILDCARD]/non_error_thrown.ts:13:6
+error: "Hello, world!"
+
+quux => [WILDCARD]/non_error_thrown.ts:17:6
+error: [ 1, 2, 3 ]
+
+quuz => [WILDCARD]/non_error_thrown.ts:21:6
+error: { a: "Hello, world!", b: [ 1, 2, 3 ] }
+
+ FAILURES
+
+foo => [WILDCARD]/non_error_thrown.ts:1:6
+bar => [WILDCARD]/non_error_thrown.ts:5:6
+baz => [WILDCARD]/non_error_thrown.ts:9:6
+qux => [WILDCARD]/non_error_thrown.ts:13:6
+quux => [WILDCARD]/non_error_thrown.ts:17:6
+quuz => [WILDCARD]/non_error_thrown.ts:21:6
+
+FAILED | 0 passed | 6 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/non_error_thrown.ts b/tests/testdata/test/non_error_thrown.ts
new file mode 100644
index 000000000..85dc8d179
--- /dev/null
+++ b/tests/testdata/test/non_error_thrown.ts
@@ -0,0 +1,23 @@
+Deno.test("foo", () => {
+ throw undefined;
+});
+
+Deno.test("bar", () => {
+ throw null;
+});
+
+Deno.test("baz", () => {
+ throw 123;
+});
+
+Deno.test("qux", () => {
+ throw "Hello, world!";
+});
+
+Deno.test("quux", () => {
+ throw [1, 2, 3];
+});
+
+Deno.test("quuz", () => {
+ throw { a: "Hello, world!", b: [1, 2, 3] };
+});
diff --git a/tests/testdata/test/only.out b/tests/testdata/test/only.out
new file mode 100644
index 000000000..2e66ed22b
--- /dev/null
+++ b/tests/testdata/test/only.out
@@ -0,0 +1,8 @@
+Check [WILDCARD]/test/only.ts
+running 2 tests from ./test/only.ts
+only ... ok ([WILDCARD])
+only2 ... ok ([WILDCARD])
+
+ok | 2 passed | 0 failed | 2 filtered out ([WILDCARD])
+
+error: Test failed because the "only" option was used
diff --git a/tests/testdata/test/only.ts b/tests/testdata/test/only.ts
new file mode 100644
index 000000000..26b4cd425
--- /dev/null
+++ b/tests/testdata/test/only.ts
@@ -0,0 +1,20 @@
+Deno.test({
+ name: "before",
+ fn() {},
+});
+
+Deno.test({
+ only: true,
+ name: "only",
+ fn() {},
+});
+
+Deno.test.only({
+ name: "only2",
+ fn() {},
+});
+
+Deno.test({
+ name: "after",
+ fn() {},
+});
diff --git a/tests/testdata/test/ops_sanitizer_closed_inside_started_before.out b/tests/testdata/test/ops_sanitizer_closed_inside_started_before.out
new file mode 100644
index 000000000..0a8cc2245
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_closed_inside_started_before.out
@@ -0,0 +1,19 @@
+Check [WILDCARD]test/ops_sanitizer_closed_inside_started_before.ts
+running 1 test from ./test/ops_sanitizer_closed_inside_started_before.ts
+test 1 ... FAILED [WILDCARD]
+
+ ERRORS
+
+test 1 => ./test/ops_sanitizer_closed_inside_started_before.ts:[WILDCARD]
+error: Leaking async ops:
+ - 1 async operation to sleep for a duration was started before this test, but was completed during the test. Async operations should not complete in a test if they were not started in that test. This is often caused by not cancelling a `setTimeout` or `setInterval` call. The operation was started here:
+ at [WILDCARD]
+ at [WILDCARD]/tests/testdata/test/ops_sanitizer_closed_inside_started_before.ts:[WILDCARD]
+
+ FAILURES
+
+test 1 => ./test/ops_sanitizer_closed_inside_started_before.ts:[WILDCARD]
+
+FAILED | 0 passed | 1 failed [WILDCARD]
+
+error: Test failed
diff --git a/tests/testdata/test/ops_sanitizer_closed_inside_started_before.ts b/tests/testdata/test/ops_sanitizer_closed_inside_started_before.ts
new file mode 100644
index 000000000..97d3d72c8
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_closed_inside_started_before.ts
@@ -0,0 +1,5 @@
+const timer = setTimeout(() => {}, 10000000000);
+
+Deno.test("test 1", () => {
+ clearTimeout(timer);
+});
diff --git a/tests/testdata/test/ops_sanitizer_missing_details.out b/tests/testdata/test/ops_sanitizer_missing_details.out
new file mode 100644
index 000000000..36191912a
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_missing_details.out
@@ -0,0 +1,18 @@
+Check [WILDCARD]test/ops_sanitizer_missing_details.ts
+running 1 test from ./test/ops_sanitizer_missing_details.ts
+test 1 ... FAILED [WILDCARD]
+
+ ERRORS
+
+test 1 => ./test/ops_sanitizer_missing_details.ts:[WILDCARD]
+error: Leaking async ops:
+ - 1 async operation to op_write was started in this test, but never completed.
+To get more details where ops were leaked, run again with --trace-ops flag.
+
+ FAILURES
+
+test 1 => ./test/ops_sanitizer_missing_details.ts:[WILDCARD]
+
+FAILED | 0 passed | 1 failed [WILDCARD]
+
+error: Test failed
diff --git a/tests/testdata/test/ops_sanitizer_missing_details.ts b/tests/testdata/test/ops_sanitizer_missing_details.ts
new file mode 100644
index 000000000..a40240bfc
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_missing_details.ts
@@ -0,0 +1,10 @@
+// https://github.com/denoland/deno/issues/13729
+// https://github.com/denoland/deno/issues/13938
+import { writeAll } from "../../../test_util/std/streams/write_all.ts";
+
+Deno.test("test 1", { permissions: { write: true, read: true } }, async () => {
+ const tmpFile = await Deno.makeTempFile();
+ const file = await Deno.open(tmpFile, { write: true });
+ const buf = new Uint8Array(new Array(1_000_000).fill(1));
+ writeAll(file, buf);
+});
diff --git a/tests/testdata/test/ops_sanitizer_multiple_timeout_tests.out b/tests/testdata/test/ops_sanitizer_multiple_timeout_tests.out
new file mode 100644
index 000000000..d7ccc6a00
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_multiple_timeout_tests.out
@@ -0,0 +1,45 @@
+Check [WILDCARD]/testdata/test/ops_sanitizer_multiple_timeout_tests.ts
+running 2 tests from ./test/ops_sanitizer_multiple_timeout_tests.ts
+test 1 ... FAILED ([WILDCARD])
+test 2 ... FAILED ([WILDCARD])
+
+ ERRORS
+
+test 1 => ./test/ops_sanitizer_multiple_timeout_tests.ts:[WILDCARD]
+error: Leaking async ops:
+ - 2 async operations to sleep for a duration were started in this test, but never completed. This is often caused by not cancelling a `setTimeout` or `setInterval` call. The operations were started here:
+ at [WILDCARD]
+ at setTimeout ([WILDCARD])
+ at test ([WILDCARD]/testdata/test/ops_sanitizer_multiple_timeout_tests.ts:4:3)
+ at [WILDCARD]/testdata/test/ops_sanitizer_multiple_timeout_tests.ts:8:27
+ at [WILDCARD]
+
+ at [WILDCARD]
+ at setTimeout ([WILDCARD])
+ at test ([WILDCARD]/testdata/test/ops_sanitizer_multiple_timeout_tests.ts:5:3)
+ at [WILDCARD]/testdata/test/ops_sanitizer_multiple_timeout_tests.ts:8:27
+ at [WILDCARD]
+
+test 2 => ./test/ops_sanitizer_multiple_timeout_tests.ts:[WILDCARD]
+error: Leaking async ops:
+ - 2 async operations to sleep for a duration were started in this test, but never completed. This is often caused by not cancelling a `setTimeout` or `setInterval` call. The operations were started here:
+ at [WILDCARD]
+ at setTimeout ([WILDCARD])
+ at test ([WILDCARD]/testdata/test/ops_sanitizer_multiple_timeout_tests.ts:4:3)
+ at [WILDCARD]/testdata/test/ops_sanitizer_multiple_timeout_tests.ts:10:27
+ at [WILDCARD]
+
+ at [WILDCARD]
+ at setTimeout ([WILDCARD])
+ at test ([WILDCARD]/testdata/test/ops_sanitizer_multiple_timeout_tests.ts:5:3)
+ at [WILDCARD]/testdata/test/ops_sanitizer_multiple_timeout_tests.ts:10:27
+ at [WILDCARD]
+
+ FAILURES
+
+test 1 => ./test/ops_sanitizer_multiple_timeout_tests.ts:[WILDCARD]
+test 2 => ./test/ops_sanitizer_multiple_timeout_tests.ts:[WILDCARD]
+
+FAILED | 0 passed | 2 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/ops_sanitizer_multiple_timeout_tests.ts b/tests/testdata/test/ops_sanitizer_multiple_timeout_tests.ts
new file mode 100644
index 000000000..1f52d481f
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_multiple_timeout_tests.ts
@@ -0,0 +1,10 @@
+// https://github.com/denoland/deno/issues/8965
+
+function test() {
+ setTimeout(() => {}, 10000);
+ setTimeout(() => {}, 10001);
+}
+
+Deno.test("test 1", () => test());
+
+Deno.test("test 2", () => test());
diff --git a/tests/testdata/test/ops_sanitizer_multiple_timeout_tests_no_trace.out b/tests/testdata/test/ops_sanitizer_multiple_timeout_tests_no_trace.out
new file mode 100644
index 000000000..1655c162f
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_multiple_timeout_tests_no_trace.out
@@ -0,0 +1,25 @@
+Check [WILDCARD]/testdata/test/ops_sanitizer_multiple_timeout_tests.ts
+running 2 tests from ./test/ops_sanitizer_multiple_timeout_tests.ts
+test 1 ... FAILED ([WILDCARD])
+test 2 ... FAILED ([WILDCARD])
+
+ ERRORS
+
+test 1 => ./test/ops_sanitizer_multiple_timeout_tests.ts:[WILDCARD]
+error: Leaking async ops:
+ - 2 async operations to sleep for a duration were started in this test, but never completed. This is often caused by not cancelling a `setTimeout` or `setInterval` call.
+To get more details where ops were leaked, run again with --trace-ops flag.
+
+test 2 => ./test/ops_sanitizer_multiple_timeout_tests.ts:[WILDCARD]
+error: Leaking async ops:
+ - 2 async operations to sleep for a duration were started in this test, but never completed. This is often caused by not cancelling a `setTimeout` or `setInterval` call.
+To get more details where ops were leaked, run again with --trace-ops flag.
+
+ FAILURES
+
+test 1 => ./test/ops_sanitizer_multiple_timeout_tests.ts:[WILDCARD]
+test 2 => ./test/ops_sanitizer_multiple_timeout_tests.ts:[WILDCARD]
+
+FAILED | 0 passed | 2 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/ops_sanitizer_nexttick.out b/tests/testdata/test/ops_sanitizer_nexttick.out
new file mode 100644
index 000000000..44a8d13d5
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_nexttick.out
@@ -0,0 +1,6 @@
+running 2 tests from ./test/ops_sanitizer_nexttick.ts
+test 1 ... ok ([WILDCARD])
+test 2 ... ok ([WILDCARD])
+
+ok | 2 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/ops_sanitizer_nexttick.ts b/tests/testdata/test/ops_sanitizer_nexttick.ts
new file mode 100644
index 000000000..9ad3a7b28
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_nexttick.ts
@@ -0,0 +1,11 @@
+import { nextTick } from "node:process";
+
+// https://github.com/denoland/deno_std/issues/1651
+
+Deno.test("test 1", async () => {
+ await new Promise<void>((resolve) => nextTick(resolve));
+});
+
+Deno.test("test 2", async () => {
+ await new Promise<void>((resolve) => nextTick(resolve));
+});
diff --git a/tests/testdata/test/ops_sanitizer_step_leak.out b/tests/testdata/test/ops_sanitizer_step_leak.out
new file mode 100644
index 000000000..55c89582a
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_step_leak.out
@@ -0,0 +1,10 @@
+Check [WILDCARD]/tests/testdata/test/ops_sanitizer_step_leak.ts
+running 1 test from ./tests/testdata/test/ops_sanitizer_step_leak.ts
+timeout ...
+ step ... ok [WILDCARD]
+------- output -------
+done
+----- output end -----
+timeout ... ok [WILDCARD]
+
+ok | 1 passed (1 step) | 0 failed [WILDCARD] \ No newline at end of file
diff --git a/tests/testdata/test/ops_sanitizer_step_leak.ts b/tests/testdata/test/ops_sanitizer_step_leak.ts
new file mode 100644
index 000000000..3fb9b397e
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_step_leak.ts
@@ -0,0 +1,10 @@
+Deno.test("timeout", async (t) => {
+ const timer = setTimeout(() => {
+ console.log("timeout");
+ }, 10000);
+ clearTimeout(timer);
+ await t.step("step", async () => {
+ await new Promise<void>((resolve) => setTimeout(() => resolve(), 10));
+ });
+ console.log("done");
+});
diff --git a/tests/testdata/test/ops_sanitizer_timeout_failure.out b/tests/testdata/test/ops_sanitizer_timeout_failure.out
new file mode 100644
index 000000000..a4fbf0008
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_timeout_failure.out
@@ -0,0 +1,6 @@
+Check [WILDCARD]/testdata/test/ops_sanitizer_timeout_failure.ts
+running 1 test from ./test/ops_sanitizer_timeout_failure.ts
+wait ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/ops_sanitizer_timeout_failure.ts b/tests/testdata/test/ops_sanitizer_timeout_failure.ts
new file mode 100644
index 000000000..d40a5a258
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_timeout_failure.ts
@@ -0,0 +1,22 @@
+let intervalHandle: number;
+let firstIntervalPromise: Promise<void>;
+
+addEventListener("load", () => {
+ firstIntervalPromise = new Promise((resolve) => {
+ let firstIntervalCalled = false;
+ intervalHandle = setInterval(() => {
+ if (!firstIntervalCalled) {
+ resolve();
+ firstIntervalCalled = true;
+ }
+ }, 5);
+ });
+});
+
+addEventListener("unload", () => {
+ clearInterval(intervalHandle);
+});
+
+Deno.test("wait", async function () {
+ await firstIntervalPromise;
+});
diff --git a/tests/testdata/test/ops_sanitizer_unstable.out b/tests/testdata/test/ops_sanitizer_unstable.out
new file mode 100644
index 000000000..a4f47a749
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_unstable.out
@@ -0,0 +1,22 @@
+Check [WILDCARD]/testdata/test/ops_sanitizer_unstable.ts
+running 2 tests from ./test/ops_sanitizer_unstable.ts
+no-op ... ok ([WILDCARD])
+leak interval ... FAILED ([WILDCARD])
+
+ ERRORS
+
+leak interval => ./test/ops_sanitizer_unstable.ts:[WILDCARD]
+error: Leaking async ops:
+ - 1 async operation to sleep for a duration was started in this test, but never completed. This is often caused by not cancelling a `setTimeout` or `setInterval` call. The operation was started here:
+ at [WILDCARD]
+ at setInterval ([WILDCARD])
+ at fn ([WILDCARD]/testdata/test/ops_sanitizer_unstable.ts:7:5)
+ at [WILDCARD]
+
+ FAILURES
+
+leak interval => ./test/ops_sanitizer_unstable.ts:[WILDCARD]
+
+FAILED | 1 passed | 1 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/ops_sanitizer_unstable.ts b/tests/testdata/test/ops_sanitizer_unstable.ts
new file mode 100644
index 000000000..d1b554adf
--- /dev/null
+++ b/tests/testdata/test/ops_sanitizer_unstable.ts
@@ -0,0 +1,9 @@
+Deno.test("no-op", function () {});
+Deno.test({
+ name: "leak interval",
+ // regression test for sanitizer errors being swallowed with permissions.
+ permissions: {},
+ fn() {
+ setInterval(function () {}, 100000);
+ },
+});
diff --git a/tests/testdata/test/overloads.out b/tests/testdata/test/overloads.out
new file mode 100644
index 000000000..87a3f07cb
--- /dev/null
+++ b/tests/testdata/test/overloads.out
@@ -0,0 +1,11 @@
+Check [WILDCARD]/test/overloads.ts
+running 6 tests from ./test/overloads.ts
+test0 ... ok ([WILDCARD])
+test1 ... ok ([WILDCARD])
+test2 ... ok ([WILDCARD])
+test3 ... ok ([WILDCARD])
+test4 ... ok ([WILDCARD])
+test5 ... ignored ([WILDCARD])
+
+ok | 5 passed | 0 failed | 1 ignored ([WILDCARD])
+
diff --git a/tests/testdata/test/overloads.ts b/tests/testdata/test/overloads.ts
new file mode 100644
index 000000000..eb7b3dccc
--- /dev/null
+++ b/tests/testdata/test/overloads.ts
@@ -0,0 +1,6 @@
+Deno.test("test0", () => {});
+Deno.test(function test1() {});
+Deno.test({ name: "test2", fn: () => {} });
+Deno.test("test3", { permissions: "none" }, () => {});
+Deno.test({ name: "test4" }, () => {});
+Deno.test({ ignore: true }, function test5() {});
diff --git a/tests/testdata/test/parallel_output.out b/tests/testdata/test/parallel_output.out
new file mode 100644
index 000000000..d3528a6e0
--- /dev/null
+++ b/tests/testdata/test/parallel_output.out
@@ -0,0 +1,56 @@
+Check [WILDCARD]/test/parallel_output.ts
+./test/parallel_output.ts => step output ... step 1 ... ok ([WILDCARD]s)
+./test/parallel_output.ts => step output ... step 2 ... ok ([WILDCARD]s)
+------- output -------
+Hello, world! (from step 3)
+----- output end -----
+./test/parallel_output.ts => step output ... step 3 ... ok ([WILDCARD]s)
+------- output -------
+Hello, world! (from step 4)
+----- output end -----
+./test/parallel_output.ts => step output ... step 4 ... ok ([WILDCARD]s)
+./test/parallel_output.ts => step output ... ok ([WILDCARD]s)
+./test/parallel_output.ts => step failures ... step 1 ... ok ([WILDCARD]s)
+./test/parallel_output.ts => step failures ... step 2 ... FAILED ([WILDCARD]s)
+./test/parallel_output.ts => step failures ... step 3 ... FAILED ([WILDCARD]s)
+./test/parallel_output.ts => step failures ... FAILED (due to 2 failed steps) ([WILDCARD]s)
+./test/parallel_output.ts => step nested failure ... step 1 ... inner 1 ... ok ([WILDCARD]s)
+./test/parallel_output.ts => step nested failure ... step 1 ... inner 2 ... FAILED ([WILDCARD]s)
+./test/parallel_output.ts => step nested failure ... step 1 ... FAILED (due to 1 failed step) ([WILDCARD]s)
+./test/parallel_output.ts => step nested failure ... FAILED (due to 1 failed step) ([WILDCARD]s)
+
+ ERRORS
+
+step failures ... step 2 => ./test/parallel_output.ts:14:11
+error: Error: Fail.
+ throw new Error("Fail.");
+ ^
+ at file:///[WILDCARD]/test/parallel_output.ts:15:11
+ at [WILDCARD]
+ at file:///[WILDCARD]/test/parallel_output.ts:14:11
+
+step failures ... step 3 => ./test/parallel_output.ts:17:11
+error: Error: Fail.
+ await t.step("step 3", () => Promise.reject(new Error("Fail.")));
+ ^
+ at file:///[WILDCARD]/test/parallel_output.ts:17:47
+ at [WILDCARD]
+ at file:///[WILDCARD]/test/parallel_output.ts:17:11
+
+step nested failure ... step 1 ... inner 2 => ./test/parallel_output.ts:23:13
+error: Error: Failed.
+ throw new Error("Failed.");
+ ^
+ at file:///[WILDCARD]/test/parallel_output.ts:24:13
+ at [WILDCARD]
+ at file:///[WILDCARD]/test/parallel_output.ts:23:13
+
+ FAILURES
+
+step failures ... step 2 => ./test/parallel_output.ts:14:11
+step failures ... step 3 => ./test/parallel_output.ts:17:11
+step nested failure ... step 1 ... inner 2 => ./test/parallel_output.ts:23:13
+
+FAILED | 1 passed (6 steps) | 2 failed (4 steps) ([WILDCARD]s)
+
+error: Test failed
diff --git a/tests/testdata/test/parallel_output.ts b/tests/testdata/test/parallel_output.ts
new file mode 100644
index 000000000..5de733aad
--- /dev/null
+++ b/tests/testdata/test/parallel_output.ts
@@ -0,0 +1,27 @@
+Deno.test("step output", async (t) => {
+ await t.step("step 1", () => {});
+ await t.step("step 2", () => {});
+ await t.step("step 3", () => {
+ console.log("Hello, world! (from step 3)");
+ });
+ await t.step("step 4", () => {
+ console.log("Hello, world! (from step 4)");
+ });
+});
+
+Deno.test("step failures", async (t) => {
+ await t.step("step 1", () => {});
+ await t.step("step 2", () => {
+ throw new Error("Fail.");
+ });
+ await t.step("step 3", () => Promise.reject(new Error("Fail.")));
+});
+
+Deno.test("step nested failure", async (t) => {
+ await t.step("step 1", async (t) => {
+ await t.step("inner 1", () => {});
+ await t.step("inner 2", () => {
+ throw new Error("Failed.");
+ });
+ });
+});
diff --git a/tests/testdata/test/pass.junit.out b/tests/testdata/test/pass.junit.out
new file mode 100644
index 000000000..b652dbf85
--- /dev/null
+++ b/tests/testdata/test/pass.junit.out
@@ -0,0 +1,38 @@
+Check [WILDCARD]/testdata/test/pass.ts
+<?xml version="1.0" encoding="UTF-8"?>
+<testsuites name="deno test" tests="16" failures="0" errors="0" time="[WILDCARD]">
+ <testsuite name="[WILDCARD]/testdata/test/pass.ts" tests="16" disabled="0" errors="0" failures="0">
+ <testcase name="test 0" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="1" col="6">
+ </testcase>
+ <testcase name="test 1" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="2" col="6">
+ </testcase>
+ <testcase name="test 2" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="3" col="6">
+ </testcase>
+ <testcase name="test 3" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="4" col="6">
+ </testcase>
+ <testcase name="test 4" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="5" col="6">
+ </testcase>
+ <testcase name="test 5" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="6" col="6">
+ </testcase>
+ <testcase name="test 6" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="7" col="6">
+ </testcase>
+ <testcase name="test 7" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="8" col="6">
+ </testcase>
+ <testcase name="test 8" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="9" col="6">
+ </testcase>
+ <testcase name="test 9" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="12" col="6">
+ </testcase>
+ <testcase name="test\b" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="16" col="6">
+ </testcase>
+ <testcase name="test\f" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="19" col="6">
+ </testcase>
+ <testcase name="test\t" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="23" col="6">
+ </testcase>
+ <testcase name="test\n" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="27" col="6">
+ </testcase>
+ <testcase name="test\r" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="31" col="6">
+ </testcase>
+ <testcase name="test\v" time="[WILDCARD]" filename="[WILDCARD]/testdata/test/pass.ts" line="35" col="6">
+ </testcase>
+ </testsuite>
+</testsuites>
diff --git a/tests/testdata/test/pass.out b/tests/testdata/test/pass.out
new file mode 100644
index 000000000..08b9f5a52
--- /dev/null
+++ b/tests/testdata/test/pass.out
@@ -0,0 +1,53 @@
+Check [WILDCARD]/test/pass.ts
+running 16 tests from ./test/pass.ts
+test 0 ... ok ([WILDCARD])
+test 1 ... ok ([WILDCARD])
+test 2 ... ok ([WILDCARD])
+test 3 ... ok ([WILDCARD])
+test 4 ... ok ([WILDCARD])
+test 5 ... ok ([WILDCARD])
+test 6 ... ok ([WILDCARD])
+test 7 ... ok ([WILDCARD])
+test 8 ...
+------- output -------
+console.log
+----- output end -----
+test 8 ... ok ([WILDCARD])
+test 9 ...
+------- output -------
+console.error
+----- output end -----
+test 9 ... ok ([WILDCARD])
+test\b ...
+------- output -------
+console.error
+----- output end -----
+test\b ... ok ([WILDCARD])
+test\f ...
+------- output -------
+console.error
+----- output end -----
+test\f ... ok ([WILDCARD])
+test\t ...
+------- output -------
+console.error
+----- output end -----
+test\t ... ok ([WILDCARD])
+test\n ...
+------- output -------
+console.error
+----- output end -----
+test\n ... ok ([WILDCARD])
+test\r ...
+------- output -------
+console.error
+----- output end -----
+test\r ... ok ([WILDCARD])
+test\v ...
+------- output -------
+console.error
+----- output end -----
+test\v ... ok ([WILDCARD])
+
+ok | 16 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/pass.ts b/tests/testdata/test/pass.ts
new file mode 100644
index 000000000..c4c0f45dc
--- /dev/null
+++ b/tests/testdata/test/pass.ts
@@ -0,0 +1,37 @@
+Deno.test("test 0", () => {});
+Deno.test("test 1", () => {});
+Deno.test("test 2", () => {});
+Deno.test("test 3", () => {});
+Deno.test("test 4", () => {});
+Deno.test("test 5", () => {});
+Deno.test("test 6", () => {});
+Deno.test("test 7", () => {});
+Deno.test("test 8", () => {
+ console.log("console.log");
+});
+Deno.test("test 9", () => {
+ console.error("console.error");
+});
+
+Deno.test("test\b", () => {
+ console.error("console.error");
+});
+Deno.test("test\f", () => {
+ console.error("console.error");
+});
+
+Deno.test("test\t", () => {
+ console.error("console.error");
+});
+
+Deno.test("test\n", () => {
+ console.error("console.error");
+});
+
+Deno.test("test\r", () => {
+ console.error("console.error");
+});
+
+Deno.test("test\v", () => {
+ console.error("console.error");
+});
diff --git a/tests/testdata/test/quiet.out b/tests/testdata/test/quiet.out
new file mode 100644
index 000000000..83dbe6ba9
--- /dev/null
+++ b/tests/testdata/test/quiet.out
@@ -0,0 +1,8 @@
+running 4 tests from ./test/quiet.ts
+console.log ... ok ([WILDCARD])
+console.error ... ok ([WILDCARD])
+console.info ... ok ([WILDCARD])
+console.warn ... ok ([WILDCARD])
+
+ok | 4 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/quiet.ts b/tests/testdata/test/quiet.ts
new file mode 100644
index 000000000..f40805bfb
--- /dev/null
+++ b/tests/testdata/test/quiet.ts
@@ -0,0 +1,15 @@
+Deno.test("console.log", function () {
+ console.log("log");
+});
+
+Deno.test("console.error", function () {
+ console.error("error");
+});
+
+Deno.test("console.info", function () {
+ console.info("info");
+});
+
+Deno.test("console.warn", function () {
+ console.info("warn");
+});
diff --git a/tests/testdata/test/recursive_permissions_pledge.js b/tests/testdata/test/recursive_permissions_pledge.js
new file mode 100644
index 000000000..9bf320c37
--- /dev/null
+++ b/tests/testdata/test/recursive_permissions_pledge.js
@@ -0,0 +1,6 @@
+Deno[Deno.internal].core.ops.op_pledge_test_permissions(
+ "none",
+);
+Deno[Deno.internal].core.ops.op_pledge_test_permissions(
+ "inherit",
+);
diff --git a/tests/testdata/test/relative_pattern_dot_slash/deno.json b/tests/testdata/test/relative_pattern_dot_slash/deno.json
new file mode 100644
index 000000000..7c2c4a5d3
--- /dev/null
+++ b/tests/testdata/test/relative_pattern_dot_slash/deno.json
@@ -0,0 +1,7 @@
+{
+ "test": {
+ "include": [
+ "./test/**/*.test.mjs"
+ ]
+ }
+}
diff --git a/tests/testdata/test/relative_pattern_dot_slash/output.out b/tests/testdata/test/relative_pattern_dot_slash/output.out
new file mode 100644
index 000000000..be2961cff
--- /dev/null
+++ b/tests/testdata/test/relative_pattern_dot_slash/output.out
@@ -0,0 +1,5 @@
+running 1 test from ./test/add.test.mjs
+should add ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/relative_pattern_dot_slash/test/add.mjs b/tests/testdata/test/relative_pattern_dot_slash/test/add.mjs
new file mode 100644
index 000000000..7d658310b
--- /dev/null
+++ b/tests/testdata/test/relative_pattern_dot_slash/test/add.mjs
@@ -0,0 +1,3 @@
+export function add(a, b) {
+ return a + b;
+}
diff --git a/tests/testdata/test/relative_pattern_dot_slash/test/add.test.mjs b/tests/testdata/test/relative_pattern_dot_slash/test/add.test.mjs
new file mode 100644
index 000000000..7b21d2fbc
--- /dev/null
+++ b/tests/testdata/test/relative_pattern_dot_slash/test/add.test.mjs
@@ -0,0 +1,7 @@
+import { add } from "./add.mjs";
+
+Deno.test("should add", () => {
+ if (add(1, 2) !== 3) {
+ throw new Error("FAIL");
+ }
+});
diff --git a/tests/testdata/test/replace_timers.js b/tests/testdata/test/replace_timers.js
new file mode 100644
index 000000000..692f1d671
--- /dev/null
+++ b/tests/testdata/test/replace_timers.js
@@ -0,0 +1,7 @@
+Deno.test("foo", async (t) => {
+ globalThis.setTimeout = () => {};
+ globalThis.clearTimeout = () => {};
+ globalThis.setInterval = () => {};
+ globalThis.clearInterval = () => {};
+ await t.step("bar", () => {});
+});
diff --git a/tests/testdata/test/replace_timers.js.out b/tests/testdata/test/replace_timers.js.out
new file mode 100644
index 000000000..81beb5ebe
--- /dev/null
+++ b/tests/testdata/test/replace_timers.js.out
@@ -0,0 +1,7 @@
+running 1 test from ./test/replace_timers.js
+foo ...
+ bar ... ok ([WILDCARD])
+foo ... ok ([WILDCARD])
+
+ok | 1 passed (1 step) | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/report_error.out b/tests/testdata/test/report_error.out
new file mode 100644
index 000000000..698550f97
--- /dev/null
+++ b/tests/testdata/test/report_error.out
@@ -0,0 +1,23 @@
+running 2 tests from [WILDCARD]/report_error.ts
+foo ...
+Uncaught error from [WILDCARD]/report_error.ts FAILED
+foo ... cancelled (0ms)
+bar ... cancelled (0ms)
+
+ ERRORS
+
+[WILDCARD]/report_error.ts (uncaught error)
+error: Error: foo
+ reportError(new Error("foo"));
+ ^
+ at [WILDCARD]/report_error.ts:2:15
+This error was not caught from a test and caused the test runner to fail on the referenced module.
+It most likely originated from a dangling promise, event/timeout handler or top-level code.
+
+ FAILURES
+
+[WILDCARD]/report_error.ts (uncaught error)
+
+FAILED | 0 passed | 3 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/report_error.ts b/tests/testdata/test/report_error.ts
new file mode 100644
index 000000000..56b6db26c
--- /dev/null
+++ b/tests/testdata/test/report_error.ts
@@ -0,0 +1,6 @@
+Deno.test("foo", () => {
+ reportError(new Error("foo"));
+ console.log(1);
+});
+
+Deno.test("bar", () => {});
diff --git a/tests/testdata/test/resource_sanitizer.out b/tests/testdata/test/resource_sanitizer.out
new file mode 100644
index 000000000..655dd2a17
--- /dev/null
+++ b/tests/testdata/test/resource_sanitizer.out
@@ -0,0 +1,20 @@
+Check [WILDCARD]/test/resource_sanitizer.ts
+running 1 test from ./test/resource_sanitizer.ts
+leak ... FAILED ([WILDCARD])
+
+ ERRORS
+
+leak => ./test/resource_sanitizer.ts:[WILDCARD]
+error: Leaking resources:
+[UNORDERED_START]
+ - The stdin pipe was opened before the test started, but was closed during the test. Do not close resources in a test that were not created during that test.
+ - A file was opened during the test, but not closed during the test. Close the file handle by calling `file.close()`.
+[UNORDERED_END]
+
+ FAILURES
+
+leak => ./test/resource_sanitizer.ts:[WILDCARD]
+
+FAILED | 0 passed | 1 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/resource_sanitizer.ts b/tests/testdata/test/resource_sanitizer.ts
new file mode 100644
index 000000000..93c9222c5
--- /dev/null
+++ b/tests/testdata/test/resource_sanitizer.ts
@@ -0,0 +1,4 @@
+Deno.test("leak", function () {
+ Deno.openSync("run/001_hello.js");
+ Deno.stdin.close();
+});
diff --git a/tests/testdata/test/short-pass-jobs-flag-warning.out b/tests/testdata/test/short-pass-jobs-flag-warning.out
new file mode 100644
index 000000000..0d9e1fd9b
--- /dev/null
+++ b/tests/testdata/test/short-pass-jobs-flag-warning.out
@@ -0,0 +1,8 @@
+⚠️ The `--jobs` flag is deprecated and will be removed in Deno 2.0.
+Use the `--parallel` flag with possibly the `DENO_JOBS` environment variable instead.
+Learn more at: https://docs.deno.com/runtime/manual/basics/env_variables
+Check [WILDCARD]/test/short-pass.ts
+./test/short-pass.ts => test ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/short-pass.out b/tests/testdata/test/short-pass.out
new file mode 100644
index 000000000..3f239de41
--- /dev/null
+++ b/tests/testdata/test/short-pass.out
@@ -0,0 +1,5 @@
+Check [WILDCARD]/test/short-pass.ts
+./test/short-pass.ts => test ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/short-pass.ts b/tests/testdata/test/short-pass.ts
new file mode 100644
index 000000000..03818ae8d
--- /dev/null
+++ b/tests/testdata/test/short-pass.ts
@@ -0,0 +1 @@
+Deno.test("test", () => {});
diff --git a/tests/testdata/test/shuffle.out b/tests/testdata/test/shuffle.out
new file mode 100644
index 000000000..9037ff518
--- /dev/null
+++ b/tests/testdata/test/shuffle.out
@@ -0,0 +1,39 @@
+Check [WILDCARD]/test/shuffle/bar_test.ts
+Check [WILDCARD]/test/shuffle/baz_test.ts
+Check [WILDCARD]/test/shuffle/foo_test.ts
+running 10 tests from [WILDCARD]/test/shuffle/foo_test.ts
+test 3 ... ok ([WILDCARD])
+test 2 ... ok ([WILDCARD])
+test 7 ... ok ([WILDCARD])
+test 5 ... ok ([WILDCARD])
+test 8 ... ok ([WILDCARD])
+test 0 ... ok ([WILDCARD])
+test 9 ... ok ([WILDCARD])
+test 4 ... ok ([WILDCARD])
+test 6 ... ok ([WILDCARD])
+test 1 ... ok ([WILDCARD])
+running 10 tests from [WILDCARD]/test/shuffle/baz_test.ts
+test 3 ... ok ([WILDCARD])
+test 2 ... ok ([WILDCARD])
+test 7 ... ok ([WILDCARD])
+test 5 ... ok ([WILDCARD])
+test 8 ... ok ([WILDCARD])
+test 0 ... ok ([WILDCARD])
+test 9 ... ok ([WILDCARD])
+test 4 ... ok ([WILDCARD])
+test 6 ... ok ([WILDCARD])
+test 1 ... ok ([WILDCARD])
+running 10 tests from [WILDCARD]/test/shuffle/bar_test.ts
+test 3 ... ok ([WILDCARD])
+test 2 ... ok ([WILDCARD])
+test 7 ... ok ([WILDCARD])
+test 5 ... ok ([WILDCARD])
+test 8 ... ok ([WILDCARD])
+test 0 ... ok ([WILDCARD])
+test 9 ... ok ([WILDCARD])
+test 4 ... ok ([WILDCARD])
+test 6 ... ok ([WILDCARD])
+test 1 ... ok ([WILDCARD])
+
+ok | 30 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/shuffle/bar_test.ts b/tests/testdata/test/shuffle/bar_test.ts
new file mode 100644
index 000000000..ca118dc0d
--- /dev/null
+++ b/tests/testdata/test/shuffle/bar_test.ts
@@ -0,0 +1,3 @@
+for (let i = 0; i < 10; i++) {
+ Deno.test(`test ${i}`, () => {});
+}
diff --git a/tests/testdata/test/shuffle/baz_test.ts b/tests/testdata/test/shuffle/baz_test.ts
new file mode 100644
index 000000000..ca118dc0d
--- /dev/null
+++ b/tests/testdata/test/shuffle/baz_test.ts
@@ -0,0 +1,3 @@
+for (let i = 0; i < 10; i++) {
+ Deno.test(`test ${i}`, () => {});
+}
diff --git a/tests/testdata/test/shuffle/foo_test.ts b/tests/testdata/test/shuffle/foo_test.ts
new file mode 100644
index 000000000..ca118dc0d
--- /dev/null
+++ b/tests/testdata/test/shuffle/foo_test.ts
@@ -0,0 +1,3 @@
+for (let i = 0; i < 10; i++) {
+ Deno.test(`test ${i}`, () => {});
+}
diff --git a/tests/testdata/test/sigint_with_hanging_test.out b/tests/testdata/test/sigint_with_hanging_test.out
new file mode 100644
index 000000000..c590c2192
--- /dev/null
+++ b/tests/testdata/test/sigint_with_hanging_test.out
@@ -0,0 +1,10 @@
+running 1 test from [WILDCARD]/hanging_test.ts
+test ...
+ step 1 ...
+ step 2 ...
+SIGINT The following tests were pending:
+
+test => [WILDCARD]/hanging_test.ts:3:6
+test ... step 1 => [WILDCARD]/hanging_test.ts:9:13
+test ... step 1 ... step 2 => [WILDCARD]/hanging_test.ts:10:15
+
diff --git a/tests/testdata/test/sigint_with_hanging_test.ts b/tests/testdata/test/sigint_with_hanging_test.ts
new file mode 100644
index 000000000..07b126e98
--- /dev/null
+++ b/tests/testdata/test/sigint_with_hanging_test.ts
@@ -0,0 +1,15 @@
+setInterval(() => {}, 10000);
+
+Deno.test({
+ name: "test",
+ sanitizeOps: false,
+ sanitizeExit: false,
+ sanitizeResources: false,
+ async fn(t) {
+ await t.step("step 1", async (t) => {
+ await t.step("step 2", async () => {
+ await new Promise(() => {});
+ });
+ });
+ },
+});
diff --git a/tests/testdata/test/steps/failing_steps.dot.out b/tests/testdata/test/steps/failing_steps.dot.out
new file mode 100644
index 000000000..f8ba8d8e6
--- /dev/null
+++ b/tests/testdata/test/steps/failing_steps.dot.out
@@ -0,0 +1,53 @@
+!
+.
+!
+!
+!
+!
+!
+!
+!
+
+ ERRORS
+
+nested failure ... step 1 ... inner 1 => ./test/steps/failing_steps.ts:[WILDCARD]
+error: Error: Failed.
+ throw new Error("Failed.");
+ ^
+ at [WILDCARD]/failing_steps.ts:[WILDCARD]
+
+multiple test step failures ... step 1 => ./test/steps/failing_steps.ts:[WILDCARD]
+error: Error: Fail.
+ throw new Error("Fail.");
+ ^
+ at [WILDCARD]/failing_steps.ts:[WILDCARD]
+
+multiple test step failures ... step 2 => ./test/steps/failing_steps.ts:[WILDCARD]
+error: Error: Fail.
+ await t.step("step 2", () => Promise.reject(new Error("Fail.")));
+ ^
+ at [WILDCARD]/failing_steps.ts:[WILDCARD]
+
+failing step in failing test ... step 1 => ./test/steps/failing_steps.ts:[WILDCARD]
+error: Error: Fail.
+ throw new Error("Fail.");
+ ^
+ at [WILDCARD]/failing_steps.ts:[WILDCARD]
+
+failing step in failing test => ./test/steps/failing_steps.ts:[WILDCARD]
+error: Error: Fail test.
+ throw new Error("Fail test.");
+ ^
+ at [WILDCARD]/failing_steps.ts:[WILDCARD]
+
+ FAILURES
+
+nested failure ... step 1 ... inner 1 => ./test/steps/failing_steps.ts:[WILDCARD]
+multiple test step failures ... step 1 => ./test/steps/failing_steps.ts:[WILDCARD]
+multiple test step failures ... step 2 => ./test/steps/failing_steps.ts:[WILDCARD]
+failing step in failing test ... step 1 => ./test/steps/failing_steps.ts:[WILDCARD]
+failing step in failing test => ./test/steps/failing_steps.ts:[WILDCARD]
+
+FAILED | 0 passed (1 step) | 3 failed (5 steps) ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/steps/failing_steps.out b/tests/testdata/test/steps/failing_steps.out
new file mode 100644
index 000000000..4b717f5cc
--- /dev/null
+++ b/tests/testdata/test/steps/failing_steps.out
@@ -0,0 +1,59 @@
+[WILDCARD]
+running 3 tests from ./test/steps/failing_steps.ts
+nested failure ...
+ step 1 ...
+ inner 1 ... FAILED ([WILDCARD])
+ inner 2 ... ok ([WILDCARD])
+ step 1 ... FAILED (due to 1 failed step) ([WILDCARD])
+nested failure ... FAILED (due to 1 failed step) ([WILDCARD])
+multiple test step failures ...
+ step 1 ... FAILED ([WILDCARD])
+ step 2 ... FAILED ([WILDCARD])
+multiple test step failures ... FAILED (due to 2 failed steps) ([WILDCARD])
+failing step in failing test ...
+ step 1 ... FAILED ([WILDCARD])
+failing step in failing test ... FAILED ([WILDCARD])
+
+ ERRORS
+
+nested failure ... step 1 ... inner 1 => ./test/steps/failing_steps.ts:[WILDCARD]
+error: Error: Failed.
+ throw new Error("Failed.");
+ ^
+ at [WILDCARD]/failing_steps.ts:[WILDCARD]
+
+multiple test step failures ... step 1 => ./test/steps/failing_steps.ts:[WILDCARD]
+error: Error: Fail.
+ throw new Error("Fail.");
+ ^
+ at [WILDCARD]/failing_steps.ts:[WILDCARD]
+
+multiple test step failures ... step 2 => ./test/steps/failing_steps.ts:[WILDCARD]
+error: Error: Fail.
+ await t.step("step 2", () => Promise.reject(new Error("Fail.")));
+ ^
+ at [WILDCARD]/failing_steps.ts:[WILDCARD]
+
+failing step in failing test ... step 1 => ./test/steps/failing_steps.ts:[WILDCARD]
+error: Error: Fail.
+ throw new Error("Fail.");
+ ^
+ at [WILDCARD]/failing_steps.ts:[WILDCARD]
+
+failing step in failing test => ./test/steps/failing_steps.ts:[WILDCARD]
+error: Error: Fail test.
+ throw new Error("Fail test.");
+ ^
+ at [WILDCARD]/failing_steps.ts:[WILDCARD]
+
+ FAILURES
+
+nested failure ... step 1 ... inner 1 => ./test/steps/failing_steps.ts:[WILDCARD]
+multiple test step failures ... step 1 => ./test/steps/failing_steps.ts:[WILDCARD]
+multiple test step failures ... step 2 => ./test/steps/failing_steps.ts:[WILDCARD]
+failing step in failing test ... step 1 => ./test/steps/failing_steps.ts:[WILDCARD]
+failing step in failing test => ./test/steps/failing_steps.ts:[WILDCARD]
+
+FAILED | 0 passed (1 step) | 3 failed (5 steps) ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/steps/failing_steps.tap.out b/tests/testdata/test/steps/failing_steps.tap.out
new file mode 100644
index 000000000..11b289f08
--- /dev/null
+++ b/tests/testdata/test/steps/failing_steps.tap.out
@@ -0,0 +1,43 @@
+TAP version 14
+# ./test/steps/failing_steps.ts
+# Subtest: nested failure
+ not ok 1 - inner 1
+ ---
+ {"message":"Error: Failed.\n throw new Error(\"Failed.\");\n ^\n at [WILDCARD]/failing_steps.ts:[WILDCARD]\n[WILDCARD]","severity":"fail","at":{"file":"./test/steps/failing_steps.ts","line":[WILDCARD]}}
+ ...
+ ok 2 - inner 2
+ not ok 3 - step 1
+ ---
+ {"message":"1 test step failed.","severity":"fail","at":{"file":"./test/steps/failing_steps.ts","line":[WILDCARD]}}
+ ...
+ 1..3
+not ok 1 - nested failure
+ ---
+ {"message":"1 test step failed.","severity":"fail","at":{"file":"./test/steps/failing_steps.ts","line":[WILDCARD]}}
+ ...
+# Subtest: multiple test step failures
+ not ok 1 - step 1
+ ---
+ {"message":"Error: Fail.\n throw new Error(\"Fail.\");\n ^\n at [WILDCARD]/failing_steps.ts:[WILDCARD]\n[WILDCARD]","severity":"fail","at":{"file":"./test/steps/failing_steps.ts","line":[WILDCARD]}}
+ ...
+ not ok 2 - step 2
+ ---
+ {"message":"Error: Fail.\n await t.step(\"step 2\", () => Promise.reject(new Error(\"Fail.\")));\n ^\n at [WILDCARD]/failing_steps.ts:[WILDCARD]\n[WILDCARD]","severity":"fail","at":{"file":"./test/steps/failing_steps.ts","line":[WILDCARD]}}
+ ...
+ 1..2
+not ok 2 - multiple test step failures
+ ---
+ {"message":"2 test steps failed.","severity":"fail","at":{"file":"./test/steps/failing_steps.ts","line":[WILDCARD]}}
+ ...
+# Subtest: failing step in failing test
+ not ok 1 - step 1
+ ---
+ {"message":"Error: Fail.\n throw new Error(\"Fail.\");\n ^\n at [WILDCARD]/failing_steps.ts:[WILDCARD]\n[WILDCARD]","severity":"fail","at":{"file":"./test/steps/failing_steps.ts","line":[WILDCARD]}}
+ ...
+ 1..1
+not ok 3 - failing step in failing test
+ ---
+ {"message":"Error: Fail test.\n throw new Error(\"Fail test.\");\n ^\n at [WILDCARD]/failing_steps.ts:[WILDCARD]","severity":"fail","at":{"file":"./test/steps/failing_steps.ts","line":[WILDCARD]}}
+ ...
+1..3
+error: Test failed
diff --git a/tests/testdata/test/steps/failing_steps.ts b/tests/testdata/test/steps/failing_steps.ts
new file mode 100644
index 000000000..efa18d54e
--- /dev/null
+++ b/tests/testdata/test/steps/failing_steps.ts
@@ -0,0 +1,27 @@
+Deno.test("nested failure", async (t) => {
+ const success = await t.step("step 1", async (t) => {
+ let success = await t.step("inner 1", () => {
+ throw new Error("Failed.");
+ });
+ if (success) throw new Error("Expected failure");
+
+ success = await t.step("inner 2", () => {});
+ if (!success) throw new Error("Expected success");
+ });
+
+ if (success) throw new Error("Expected failure");
+});
+
+Deno.test("multiple test step failures", async (t) => {
+ await t.step("step 1", () => {
+ throw new Error("Fail.");
+ });
+ await t.step("step 2", () => Promise.reject(new Error("Fail.")));
+});
+
+Deno.test("failing step in failing test", async (t) => {
+ await t.step("step 1", () => {
+ throw new Error("Fail.");
+ });
+ throw new Error("Fail test.");
+});
diff --git a/tests/testdata/test/steps/ignored_steps.dot.out b/tests/testdata/test/steps/ignored_steps.dot.out
new file mode 100644
index 000000000..442a06c62
--- /dev/null
+++ b/tests/testdata/test/steps/ignored_steps.dot.out
@@ -0,0 +1,5 @@
+,
+.
+.
+
+ok | 1 passed (1 step) | 0 failed | 0 ignored (1 step) [WILDCARD]
diff --git a/tests/testdata/test/steps/ignored_steps.out b/tests/testdata/test/steps/ignored_steps.out
new file mode 100644
index 000000000..2786e1e1a
--- /dev/null
+++ b/tests/testdata/test/steps/ignored_steps.out
@@ -0,0 +1,8 @@
+[WILDCARD]
+running 1 test from ./test/steps/ignored_steps.ts
+ignored step ...
+ step 1 ... ignored ([WILDCARD])
+ step 2 ... ok ([WILDCARD])
+ignored step ... ok ([WILDCARD])
+
+ok | 1 passed (1 step) | 0 failed | 0 ignored (1 step) [WILDCARD]
diff --git a/tests/testdata/test/steps/ignored_steps.tap.out b/tests/testdata/test/steps/ignored_steps.tap.out
new file mode 100644
index 000000000..b2b2f5070
--- /dev/null
+++ b/tests/testdata/test/steps/ignored_steps.tap.out
@@ -0,0 +1,8 @@
+TAP version 14
+# ./test/steps/ignored_steps.ts
+# Subtest: ignored step
+ ok 1 - step 1 # SKIP
+ ok 2 - step 2
+ 1..2
+ok 1 - ignored step
+1..1
diff --git a/tests/testdata/test/steps/ignored_steps.ts b/tests/testdata/test/steps/ignored_steps.ts
new file mode 100644
index 000000000..102b481fb
--- /dev/null
+++ b/tests/testdata/test/steps/ignored_steps.ts
@@ -0,0 +1,16 @@
+Deno.test("ignored step", async (t) => {
+ let result = await t.step({
+ name: "step 1",
+ ignore: true,
+ fn: () => {
+ throw new Error("Fail.");
+ },
+ });
+ if (result !== false) throw new Error("Expected false.");
+ result = await t.step({
+ name: "step 2",
+ ignore: false,
+ fn: () => {},
+ });
+ if (result !== true) throw new Error("Expected true.");
+});
diff --git a/tests/testdata/test/steps/invalid_usage.out b/tests/testdata/test/steps/invalid_usage.out
new file mode 100644
index 000000000..4b82befae
--- /dev/null
+++ b/tests/testdata/test/steps/invalid_usage.out
@@ -0,0 +1,82 @@
+[WILDCARD]
+running 7 tests from ./test/steps/invalid_usage.ts
+capturing ...
+ some step ... ok ([WILDCARD])
+capturing ... FAILED ([WILDCARD])
+top level missing await ...
+ step ... INCOMPLETE
+top level missing await ... FAILED (due to incomplete steps) ([WILDCARD])
+inner missing await ...
+ step ...
+ inner ... INCOMPLETE
+ step ... FAILED (due to incomplete steps) ([WILDCARD])
+inner missing await ... FAILED (due to 1 failed step) ([WILDCARD])
+parallel steps with sanitizers ...
+ step 1 ... INCOMPLETE
+ step 2 ... FAILED ([WILDCARD])
+parallel steps with sanitizers ... FAILED (due to incomplete steps) ([WILDCARD])
+parallel steps when first has sanitizer ...
+ step 1 ... ok ([WILDCARD])
+ step 2 ... FAILED ([WILDCARD])
+parallel steps when first has sanitizer ... FAILED (due to 1 failed step) ([WILDCARD])
+parallel steps when second has sanitizer ...
+ step 1 ... ok ([WILDCARD])
+ step 2 ... FAILED ([WILDCARD])
+parallel steps when second has sanitizer ... FAILED (due to 1 failed step) ([WILDCARD])
+parallel steps where only inner tests have sanitizers ...
+ step 1 ...
+ step inner ... ok ([WILDCARD])
+ step 1 ... ok ([WILDCARD])
+ step 2 ...
+ step inner ... FAILED ([WILDCARD])
+ step 2 ... FAILED (due to 1 failed step) ([WILDCARD])
+parallel steps where only inner tests have sanitizers ... FAILED (due to 1 failed step) ([WILDCARD])
+
+ ERRORS
+
+capturing => ./test/steps/invalid_usage.ts:[WILDCARD]
+error: Error: Cannot run test step after parent scope has finished execution. Ensure any `.step(...)` calls are executed before their parent scope completes execution.
+ await capturedContext.step("next step", () => {});
+ ^
+ at TestContext.step ([WILDCARD])
+ at [WILDCARD]/invalid_usage.ts:[WILDCARD]
+
+top level missing await ... step => ./test/steps/invalid_usage.ts:[WILDCARD]
+error: Didn't complete before parent. Await step with `await t.step(...)`.
+
+inner missing await ... step ... inner => ./test/steps/invalid_usage.ts:[WILDCARD]
+error: Didn't complete before parent. Await step with `await t.step(...)`.
+
+parallel steps with sanitizers ... step 2 => ./test/steps/invalid_usage.ts:[WILDCARD]
+error: Started test step while another test step with sanitizers was running:
+ * parallel steps with sanitizers ... step 1
+
+parallel steps with sanitizers ... step 1 => ./test/steps/invalid_usage.ts:[WILDCARD]
+error: Didn't complete before parent. Await step with `await t.step(...)`.
+
+parallel steps when first has sanitizer ... step 2 => ./test/steps/invalid_usage.ts:[WILDCARD]
+error: Started test step while another test step with sanitizers was running:
+ * parallel steps when first has sanitizer ... step 1
+
+parallel steps when second has sanitizer ... step 2 => ./test/steps/invalid_usage.ts:[WILDCARD]
+error: Started test step with sanitizers while another test step was running:
+ * parallel steps when second has sanitizer ... step 1
+
+parallel steps where only inner tests have sanitizers ... step 2 ... step inner => ./test/steps/invalid_usage.ts:[WILDCARD]
+error: Started test step with sanitizers while another test step was running:
+ * parallel steps where only inner tests have sanitizers ... step 1
+
+ FAILURES
+
+capturing => ./test/steps/invalid_usage.ts:1:6
+top level missing await ... step => ./test/steps/invalid_usage.ts:[WILDCARD]
+inner missing await ... step ... inner => ./test/steps/invalid_usage.ts:[WILDCARD]
+parallel steps with sanitizers ... step 2 => ./test/steps/invalid_usage.ts:[WILDCARD]
+parallel steps with sanitizers ... step 1 => ./test/steps/invalid_usage.ts:[WILDCARD]
+parallel steps when first has sanitizer ... step 2 => ./test/steps/invalid_usage.ts:[WILDCARD]
+parallel steps when second has sanitizer ... step 2 => ./test/steps/invalid_usage.ts:[WILDCARD]
+parallel steps where only inner tests have sanitizers ... step 2 ... step inner => ./test/steps/invalid_usage.ts:[WILDCARD]
+
+FAILED | 0 passed (5 steps) | 7 failed (9 steps) ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/steps/invalid_usage.ts b/tests/testdata/test/steps/invalid_usage.ts
new file mode 100644
index 000000000..1acfc874c
--- /dev/null
+++ b/tests/testdata/test/steps/invalid_usage.ts
@@ -0,0 +1,118 @@
+Deno.test("capturing", async (t) => {
+ let capturedContext!: Deno.TestContext;
+ await t.step("some step", (t) => {
+ capturedContext = t;
+ });
+ // this should error because the scope of the tester has already completed
+ await capturedContext.step("next step", () => {});
+});
+
+Deno.test("top level missing await", (t) => {
+ t.step("step", () => {
+ return new Promise(() => {});
+ });
+});
+
+Deno.test({
+ name: "inner missing await",
+ fn: async (t) => {
+ await t.step("step", (t) => {
+ t.step("inner", () => {
+ return new Promise((resolve) => setTimeout(resolve, 10));
+ });
+ });
+ await new Promise((resolve) => setTimeout(resolve, 10));
+ },
+ sanitizeResources: false,
+ sanitizeOps: false,
+ sanitizeExit: false,
+});
+
+Deno.test("parallel steps with sanitizers", async (t) => {
+ // not allowed because steps with sanitizers cannot be run in parallel
+ const step1Entered = Promise.withResolvers<void>();
+ const testFinished = Promise.withResolvers<void>();
+ t.step("step 1", async () => {
+ step1Entered.resolve();
+ await testFinished.promise;
+ });
+ await step1Entered.promise;
+ await t.step("step 2", () => {});
+});
+
+Deno.test("parallel steps when first has sanitizer", async (t) => {
+ const step1Entered = Promise.withResolvers<void>();
+ const step2Finished = Promise.withResolvers<void>();
+ const step1 = t.step({
+ name: "step 1",
+ fn: async () => {
+ step1Entered.resolve();
+ await step2Finished.promise;
+ },
+ });
+ await step1Entered.promise;
+ await t.step({
+ name: "step 2",
+ fn: () => {},
+ sanitizeOps: false,
+ sanitizeResources: false,
+ sanitizeExit: false,
+ });
+ step2Finished.resolve();
+ await step1;
+});
+
+Deno.test("parallel steps when second has sanitizer", async (t) => {
+ const step1Entered = Promise.withResolvers<void>();
+ const step2Finished = Promise.withResolvers<void>();
+ const step1 = t.step({
+ name: "step 1",
+ fn: async () => {
+ step1Entered.resolve();
+ await step2Finished.promise;
+ },
+ sanitizeOps: false,
+ sanitizeResources: false,
+ sanitizeExit: false,
+ });
+ await step1Entered.promise;
+ await t.step({
+ name: "step 2",
+ fn: async () => {
+ await new Promise((resolve) => setTimeout(resolve, 100));
+ },
+ });
+ step2Finished.resolve();
+ await step1;
+});
+
+Deno.test({
+ name: "parallel steps where only inner tests have sanitizers",
+ fn: async (t) => {
+ const step1Entered = Promise.withResolvers<void>();
+ const step2Finished = Promise.withResolvers<void>();
+ const step1 = t.step("step 1", async (t) => {
+ await t.step({
+ name: "step inner",
+ fn: async () => {
+ step1Entered.resolve();
+ await step2Finished.promise;
+ },
+ sanitizeOps: true,
+ });
+ });
+ await step1Entered.promise;
+ await t.step("step 2", async (t) => {
+ await t.step({
+ name: "step inner",
+ fn: () => {},
+ sanitizeOps: true,
+ });
+ });
+ step2Finished.resolve();
+ await step1;
+ },
+ sanitizeResources: false,
+ sanitizeOps: false,
+ sanitizeExit: false,
+});
diff --git a/tests/testdata/test/steps/output_within.out b/tests/testdata/test/steps/output_within.out
new file mode 100644
index 000000000..d58722daa
--- /dev/null
+++ b/tests/testdata/test/steps/output_within.out
@@ -0,0 +1,29 @@
+[WILDCARD]
+running 1 test from ./test/steps/output_within.ts
+description ...
+------- output -------
+1
+----- output end -----
+ step 1 ...
+------- output -------
+2
+----- output end -----
+ inner 1 ...
+------- output -------
+3
+----- output end -----
+ inner 1 ... ok ([WILDCARD]s)
+ inner 2 ...
+------- output -------
+4
+----- output end -----
+ inner 2 ... ok ([WILDCARD]s)
+------- output -------
+5
+----- output end -----
+ step 1 ... ok ([WILDCARD]s)
+------- output -------
+6
+----- output end -----
+description ... ok ([WILDCARD]s)
+[WILDCARD]
diff --git a/tests/testdata/test/steps/output_within.ts b/tests/testdata/test/steps/output_within.ts
new file mode 100644
index 000000000..d3438a8ad
--- /dev/null
+++ b/tests/testdata/test/steps/output_within.ts
@@ -0,0 +1,15 @@
+Deno.test("description", async (t) => {
+ // the output is not great, but this is an extreme scenario
+ console.log(1);
+ await t.step("step 1", async (t) => {
+ console.log(2);
+ await t.step("inner 1", () => {
+ console.log(3);
+ });
+ await t.step("inner 2", () => {
+ console.log(4);
+ });
+ console.log(5);
+ });
+ console.log(6);
+});
diff --git a/tests/testdata/test/steps/passing_steps.dot.out b/tests/testdata/test/steps/passing_steps.dot.out
new file mode 100644
index 000000000..243cacd69
--- /dev/null
+++ b/tests/testdata/test/steps/passing_steps.dot.out
@@ -0,0 +1,17 @@
+[WILDCARD]
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+
+ok | 6 passed (21 steps) | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/steps/passing_steps.out b/tests/testdata/test/steps/passing_steps.out
new file mode 100644
index 000000000..0757a4ed3
--- /dev/null
+++ b/tests/testdata/test/steps/passing_steps.out
@@ -0,0 +1,44 @@
+[WILDCARD]
+running 6 tests from ./test/steps/passing_steps.ts
+description ...
+ step 1 ...
+ inner 1 ... ok ([WILDCARD]s)
+ inner 2 ... ok ([WILDCARD]s)
+ step 1 ... ok ([WILDCARD]s)
+description ... ok ([WILDCARD]s)
+description function as first arg ...
+ step1 ...
+ inner1 ... ok ([WILDCARD]s)
+ inner1 ... ok ([WILDCARD]s)
+ step1 ... ok ([WILDCARD]s)
+description function as first arg ... ok ([WILDCARD]s)
+parallel steps without sanitizers ...
+ step 1 ... ok ([WILDCARD])
+ step 2 ... ok ([WILDCARD])
+parallel steps without sanitizers ... ok ([WILDCARD])
+parallel steps without sanitizers due to parent ...
+ step 1 ... ok ([WILDCARD])
+ step 2 ... ok ([WILDCARD])
+parallel steps without sanitizers due to parent ... ok ([WILDCARD])
+steps with disabled sanitizers, then enabled, then parallel disabled ...
+ step 1 ...
+ step 1 ...
+ step 1 ...
+ step 1 ... ok ([WILDCARD])
+ step 1 ... ok ([WILDCARD])
+ step 1 ... ok ([WILDCARD])
+ step 2 ... ok ([WILDCARD])
+ step 1 ... ok ([WILDCARD])
+ step 1 ... ok ([WILDCARD])
+steps with disabled sanitizers, then enabled, then parallel disabled ... ok ([WILDCARD])
+steps buffered then streaming reporting ...
+ step 1 ...
+ step 1 - 1 ... ok ([WILDCARD])
+ step 1 - 2 ...
+ step 1 - 2 - 1 ... ok ([WILDCARD])
+ step 1 - 2 ... ok ([WILDCARD])
+ step 1 ... ok ([WILDCARD])
+ step 2 ... ok ([WILDCARD])
+steps buffered then streaming reporting ... ok ([WILDCARD])
+
+ok | 6 passed (21 steps) | 0 failed [WILDCARD]
diff --git a/tests/testdata/test/steps/passing_steps.tap.out b/tests/testdata/test/steps/passing_steps.tap.out
new file mode 100644
index 000000000..20a9fa312
--- /dev/null
+++ b/tests/testdata/test/steps/passing_steps.tap.out
@@ -0,0 +1,42 @@
+TAP version 14
+# ./test/steps/passing_steps.ts
+# Subtest: description
+ ok 1 - inner 1
+ ok 2 - inner 2
+ ok 3 - step 1
+ 1..3
+ok 1 - description
+# Subtest: description function as first arg
+ ok 1 - inner1
+ ok 2 - inner1
+ ok 3 - step1
+ 1..3
+ok 2 - description function as first arg
+# Subtest: parallel steps without sanitizers
+ ok 1 - step 1
+ ok 2 - step 2
+ 1..2
+ok 3 - parallel steps without sanitizers
+# Subtest: parallel steps without sanitizers due to parent
+ ok 1 - step 1
+ ok 2 - step 2
+ 1..2
+ok 4 - parallel steps without sanitizers due to parent
+# Subtest: steps with disabled sanitizers, then enabled, then parallel disabled
+ ok 1 - step 2
+ ok 2 - step 1
+ ok 3 - step 1
+ ok 4 - step 1
+ ok 5 - step 1
+ ok 6 - step 1
+ 1..6
+ok 5 - steps with disabled sanitizers, then enabled, then parallel disabled
+# Subtest: steps buffered then streaming reporting
+ ok 1 - step 1 - 2 - 1
+ ok 2 - step 1 - 2
+ ok 3 - step 1 - 1
+ ok 4 - step 1
+ ok 5 - step 2
+ 1..5
+ok 6 - steps buffered then streaming reporting
+1..6
diff --git a/tests/testdata/test/steps/passing_steps.ts b/tests/testdata/test/steps/passing_steps.ts
new file mode 100644
index 000000000..fd145954b
--- /dev/null
+++ b/tests/testdata/test/steps/passing_steps.ts
@@ -0,0 +1,127 @@
+Deno.test("description", async (t) => {
+ const success = await t.step("step 1", async (t) => {
+ await t.step("inner 1", () => {});
+ await t.step("inner 2", () => {});
+ });
+
+ if (!success) throw new Error("Expected the step to return true.");
+});
+
+Deno.test("description function as first arg", async (t) => {
+ const success = await t.step(async function step1(t) {
+ await t.step(function inner1() {});
+ await t.step(function inner1() {});
+ });
+
+ if (!success) throw new Error("Expected the step to return true.");
+});
+
+Deno.test("parallel steps without sanitizers", async (t) => {
+ // allowed
+ await Promise.all([
+ t.step({
+ name: "step 1",
+ fn: async () => {
+ await new Promise((resolve) => setTimeout(resolve, 10));
+ },
+ sanitizeOps: false,
+ sanitizeResources: false,
+ sanitizeExit: false,
+ }),
+ t.step({
+ name: "step 2",
+ fn: async () => {
+ await new Promise((resolve) => setTimeout(resolve, 10));
+ },
+ sanitizeOps: false,
+ sanitizeResources: false,
+ sanitizeExit: false,
+ }),
+ ]);
+});
+
+Deno.test({
+ name: "parallel steps without sanitizers due to parent",
+ fn: async (t) => {
+ // allowed because parent disabled the sanitizers
+ await Promise.all([
+ t.step("step 1", async () => {
+ await new Promise((resolve) => setTimeout(resolve, 10));
+ }),
+ t.step("step 2", async () => {
+ await new Promise((resolve) => setTimeout(resolve, 10));
+ }),
+ ]);
+ },
+ sanitizeResources: false,
+ sanitizeOps: false,
+ sanitizeExit: false,
+});
+
+Deno.test({
+ name: "steps with disabled sanitizers, then enabled, then parallel disabled",
+ fn: async (t) => {
+ await t.step("step 1", async (t) => {
+ await t.step({
+ name: "step 1",
+ fn: async (t) => {
+ await Promise.all([
+ t.step({
+ name: "step 1",
+ fn: async (t) => {
+ await new Promise((resolve) => setTimeout(resolve, 10));
+ await Promise.all([
+ t.step("step 1", () => {}),
+ t.step("step 1", () => {}),
+ ]);
+ },
+ sanitizeExit: false,
+ sanitizeResources: false,
+ sanitizeOps: false,
+ }),
+ t.step({
+ name: "step 2",
+ fn: () => {},
+ sanitizeResources: false,
+ sanitizeOps: false,
+ sanitizeExit: false,
+ }),
+ ]);
+ },
+ sanitizeResources: true,
+ sanitizeOps: true,
+ sanitizeExit: true,
+ });
+ });
+ },
+ sanitizeResources: false,
+ sanitizeOps: false,
+ sanitizeExit: false,
+});
+
+Deno.test("steps buffered then streaming reporting", async (t) => {
+ // no sanitizers so this will be buffered
+ await t.step({
+ name: "step 1",
+ fn: async (t) => {
+ // also ensure the buffered tests display in order regardless of the second one finishing first
+ const step2Finished = Promise.withResolvers<void>();
+ const step1 = t.step("step 1 - 1", async () => {
+ await step2Finished.promise;
+ });
+ const step2 = t.step("step 1 - 2", async (t) => {
+ await t.step("step 1 - 2 - 1", () => {});
+ });
+ await step2;
+ step2Finished.resolve();
+ await step1;
+ },
+ sanitizeResources: false,
+ sanitizeOps: false,
+ sanitizeExit: false,
+ });
+
+ // now this will start streaming and we want to
+ // ensure it flushes the buffer of the last test
+ await t.step("step 2", async () => {});
+});
diff --git a/tests/testdata/test/text.md b/tests/testdata/test/text.md
new file mode 100644
index 000000000..be89d24bf
--- /dev/null
+++ b/tests/testdata/test/text.md
@@ -0,0 +1 @@
+This fixture contains no actual tests.
diff --git a/tests/testdata/test/text.out b/tests/testdata/test/text.out
new file mode 100644
index 000000000..f1b7f7d01
--- /dev/null
+++ b/tests/testdata/test/text.out
@@ -0,0 +1,3 @@
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/trace_ops_caught_error/main.out b/tests/testdata/test/trace_ops_caught_error/main.out
new file mode 100644
index 000000000..192ed3a6d
--- /dev/null
+++ b/tests/testdata/test/trace_ops_caught_error/main.out
@@ -0,0 +1,6 @@
+Check file:///[WILDCARD]/trace_ops_caught_error/main.ts
+running 1 test from ./test/trace_ops_caught_error/main.ts
+handle thrown error in async function ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/trace_ops_caught_error/main.ts b/tests/testdata/test/trace_ops_caught_error/main.ts
new file mode 100644
index 000000000..8194a8b2a
--- /dev/null
+++ b/tests/testdata/test/trace_ops_caught_error/main.ts
@@ -0,0 +1,12 @@
+Deno.test("handle thrown error in async function", async () => {
+ const dirPath = Deno.makeTempDirSync();
+ const filePath = `${dirPath}/file.txt`;
+ try {
+ await Deno.stat(filePath);
+ } catch {
+ await Deno.writeTextFile(filePath, "");
+ } finally {
+ await Deno.remove(filePath);
+ await Deno.remove(dirPath);
+ }
+});
diff --git a/tests/testdata/test/uncaught_errors.out b/tests/testdata/test/uncaught_errors.out
new file mode 100644
index 000000000..a52f95d57
--- /dev/null
+++ b/tests/testdata/test/uncaught_errors.out
@@ -0,0 +1,59 @@
+running 3 tests from ./test/uncaught_errors_1.ts
+foo 1 ... FAILED ([WILDCARD])
+foo 2 ... ok ([WILDCARD])
+foo 3 ...
+Uncaught error from ./test/uncaught_errors_1.ts FAILED
+foo 3 ... cancelled (0ms)
+running 3 tests from ./test/uncaught_errors_2.ts
+bar 1 ... ok ([WILDCARD])
+bar 2 ... FAILED ([WILDCARD])
+bar 3 ... FAILED ([WILDCARD])
+Uncaught error from ./test/uncaught_errors_3.ts FAILED
+
+ ERRORS
+
+foo 1 => ./test/uncaught_errors_1.ts:1:6
+error: Error: foo 1 message
+ throw new Error("foo 1 message");
+ ^
+ at [WILDCARD]/test/uncaught_errors_1.ts:2:9
+
+./test/uncaught_errors_1.ts (uncaught error)
+error: (in promise) Error: foo 3 message
+ Promise.reject(new Error("foo 3 message"));
+ ^
+ at [WILDCARD]/test/uncaught_errors_1.ts:8:18
+This error was not caught from a test and caused the test runner to fail on the referenced module.
+It most likely originated from a dangling promise, event/timeout handler or top-level code.
+
+bar 2 => ./test/uncaught_errors_2.ts:3:6
+error: Error: bar 2
+ throw new Error("bar 2");
+ ^
+ at [WILDCARD]/test/uncaught_errors_2.ts:4:9
+
+bar 3 => ./test/uncaught_errors_2.ts:6:6
+error: Error: bar 3 message
+ throw new Error("bar 3 message");
+ ^
+ at [WILDCARD]/test/uncaught_errors_2.ts:7:9
+
+./test/uncaught_errors_3.ts (uncaught error)
+error: (in promise) Error: baz
+throw new Error("baz");
+ ^
+ at [WILDCARD]/test/uncaught_errors_3.ts:1:7
+This error was not caught from a test and caused the test runner to fail on the referenced module.
+It most likely originated from a dangling promise, event/timeout handler or top-level code.
+
+ FAILURES
+
+foo 1 => ./test/uncaught_errors_1.ts:1:6
+./test/uncaught_errors_1.ts (uncaught error)
+bar 2 => ./test/uncaught_errors_2.ts:3:6
+bar 3 => ./test/uncaught_errors_2.ts:6:6
+./test/uncaught_errors_3.ts (uncaught error)
+
+FAILED | 2 passed | 6 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/uncaught_errors_1.ts b/tests/testdata/test/uncaught_errors_1.ts
new file mode 100644
index 000000000..166b23ac3
--- /dev/null
+++ b/tests/testdata/test/uncaught_errors_1.ts
@@ -0,0 +1,9 @@
+Deno.test("foo 1", () => {
+ throw new Error("foo 1 message");
+});
+
+Deno.test("foo 2", () => {});
+
+Deno.test("foo 3", () => {
+ Promise.reject(new Error("foo 3 message"));
+});
diff --git a/tests/testdata/test/uncaught_errors_2.ts b/tests/testdata/test/uncaught_errors_2.ts
new file mode 100644
index 000000000..8cafbe291
--- /dev/null
+++ b/tests/testdata/test/uncaught_errors_2.ts
@@ -0,0 +1,8 @@
+Deno.test("bar 1", () => {});
+
+Deno.test("bar 2", () => {
+ throw new Error("bar 2");
+});
+Deno.test("bar 3", () => {
+ throw new Error("bar 3 message");
+});
diff --git a/tests/testdata/test/uncaught_errors_3.ts b/tests/testdata/test/uncaught_errors_3.ts
new file mode 100644
index 000000000..cb2a55036
--- /dev/null
+++ b/tests/testdata/test/uncaught_errors_3.ts
@@ -0,0 +1 @@
+throw new Error("baz");
diff --git a/tests/testdata/test/unhandled_rejection.out b/tests/testdata/test/unhandled_rejection.out
new file mode 100644
index 000000000..bc8387929
--- /dev/null
+++ b/tests/testdata/test/unhandled_rejection.out
@@ -0,0 +1,22 @@
+Check [WILDCARD]/test/unhandled_rejection.ts
+Uncaught error from ./test/unhandled_rejection.ts FAILED
+
+ ERRORS
+
+./test/unhandled_rejection.ts (uncaught error)
+error: (in promise) Error: rejection
+ reject(new Error("rejection"));
+ ^
+ at [WILDCARD]/test/unhandled_rejection.ts:2:10
+ at new Promise (<anonymous>)
+ at [WILDCARD]/test/unhandled_rejection.ts:1:1
+This error was not caught from a test and caused the test runner to fail on the referenced module.
+It most likely originated from a dangling promise, event/timeout handler or top-level code.
+
+ FAILURES
+
+./test/unhandled_rejection.ts (uncaught error)
+
+FAILED | 0 passed | 1 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/unhandled_rejection.ts b/tests/testdata/test/unhandled_rejection.ts
new file mode 100644
index 000000000..32f3111ea
--- /dev/null
+++ b/tests/testdata/test/unhandled_rejection.ts
@@ -0,0 +1,3 @@
+new Promise((_resolve, reject) => {
+ reject(new Error("rejection"));
+});
diff --git a/tests/testdata/test/unresolved_promise.out b/tests/testdata/test/unresolved_promise.out
new file mode 100644
index 000000000..88535e171
--- /dev/null
+++ b/tests/testdata/test/unresolved_promise.out
@@ -0,0 +1,10 @@
+[WILDCARD]
+./test/unresolved_promise.ts (uncaught error)
+error: Top-level await promise never resolved
+await new Promise((_resolve, _reject) => {});
+^
+ at <anonymous> ([WILDCARD]/test/unresolved_promise.ts:1:1)
+This error was not caught from a test and caused the test runner to fail on the referenced module.
+It most likely originated from a dangling promise, event/timeout handler or top-level code.
+[WILDCARD]
+error: Test failed
diff --git a/tests/testdata/test/unresolved_promise.ts b/tests/testdata/test/unresolved_promise.ts
new file mode 100644
index 000000000..25fe70762
--- /dev/null
+++ b/tests/testdata/test/unresolved_promise.ts
@@ -0,0 +1 @@
+await new Promise((_resolve, _reject) => {});