diff --git a/.dprint.json b/.dprint.json
index f5c62019ea368b..77ab01e0270b9f 100644
--- a/.dprint.json
+++ b/.dprint.json
@@ -56,7 +56,6 @@
"tests/testdata/run/byte_order_mark.ts",
"tests/testdata/run/error_syntax_empty_trailing_line.mjs",
"tests/testdata/run/inline_js_source_map*",
- "tests/testdata/test/glob/",
"tests/testdata/test/markdown_windows.md",
"tests/util/std",
"tests/wpt/runner/expectation.json",
diff --git a/tests/integration/test_tests.rs b/tests/integration/test_tests.rs
index 207e0f260dde3d..64857ae1102fa8 100644
--- a/tests/integration/test_tests.rs
+++ b/tests/integration/test_tests.rs
@@ -1,324 +1,12 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
-use deno_core::serde_json::json;
-use deno_core::url::Url;
use test_util as util;
-use test_util::itest;
use util::assert_contains;
use util::assert_not_contains;
use util::wildcard_match;
use util::TestContext;
use util::TestContextBuilder;
-#[test]
-fn no_color() {
- let (out, _) = util::run_and_collect_output(
- false,
- "test test/no_color.ts",
- None,
- Some(vec![("NO_COLOR".to_owned(), "true".to_owned())]),
- false,
- );
- // ANSI escape codes should be stripped.
- assert!(out.contains("success ... ok"));
- assert!(out.contains("fail ... FAILED"));
- assert!(out.contains("ignored ... ignored"));
- assert!(out.contains("FAILED | 1 passed | 1 failed | 1 ignored"));
-}
-
-itest!(overloads {
- args: "test test/overloads.ts",
- exit_code: 0,
- output: "test/overloads.out",
-});
-
-itest!(meta {
- args: "test test/meta.ts",
- exit_code: 0,
- output: "test/meta.out",
-});
-
-itest!(pass {
- args: "test test/pass.ts",
- exit_code: 0,
- output: "test/pass.out",
-});
-
-itest!(ignore {
- args: "test test/ignore.ts",
- exit_code: 0,
- output: "test/ignore.out",
-});
-
-itest!(ignore_permissions {
- args: "test test/ignore_permissions.ts",
- exit_code: 0,
- output: "test/ignore_permissions.out",
-});
-
-itest!(fail {
- args: "test test/fail.ts",
- exit_code: 1,
- output: "test/fail.out",
-});
-
-// GHA CI seems to have a problem with Emoji
-// https://github.com/denoland/deno/pull/23200#issuecomment-2134032695
-#[test]
-fn fail_with_contain_unicode_filename() {
- let context = TestContextBuilder::new().use_temp_cwd().build();
- let temp_dir = context.temp_dir();
- temp_dir.write(
- "fail_with_contain_unicode_filename🦕.ts",
- "Deno.test(\"test 0\", () => {
- throw new Error();
-});
- ",
- );
- let output = context
- .new_command()
- .args("test fail_with_contain_unicode_filename🦕.ts")
- .run();
- output.skip_output_check();
- output.assert_exit_code(1);
- output.assert_matches_text(
- "Check [WILDCARD]/fail_with_contain_unicode_filename🦕.ts
-running 1 test from ./fail_with_contain_unicode_filename🦕.ts
-test 0 ... FAILED ([WILDCARD])
-
- ERRORS
-
-test 0 => ./fail_with_contain_unicode_filename🦕.ts:[WILDCARD]
-error: Error
- throw new Error();
- ^
- at [WILDCARD]/fail_with_contain_unicode_filename🦕.ts:[WILDCARD]
-
- FAILURES
-
-test 0 => ./fail_with_contain_unicode_filename🦕.ts:[WILDCARD]
-
-FAILED | 0 passed | 1 failed ([WILDCARD])
-
-error: Test failed
-",
- );
-}
-
-itest!(collect {
- args: "test --ignore=test/collect/ignore test/collect",
- exit_code: 0,
- output: "test/collect.out",
-});
-
-itest!(test_with_config {
- args: "test --config test/collect/deno.jsonc test/collect",
- exit_code: 0,
- output: "test/collect.out",
-});
-
-itest!(test_with_config2 {
- args: "test --config test/collect/deno2.jsonc test/collect",
- exit_code: 0,
- output: "test/collect2.out",
-});
-
-itest!(test_with_malformed_config {
- args: "test --config test/collect/deno.malformed.jsonc",
- exit_code: 1,
- output: "test/collect_with_malformed_config.out",
-});
-
-itest!(test_filtered_out_only {
- args: "test --quiet --filter foo test/filtered_out_only.ts",
- output: "test/filtered_out_only.out",
-});
-
-itest!(parallel_flag {
- args: "test test/short-pass.ts --parallel",
- exit_code: 0,
- output: "test/short-pass.out",
-});
-
-itest!(parallel_flag_with_env_variable {
- args: "test test/short-pass.ts --parallel",
- envs: vec![("DENO_JOBS".to_owned(), "2".to_owned())],
- exit_code: 0,
- output: "test/short-pass.out",
-});
-
-itest!(load_unload {
- args: "test test/load_unload.ts",
- exit_code: 0,
- output: "test/load_unload.out",
-});
-
-itest!(interval {
- args: "test test/interval.ts",
- exit_code: 0,
- output: "test/interval.out",
-});
-
-itest!(doc {
- args: "test --doc --allow-all test/doc.ts",
- exit_code: 1,
- output: "test/doc.out",
-});
-
-itest!(doc_only {
- args: "test --doc --allow-all test/doc_only",
- exit_code: 0,
- output: "test/doc_only.out",
-});
-
-itest!(markdown {
- args: "test --doc --allow-all test/markdown.md",
- exit_code: 1,
- output: "test/markdown.out",
-});
-
-itest!(markdown_windows {
- args: "test --doc --allow-all test/markdown_windows.md",
- exit_code: 1,
- output: "test/markdown_windows.out",
-});
-
-itest!(markdown_full_block_names {
- args: "test --doc --allow-all test/markdown_full_block_names.md",
- exit_code: 1,
- output: "test/markdown_full_block_names.out",
-});
-
-itest!(markdown_ignore_html_comment {
- args: "test --doc --allow-all test/markdown_with_comment.md",
- exit_code: 1,
- output: "test/markdown_with_comment.out",
-});
-
-itest!(text {
- args: "test --doc --allow-all test/text.md",
- exit_code: 0,
- output: "test/text.out",
-});
-
-itest!(quiet {
- args: "test --quiet test/quiet.ts",
- exit_code: 0,
- output: "test/quiet.out",
-});
-
-itest!(fail_fast {
- args: "test --fail-fast test/fail_fast.ts test/fail_fast_other.ts",
- exit_code: 1,
- output: "test/fail_fast.out",
-});
-
-itest!(only {
- args: "test test/only.ts",
- exit_code: 1,
- output: "test/only.out",
-});
-
-itest!(no_check {
- args: "test --no-check test/no_check.ts",
- exit_code: 1,
- output: "test/no_check.out",
-});
-
-itest!(no_run {
- args: "test --no-run test/no_run.ts",
- output: "test/no_run.out",
- exit_code: 1,
-});
-
-itest!(allow_all {
- args: "test --config ../config/deno.json --allow-all test/allow_all.ts",
- exit_code: 0,
- output: "test/allow_all.out",
-});
-
-itest!(allow_none {
- args: "test --config ../config/deno.json test/allow_none.ts",
- exit_code: 1,
- output: "test/allow_none.out",
-});
-
-itest!(ops_sanitizer_unstable {
- args: "test --trace-leaks test/sanitizer/ops_sanitizer_unstable.ts",
- exit_code: 1,
- output: "test/sanitizer/ops_sanitizer_unstable.out",
-});
-
-itest!(ops_sanitizer_timeout_failure {
- args: "test test/sanitizer/ops_sanitizer_timeout_failure.ts",
- output: "test/sanitizer/ops_sanitizer_timeout_failure.out",
-});
-
-itest!(ops_sanitizer_multiple_timeout_tests {
- args:
- "test --trace-leaks test/sanitizer/ops_sanitizer_multiple_timeout_tests.ts",
- exit_code: 1,
- output: "test/sanitizer/ops_sanitizer_multiple_timeout_tests.out",
-});
-
-itest!(ops_sanitizer_multiple_timeout_tests_no_trace {
- args: "test test/sanitizer/ops_sanitizer_multiple_timeout_tests.ts",
- exit_code: 1,
- output: "test/sanitizer/ops_sanitizer_multiple_timeout_tests_no_trace.out",
-});
-
-itest!(sanitizer_trace_ops_catch_error {
- args: "test -A --trace-leaks test/sanitizer/trace_ops_caught_error/main.ts",
- exit_code: 0,
- output: "test/sanitizer/trace_ops_caught_error/main.out",
-});
-
-itest!(ops_sanitizer_closed_inside_started_before {
- args: "test --trace-leaks test/sanitizer/ops_sanitizer_closed_inside_started_before.ts",
- exit_code: 1,
- output: "test/sanitizer/ops_sanitizer_closed_inside_started_before.out",
-});
-
-itest!(ops_sanitizer_nexttick {
- args: "test --no-check test/sanitizer/ops_sanitizer_nexttick.ts",
- output: "test/sanitizer/ops_sanitizer_nexttick.out",
-});
-
-itest!(resource_sanitizer {
- args: "test --allow-read test/sanitizer/resource_sanitizer.ts",
- exit_code: 1,
- output: "test/sanitizer/resource_sanitizer.out",
-});
-
-itest!(ops_sanitizer_tcp {
- args: "test --allow-net --trace-leaks test/sanitizer/ops_sanitizer_tcp.ts",
- exit_code: 1,
- output: "test/sanitizer/ops_sanitizer_tcp.out",
-});
-
-itest!(exit_sanitizer {
- args: "test test/sanitizer/exit_sanitizer.ts",
- output: "test/sanitizer/exit_sanitizer.out",
- exit_code: 1,
-});
-
-itest!(junit {
- args: "test --reporter junit test/pass.ts",
- output: "test/pass.junit.out",
-});
-
-itest!(junit_nested {
- args: "test --reporter junit test/nested_failures.ts",
- output: "test/nested_failures.junit.out",
- exit_code: 1,
-});
-
-itest!(junit_multiple_test_files {
- args: "test --reporter junit test/pass.ts test/fail.ts",
- output: "test/junit_multiple_test_files.junit.out",
- exit_code: 1,
-});
-
#[test]
fn junit_path() {
let context = TestContextBuilder::new().use_temp_cwd().build();
@@ -336,245 +24,6 @@ fn junit_path() {
.assert_matches_text(">();
- // the output is racy on either stdout or stderr being flushed
- // from the runtime into the rust code, so sort it... the main
- // thing here to ensure is that we're capturing the output in
- // this block on stdout
- lines.sort_unstable();
- assert_eq!(lines.join(" "), "0 1 2 3 4 5 6 7 8 9");
-}
-
-#[test]
-fn recursive_permissions_pledge() {
- let context = TestContext::default();
- let output = context
- .new_command()
- .args("test test/recursive_permissions_pledge.js")
- .run();
- output.assert_exit_code(1);
- assert_contains!(
- output.combined_output(),
- "pledge test permissions called before restoring previous pledge"
- );
-}
-
-#[test]
-fn file_protocol() {
- let file_url =
- Url::from_file_path(util::testdata_path().join("test/file_protocol.ts"))
- .unwrap()
- .to_string();
-
- TestContext::default()
- .new_command()
- .args_vec(["test", file_url.as_str()])
- .run()
- .assert_matches_file("test/file_protocol.out");
-}
-
-itest!(uncaught_errors {
- args: "test --quiet test/uncaught_errors_1.ts test/uncaught_errors_2.ts test/uncaught_errors_3.ts",
- output: "test/uncaught_errors.out",
- exit_code: 1,
-});
-
-itest!(report_error {
- args: "test --quiet test/report_error.ts",
- output: "test/report_error.out",
- exit_code: 1,
-});
-
-itest!(check_local_by_default {
- args: "test --quiet test/check_local_by_default.ts",
- output: "test/check_local_by_default.out",
- http_server: true,
-});
-
-itest!(check_local_by_default2 {
- args: "test --quiet test/check_local_by_default2.ts",
- output: "test/check_local_by_default2.out",
- http_server: true,
- exit_code: 1,
-});
-
-itest!(non_error_thrown {
- args: "test --quiet test/non_error_thrown.ts",
- output: "test/non_error_thrown.out",
- exit_code: 1,
-});
-
-itest!(parallel_output {
- args: "test --parallel --reload test/parallel_output.ts",
- output: "test/parallel_output.out",
- exit_code: 1,
-});
-
#[test]
// todo(#18480): re-enable
#[ignore]
@@ -598,11 +47,6 @@ fn sigint_with_hanging_test() {
);
}
-itest!(test_replace_timers {
- args: "test test/replace_timers.js",
- output: "test/replace_timers.js.out",
-});
-
#[test]
fn test_with_glob_config() {
let context = TestContextBuilder::new().cwd("test").build();
@@ -674,32 +118,3 @@ fn conditionally_loads_type_graph() {
.run();
assert_not_contains!(output.combined_output(), "type_reference.d.ts");
}
-
-#[test]
-fn opt_out_top_level_exclude_via_test_unexclude() {
- let context = TestContextBuilder::new().use_temp_cwd().build();
- let temp_dir = context.temp_dir().path();
- temp_dir.join("deno.json").write_json(&json!({
- "test": {
- "exclude": [ "!excluded.test.ts" ]
- },
- "exclude": [ "excluded.test.ts", "actually_excluded.test.ts" ]
- }));
-
- temp_dir
- .join("main.test.ts")
- .write("Deno.test('test1', () => {});");
- temp_dir
- .join("excluded.test.ts")
- .write("Deno.test('test2', () => {});");
- temp_dir
- .join("actually_excluded.test.ts")
- .write("Deno.test('test3', () => {});");
-
- let output = context.new_command().arg("test").run();
- output.assert_exit_code(0);
- let output = output.combined_output();
- assert_contains!(output, "main.test.ts");
- assert_contains!(output, "excluded.test.ts");
- assert_not_contains!(output, "actually_excluded.test.ts");
-}
diff --git a/tests/specs/test/aggregate_error/__test__.jsonc b/tests/specs/test/aggregate_error/__test__.jsonc
new file mode 100644
index 00000000000000..a02376f8717c8d
--- /dev/null
+++ b/tests/specs/test/aggregate_error/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --quiet main.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/aggregate_error/main.out b/tests/specs/test/aggregate_error/main.out
new file mode 100644
index 00000000000000..aa790e55056a0b
--- /dev/null
+++ b/tests/specs/test/aggregate_error/main.out
@@ -0,0 +1,22 @@
+running 1 test from ./main.ts
+aggregate ... FAILED ([WILDCARD])
+
+ ERRORS
+
+aggregate => ./main.ts:[WILDCARD]
+error: AggregateError
+ Error: Error 1
+ at [WILDCARD]/main.ts:2:18
+ Error: Error 2
+ at [WILDCARD]/main.ts:3:18
+ throw new AggregateError([error1, error2]);
+ ^
+ at [WILDCARD]/main.ts:5:9
+
+ FAILURES
+
+aggregate => ./main.ts:[WILDCARD]
+
+FAILED | 0 passed | 1 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/aggregate_error.ts b/tests/specs/test/aggregate_error/main.ts
similarity index 100%
rename from tests/testdata/test/aggregate_error.ts
rename to tests/specs/test/aggregate_error/main.ts
diff --git a/tests/specs/test/allow_all/__test__.jsonc b/tests/specs/test/allow_all/__test__.jsonc
new file mode 100644
index 00000000000000..badffe7c4d444d
--- /dev/null
+++ b/tests/specs/test/allow_all/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --config deno.json --allow-all main.ts",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/allow_all/deno.json b/tests/specs/test/allow_all/deno.json
new file mode 100644
index 00000000000000..105514e133fb25
--- /dev/null
+++ b/tests/specs/test/allow_all/deno.json
@@ -0,0 +1,4 @@
+{
+ "lock": false,
+ "importMap": "../../../../import_map.json"
+}
diff --git a/tests/testdata/test/allow_all.out b/tests/specs/test/allow_all/main.out
similarity index 100%
rename from tests/testdata/test/allow_all.out
rename to tests/specs/test/allow_all/main.out
diff --git a/tests/testdata/test/allow_all.ts b/tests/specs/test/allow_all/main.ts
similarity index 100%
rename from tests/testdata/test/allow_all.ts
rename to tests/specs/test/allow_all/main.ts
diff --git a/tests/specs/test/allow_none/__test__.jsonc b/tests/specs/test/allow_none/__test__.jsonc
new file mode 100644
index 00000000000000..5e21e8943602ff
--- /dev/null
+++ b/tests/specs/test/allow_none/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --config deno.json main.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/allow_none/deno.json b/tests/specs/test/allow_none/deno.json
new file mode 100644
index 00000000000000..105514e133fb25
--- /dev/null
+++ b/tests/specs/test/allow_none/deno.json
@@ -0,0 +1,4 @@
+{
+ "lock": false,
+ "importMap": "../../../../import_map.json"
+}
diff --git a/tests/testdata/test/allow_none.out b/tests/specs/test/allow_none/main.out
similarity index 59%
rename from tests/testdata/test/allow_none.out
rename to tests/specs/test/allow_none/main.out
index 37ed8548a0bd95..1914997cd474d7 100644
--- a/tests/testdata/test/allow_none.out
+++ b/tests/specs/test/allow_none/main.out
@@ -9,37 +9,37 @@ ffi ... FAILED [WILDCARD]
ERRORS
-read => ./test/allow_none.ts:[WILDCARD]
+read => ./main.ts:[WILDCARD]
error: NotCapable: Can't escalate parent thread permissions
[WILDCARD]
-write => ./test/allow_none.ts:[WILDCARD]
+write => ./main.ts:[WILDCARD]
error: NotCapable: Can't escalate parent thread permissions
[WILDCARD]
-net => ./test/allow_none.ts:[WILDCARD]
+net => ./main.ts:[WILDCARD]
error: NotCapable: Can't escalate parent thread permissions
[WILDCARD]
-env => ./test/allow_none.ts:[WILDCARD]
+env => ./main.ts:[WILDCARD]
error: NotCapable: Can't escalate parent thread permissions
[WILDCARD]
-run => ./test/allow_none.ts:[WILDCARD]
+run => ./main.ts:[WILDCARD]
error: NotCapable: Can't escalate parent thread permissions
[WILDCARD]
-ffi => ./test/allow_none.ts:[WILDCARD]
+ffi => ./main.ts:[WILDCARD]
error: NotCapable: 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]
+read => ./main.ts:[WILDCARD]
+write => ./main.ts:[WILDCARD]
+net => ./main.ts:[WILDCARD]
+env => ./main.ts:[WILDCARD]
+run => ./main.ts:[WILDCARD]
+ffi => ./main.ts:[WILDCARD]
FAILED | 0 passed | 6 failed [WILDCARD]
diff --git a/tests/testdata/test/allow_none.ts b/tests/specs/test/allow_none/main.ts
similarity index 100%
rename from tests/testdata/test/allow_none.ts
rename to tests/specs/test/allow_none/main.ts
diff --git a/tests/specs/test/before_unload_prevent_default/__test__.jsonc b/tests/specs/test/before_unload_prevent_default/__test__.jsonc
new file mode 100644
index 00000000000000..602250082b54a6
--- /dev/null
+++ b/tests/specs/test/before_unload_prevent_default/__test__.jsonc
@@ -0,0 +1,4 @@
+{
+ "args": "test --quiet main.ts",
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/before_unload_prevent_default.out b/tests/specs/test/before_unload_prevent_default/main.out
similarity index 50%
rename from tests/testdata/test/before_unload_prevent_default.out
rename to tests/specs/test/before_unload_prevent_default/main.out
index 09da32ff96b896..9ccad312d89fa4 100644
--- a/tests/testdata/test/before_unload_prevent_default.out
+++ b/tests/specs/test/before_unload_prevent_default/main.out
@@ -1,4 +1,4 @@
-running 1 test from [WILDCARD]/before_unload_prevent_default.ts
+running 1 test from [WILDCARD]/main.ts
foo ... ok ([WILDCARD])
ok | 1 passed | 0 failed ([WILDCARD])
diff --git a/tests/testdata/test/before_unload_prevent_default.ts b/tests/specs/test/before_unload_prevent_default/main.ts
similarity index 100%
rename from tests/testdata/test/before_unload_prevent_default.ts
rename to tests/specs/test/before_unload_prevent_default/main.ts
diff --git a/tests/specs/test/captured_output/__test__.jsonc b/tests/specs/test/captured_output/__test__.jsonc
new file mode 100644
index 00000000000000..d620f61aa37d21
--- /dev/null
+++ b/tests/specs/test/captured_output/__test__.jsonc
@@ -0,0 +1,6 @@
+{
+ "args": "test --allow-run --allow-read captured_output.ts",
+ "output": "main.out",
+ "envs": { "NO_COLOR": "1" },
+ "exitCode": 0
+}
diff --git a/tests/testdata/test/captured_output.ts b/tests/specs/test/captured_output/captured_output.ts
similarity index 94%
rename from tests/testdata/test/captured_output.ts
rename to tests/specs/test/captured_output/captured_output.ts
index 3eed249a2e6519..77e1d1b08ecf8f 100644
--- a/tests/testdata/test/captured_output.ts
+++ b/tests/specs/test/captured_output/captured_output.ts
@@ -19,7 +19,7 @@ Deno.test("output", async () => {
}).spawn();
await c.status;
const worker = new Worker(
- import.meta.resolve("./captured_output.worker.js"),
+ import.meta.resolve("./captured_output.worker.ts"),
{ type: "module" },
);
diff --git a/tests/testdata/test/captured_output.worker.js b/tests/specs/test/captured_output/captured_output.worker.ts
similarity index 100%
rename from tests/testdata/test/captured_output.worker.js
rename to tests/specs/test/captured_output/captured_output.worker.ts
diff --git a/tests/specs/test/captured_output/main.out b/tests/specs/test/captured_output/main.out
new file mode 100644
index 00000000000000..ba313beafbb3d0
--- /dev/null
+++ b/tests/specs/test/captured_output/main.out
@@ -0,0 +1,22 @@
+Check [WILDCARD]/captured_output.ts
+running 1 test from ./captured_output.ts
+output ...
+------- output -------
+[UNORDERED_START]
+1
+0
+3
+2
+5
+4
+7
+6
+Check [WILDLINE]/captured_output.worker.ts
+9
+8
+[UNORDERED_END]
+----- output end -----
+output ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/specs/test/check_local_by_default/__test__.jsonc b/tests/specs/test/check_local_by_default/__test__.jsonc
new file mode 100644
index 00000000000000..602250082b54a6
--- /dev/null
+++ b/tests/specs/test/check_local_by_default/__test__.jsonc
@@ -0,0 +1,4 @@
+{
+ "args": "test --quiet main.ts",
+ "output": "main.out"
+}
diff --git a/tests/specs/test/check_local_by_default/main.out b/tests/specs/test/check_local_by_default/main.out
new file mode 100644
index 00000000000000..be21aa963c765c
--- /dev/null
+++ b/tests/specs/test/check_local_by_default/main.out
@@ -0,0 +1,4 @@
+running 0 tests from ./main.ts
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/check_local_by_default.ts b/tests/specs/test/check_local_by_default/main.ts
similarity index 100%
rename from tests/testdata/test/check_local_by_default.ts
rename to tests/specs/test/check_local_by_default/main.ts
diff --git a/tests/specs/test/check_local_by_default2/__test__.jsonc b/tests/specs/test/check_local_by_default2/__test__.jsonc
new file mode 100644
index 00000000000000..59774f938a836f
--- /dev/null
+++ b/tests/specs/test/check_local_by_default2/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --quiet main.ts",
+ "output": "main.out",
+ "exitCode": 1
+}
diff --git a/tests/testdata/test/check_local_by_default2.out b/tests/specs/test/check_local_by_default2/main.out
similarity index 63%
rename from tests/testdata/test/check_local_by_default2.out
rename to tests/specs/test/check_local_by_default2/main.out
index b933ac48335069..5b145afd257d5e 100644
--- a/tests/testdata/test/check_local_by_default2.out
+++ b/tests/specs/test/check_local_by_default2/main.out
@@ -1,4 +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
+ at [WILDCARD]/main.ts:3:7
diff --git a/tests/testdata/test/check_local_by_default2.ts b/tests/specs/test/check_local_by_default2/main.ts
similarity index 100%
rename from tests/testdata/test/check_local_by_default2.ts
rename to tests/specs/test/check_local_by_default2/main.ts
diff --git a/tests/specs/test/clean_flag/__test__.jsonc b/tests/specs/test/clean_flag/__test__.jsonc
index b94612d36e8a4b..6283a44e1c3ff6 100644
--- a/tests/specs/test/clean_flag/__test__.jsonc
+++ b/tests/specs/test/clean_flag/__test__.jsonc
@@ -1,5 +1,5 @@
{
- "args": "run -A --config ../../../config/deno.json main.js",
+ "args": "run -A --config deno.json main.js",
"exitCode": 0,
"output": "main.out"
}
diff --git a/tests/specs/test/clean_flag/deno.json b/tests/specs/test/clean_flag/deno.json
new file mode 100644
index 00000000000000..105514e133fb25
--- /dev/null
+++ b/tests/specs/test/clean_flag/deno.json
@@ -0,0 +1,4 @@
+{
+ "lock": false,
+ "importMap": "../../../../import_map.json"
+}
diff --git a/tests/specs/test/clear_timeout/__test__.jsonc b/tests/specs/test/clear_timeout/__test__.jsonc
new file mode 100644
index 00000000000000..d7ed453a947183
--- /dev/null
+++ b/tests/specs/test/clear_timeout/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/clear_timeout.out b/tests/specs/test/clear_timeout/main.out
similarity index 59%
rename from tests/testdata/test/clear_timeout.out
rename to tests/specs/test/clear_timeout/main.out
index 4d3ff886267005..be639f7280a16d 100644
--- a/tests/testdata/test/clear_timeout.out
+++ b/tests/specs/test/clear_timeout/main.out
@@ -1,5 +1,5 @@
-Check [WILDCARD]/test/clear_timeout.ts
-running 3 tests from ./test/clear_timeout.ts
+Check [WILDCARD]/main.ts
+running 3 tests from ./main.ts
test 1 ... ok ([WILDCARD])
test 2 ... ok ([WILDCARD])
test 3 ... ok ([WILDCARD])
diff --git a/tests/testdata/test/clear_timeout.ts b/tests/specs/test/clear_timeout/main.ts
similarity index 100%
rename from tests/testdata/test/clear_timeout.ts
rename to tests/specs/test/clear_timeout/main.ts
diff --git a/tests/specs/test/collect/__test__.jsonc b/tests/specs/test/collect/__test__.jsonc
new file mode 100644
index 00000000000000..3a45c41a43c4c3
--- /dev/null
+++ b/tests/specs/test/collect/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --ignore=collect/ignore collect",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/collect/deno.jsonc b/tests/specs/test/collect/collect/deno.jsonc
similarity index 100%
rename from tests/testdata/test/collect/deno.jsonc
rename to tests/specs/test/collect/collect/deno.jsonc
diff --git a/tests/testdata/test/collect/deno.malformed.jsonc b/tests/specs/test/collect/collect/deno.malformed.jsonc
similarity index 100%
rename from tests/testdata/test/collect/deno.malformed.jsonc
rename to tests/specs/test/collect/collect/deno.malformed.jsonc
diff --git a/tests/testdata/test/collect/deno2.jsonc b/tests/specs/test/collect/collect/deno2.jsonc
similarity index 100%
rename from tests/testdata/test/collect/deno2.jsonc
rename to tests/specs/test/collect/collect/deno2.jsonc
diff --git a/tests/testdata/test/collect/ignore/test.ts b/tests/specs/test/collect/collect/ignore/test.ts
similarity index 100%
rename from tests/testdata/test/collect/ignore/test.ts
rename to tests/specs/test/collect/collect/ignore/test.ts
diff --git a/tests/testdata/test/collect/include.ts b/tests/specs/test/collect/collect/include.ts
similarity index 100%
rename from tests/testdata/test/collect/include.ts
rename to tests/specs/test/collect/collect/include.ts
diff --git a/tests/testdata/test/collect/include/2_test.ts b/tests/specs/test/collect/collect/include/2_test.ts
similarity index 100%
rename from tests/testdata/test/collect/include/2_test.ts
rename to tests/specs/test/collect/collect/include/2_test.ts
diff --git a/tests/testdata/test/collect/include/test.ts b/tests/specs/test/collect/collect/include/test.ts
similarity index 100%
rename from tests/testdata/test/collect/include/test.ts
rename to tests/specs/test/collect/collect/include/test.ts
diff --git a/tests/testdata/test/collect/test.ts b/tests/specs/test/collect/collect/test.ts
similarity index 100%
rename from tests/testdata/test/collect/test.ts
rename to tests/specs/test/collect/collect/test.ts
diff --git a/tests/specs/test/collect/main.out b/tests/specs/test/collect/main.out
new file mode 100644
index 00000000000000..13a76fc375d263
--- /dev/null
+++ b/tests/specs/test/collect/main.out
@@ -0,0 +1,9 @@
+Check [WILDCARD]/collect/include/2_test.ts
+Check [WILDCARD]/collect/include/test.ts
+Check [WILDCARD]/collect/test.ts
+running 0 tests from [WILDCARD]/collect/include/2_test.ts
+running 0 tests from [WILDCARD]/collect/include/test.ts
+running 0 tests from [WILDCARD]/collect/test.ts
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/specs/test/doc/__test__.jsonc b/tests/specs/test/doc/__test__.jsonc
new file mode 100644
index 00000000000000..095ab4c592f968
--- /dev/null
+++ b/tests/specs/test/doc/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --doc --allow-all main.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/doc/main.out b/tests/specs/test/doc/main.out
new file mode 100644
index 00000000000000..b55989f96e4ebb
--- /dev/null
+++ b/tests/specs/test/doc/main.out
@@ -0,0 +1,9 @@
+Check [WILDCARD]/main.ts$6-9.js
+Check [WILDCARD]/main.ts$10-13.jsx
+Check [WILDCARD]/main.ts$14-17.ts
+Check [WILDCARD]/main.ts$18-21.tsx
+Check [WILDCARD]/main.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]/main.ts$30-35.ts:3:16
diff --git a/tests/specs/test/doc/main.ts b/tests/specs/test/doc/main.ts
new file mode 100644
index 00000000000000..213a9f44d3d172
--- /dev/null
+++ b/tests/specs/test/doc/main.ts
@@ -0,0 +1,38 @@
+/**
+ * ```
+ * import * as doc from "./main.ts";
+ * ```
+ *
+ * ```js
+ * import * as doc from "./main.ts";
+ * ```
+ *
+ * ```jsx
+ * import * as doc from "./main.ts";
+ * ```
+ *
+ * ```ts
+ * import * as doc from "./main.ts";
+ * ```
+ *
+ * ```tsx
+ * import * as doc from "./main.ts";
+ * ```
+ *
+ * ```text
+ * import * as doc from "./main.ts";
+ * ```
+ *
+ * @module doc
+ */
+
+/**
+ * ```ts
+ * import { check } from "./main.ts";
+ *
+ * console.assert(check() == 42);
+ * ```
+ */
+export function check(): string {
+ return "check";
+}
diff --git a/tests/specs/test/doc_only/__test__.jsonc b/tests/specs/test/doc_only/__test__.jsonc
new file mode 100644
index 00000000000000..077b733a331010
--- /dev/null
+++ b/tests/specs/test/doc_only/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --doc --allow-all doc_only",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/doc_only/mod.ts b/tests/specs/test/doc_only/doc_only/mod.ts
similarity index 100%
rename from tests/testdata/test/doc_only/mod.ts
rename to tests/specs/test/doc_only/doc_only/mod.ts
diff --git a/tests/specs/test/doc_only/main.out b/tests/specs/test/doc_only/main.out
new file mode 100644
index 00000000000000..a2eff5e89d34cd
--- /dev/null
+++ b/tests/specs/test/doc_only/main.out
@@ -0,0 +1,4 @@
+Check [WILDCARD]/doc_only/mod.ts$2-5.ts
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/specs/test/exit_sanitizer/__test__.jsonc b/tests/specs/test/exit_sanitizer/__test__.jsonc
new file mode 100644
index 00000000000000..79d075d6700998
--- /dev/null
+++ b/tests/specs/test/exit_sanitizer/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test exit_sanitizer.ts",
+ "output": "exit_sanitizer.out",
+ "exitCode": 1
+}
diff --git a/tests/testdata/test/sanitizer/exit_sanitizer.out b/tests/specs/test/exit_sanitizer/exit_sanitizer.out
similarity index 100%
rename from tests/testdata/test/sanitizer/exit_sanitizer.out
rename to tests/specs/test/exit_sanitizer/exit_sanitizer.out
diff --git a/tests/testdata/test/sanitizer/exit_sanitizer.ts b/tests/specs/test/exit_sanitizer/exit_sanitizer.ts
similarity index 100%
rename from tests/testdata/test/sanitizer/exit_sanitizer.ts
rename to tests/specs/test/exit_sanitizer/exit_sanitizer.ts
diff --git a/tests/specs/test/fail/__test__.jsonc b/tests/specs/test/fail/__test__.jsonc
new file mode 100644
index 00000000000000..2c4ae3868d7fcb
--- /dev/null
+++ b/tests/specs/test/fail/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/fail/main.out b/tests/specs/test/fail/main.out
new file mode 100644
index 00000000000000..e305f93bd0d0a6
--- /dev/null
+++ b/tests/specs/test/fail/main.out
@@ -0,0 +1,91 @@
+Check [WILDCARD]/main.ts
+running 10 tests from ./main.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 => ./main.ts:1:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/main.ts:2:9
+
+test 1 => ./main.ts:4:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/main.ts:5:9
+
+test 2 => ./main.ts:7:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/main.ts:8:9
+
+test 3 => ./main.ts:10:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/main.ts:11:9
+
+test 4 => ./main.ts:13:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/main.ts:14:9
+
+test 5 => ./main.ts:16:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/main.ts:17:9
+
+test 6 => ./main.ts:19:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/main.ts:20:9
+
+test 7 => ./main.ts:22:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/main.ts:23:9
+
+test 8 => ./main.ts:25:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/main.ts:26:9
+
+test 9 => ./main.ts:28:6
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/main.ts:29:9
+
+ FAILURES
+
+test 0 => ./main.ts:1:6
+test 1 => ./main.ts:4:6
+test 2 => ./main.ts:7:6
+test 3 => ./main.ts:10:6
+test 4 => ./main.ts:13:6
+test 5 => ./main.ts:16:6
+test 6 => ./main.ts:19:6
+test 7 => ./main.ts:22:6
+test 8 => ./main.ts:25:6
+test 9 => ./main.ts:28:6
+
+FAILED | 0 passed | 10 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/fail.ts b/tests/specs/test/fail/main.ts
similarity index 100%
rename from tests/testdata/test/fail.ts
rename to tests/specs/test/fail/main.ts
diff --git a/tests/specs/test/fail_fast/__test__.jsonc b/tests/specs/test/fail_fast/__test__.jsonc
new file mode 100644
index 00000000000000..a819df39f00752
--- /dev/null
+++ b/tests/specs/test/fail_fast/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --fail-fast fail_fast.ts fail_fast_other.ts",
+ "exitCode": 1,
+ "output": "fail_fast.out"
+}
diff --git a/tests/specs/test/fail_fast/fail_fast.out b/tests/specs/test/fail_fast/fail_fast.out
new file mode 100644
index 00000000000000..164c9c6a6bda05
--- /dev/null
+++ b/tests/specs/test/fail_fast/fail_fast.out
@@ -0,0 +1,20 @@
+Check [WILDCARD]/fail_fast.ts
+Check [WILDCARD]/fail_fast_other.ts
+running 10 tests from ./fail_fast.ts
+test 1 ... FAILED ([WILDCARD])
+
+ ERRORS
+
+test 1 => ./fail_fast.ts:[WILDCARD]
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/fail_fast.ts:2:9
+
+ FAILURES
+
+test 1 => ./fail_fast.ts:[WILDCARD]
+
+FAILED | 0 passed | 1 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/fail_fast.ts b/tests/specs/test/fail_fast/fail_fast.ts
similarity index 100%
rename from tests/testdata/test/fail_fast.ts
rename to tests/specs/test/fail_fast/fail_fast.ts
diff --git a/tests/testdata/test/fail_fast_other.ts b/tests/specs/test/fail_fast/fail_fast_other.ts
similarity index 100%
rename from tests/testdata/test/fail_fast_other.ts
rename to tests/specs/test/fail_fast/fail_fast_other.ts
diff --git a/tests/specs/test/fail_with_contain_unicode_filename/__test__.jsonc b/tests/specs/test/fail_with_contain_unicode_filename/__test__.jsonc
new file mode 100644
index 00000000000000..d8887f7538360e
--- /dev/null
+++ b/tests/specs/test/fail_with_contain_unicode_filename/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "output": "main.out",
+ "exitCode": 1
+}
diff --git a/tests/specs/test/fail_with_contain_unicode_filename/main.out b/tests/specs/test/fail_with_contain_unicode_filename/main.out
new file mode 100644
index 00000000000000..5cea77dc0f4b15
--- /dev/null
+++ b/tests/specs/test/fail_with_contain_unicode_filename/main.out
@@ -0,0 +1,19 @@
+Check [WILDCARD]/main.ts
+running 1 test from ./main.ts
+test 0 ... FAILED ([WILDCARD])
+
+ ERRORS
+
+test 0 => ./main.ts:[WILDCARD]
+error: Error
+ throw new Error();
+ ^
+ at [WILDCARD]/main.ts:[WILDCARD]
+
+ FAILURES
+
+test 0 => ./main.ts:[WILDCARD]
+
+FAILED | 0 passed | 1 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/specs/test/fail_with_contain_unicode_filename/main.ts b/tests/specs/test/fail_with_contain_unicode_filename/main.ts
new file mode 100644
index 00000000000000..9fe04c1313ed36
--- /dev/null
+++ b/tests/specs/test/fail_with_contain_unicode_filename/main.ts
@@ -0,0 +1,3 @@
+Deno.test("test 0", () => {
+ throw new Error();
+});
diff --git a/tests/specs/test/file_protocol/__test__.jsonc b/tests/specs/test/file_protocol/__test__.jsonc
new file mode 100644
index 00000000000000..931a8c64e13dd0
--- /dev/null
+++ b/tests/specs/test/file_protocol/__test__.jsonc
@@ -0,0 +1,4 @@
+{
+ "args": "test main.ts",
+ "output": "main.out"
+}
diff --git a/tests/specs/test/file_protocol/main.out b/tests/specs/test/file_protocol/main.out
new file mode 100644
index 00000000000000..d02b728d18332c
--- /dev/null
+++ b/tests/specs/test/file_protocol/main.out
@@ -0,0 +1,6 @@
+Check file://[WILDCARD]/main.ts
+running 1 test from ./main.ts
+test 0 ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/file_protocol.ts b/tests/specs/test/file_protocol/main.ts
similarity index 100%
rename from tests/testdata/test/file_protocol.ts
rename to tests/specs/test/file_protocol/main.ts
diff --git a/tests/specs/test/filter/__test__.jsonc b/tests/specs/test/filter/__test__.jsonc
new file mode 100644
index 00000000000000..b7c1bb9fe6119c
--- /dev/null
+++ b/tests/specs/test/filter/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --filter=foo filter",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/filter/a_test.ts b/tests/specs/test/filter/filter/a_test.ts
similarity index 100%
rename from tests/testdata/test/filter/a_test.ts
rename to tests/specs/test/filter/filter/a_test.ts
diff --git a/tests/testdata/test/filter/b_test.ts b/tests/specs/test/filter/filter/b_test.ts
similarity index 100%
rename from tests/testdata/test/filter/b_test.ts
rename to tests/specs/test/filter/filter/b_test.ts
diff --git a/tests/testdata/test/filter/c_test.ts b/tests/specs/test/filter/filter/c_test.ts
similarity index 100%
rename from tests/testdata/test/filter/c_test.ts
rename to tests/specs/test/filter/filter/c_test.ts
diff --git a/tests/specs/test/filter/main.out b/tests/specs/test/filter/main.out
new file mode 100644
index 00000000000000..605214b8e11c87
--- /dev/null
+++ b/tests/specs/test/filter/main.out
@@ -0,0 +1,12 @@
+Check [WILDCARD]/filter/a_test.ts
+Check [WILDCARD]/filter/b_test.ts
+Check [WILDCARD]/filter/c_test.ts
+running 1 test from [WILDCARD]/filter/a_test.ts
+foo ... ok ([WILDCARD])
+running 1 test from [WILDCARD]/filter/b_test.ts
+foo ... ok ([WILDCARD])
+running 1 test from [WILDCARD]/filter/c_test.ts
+foo ... ok ([WILDCARD])
+
+ok | 3 passed | 0 failed | 6 filtered out ([WILDCARD])
+
diff --git a/tests/specs/test/finally_timeout/__test__.jsonc b/tests/specs/test/finally_timeout/__test__.jsonc
new file mode 100644
index 00000000000000..2c4ae3868d7fcb
--- /dev/null
+++ b/tests/specs/test/finally_timeout/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/finally_timeout/main.out b/tests/specs/test/finally_timeout/main.out
new file mode 100644
index 00000000000000..cdc081f47dad11
--- /dev/null
+++ b/tests/specs/test/finally_timeout/main.out
@@ -0,0 +1,20 @@
+Check [WILDCARD]/main.ts
+running 2 tests from ./main.ts
+error ... FAILED ([WILDCARD])
+success ... ok ([WILDCARD])
+
+ ERRORS
+
+error => ./main.ts:[WILDCARD]
+error: Error: fail
+ throw new Error("fail");
+ ^
+ at [WILDCARD]/main.ts:4:11
+
+ FAILURES
+
+error => ./main.ts:[WILDCARD]
+
+FAILED | 1 passed | 1 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/finally_timeout.ts b/tests/specs/test/finally_timeout/main.ts
similarity index 100%
rename from tests/testdata/test/finally_timeout.ts
rename to tests/specs/test/finally_timeout/main.ts
diff --git a/tests/specs/test/hide_empty_suites/__test__.jsonc b/tests/specs/test/hide_empty_suites/__test__.jsonc
new file mode 100644
index 00000000000000..4abef9205458eb
--- /dev/null
+++ b/tests/specs/test/hide_empty_suites/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --filter none main.ts",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/hide_empty_suites.out b/tests/specs/test/hide_empty_suites/main.out
similarity index 65%
rename from tests/testdata/test/hide_empty_suites.out
rename to tests/specs/test/hide_empty_suites/main.out
index d270cb05a5546f..bfc30e0846b921 100644
--- a/tests/testdata/test/hide_empty_suites.out
+++ b/tests/specs/test/hide_empty_suites/main.out
@@ -1,4 +1,4 @@
-Check [WILDCARD]/test/pass.ts
+Check [WILDCARD]/main.ts
ok | 0 passed | 0 failed | 16 filtered out ([WILDCARD])
diff --git a/tests/testdata/test/pass.ts b/tests/specs/test/hide_empty_suites/main.ts
similarity index 100%
rename from tests/testdata/test/pass.ts
rename to tests/specs/test/hide_empty_suites/main.ts
diff --git a/tests/specs/test/ignore/__test__.jsonc b/tests/specs/test/ignore/__test__.jsonc
new file mode 100644
index 00000000000000..e1ed1b926cbf49
--- /dev/null
+++ b/tests/specs/test/ignore/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/ignore.out b/tests/specs/test/ignore/main.out
similarity index 84%
rename from tests/testdata/test/ignore.out
rename to tests/specs/test/ignore/main.out
index e67406c6359e92..390d4f9161e56c 100644
--- a/tests/testdata/test/ignore.out
+++ b/tests/specs/test/ignore/main.out
@@ -1,5 +1,5 @@
-Check [WILDCARD]/test/ignore.ts
-running 10 tests from ./test/ignore.ts
+Check [WILDCARD]/main.ts
+running 10 tests from ./main.ts
test 0 ... ignored ([WILDCARD])
test 1 ... ignored ([WILDCARD])
test 2 ... ignored ([WILDCARD])
diff --git a/tests/testdata/test/ignore.ts b/tests/specs/test/ignore/main.ts
similarity index 100%
rename from tests/testdata/test/ignore.ts
rename to tests/specs/test/ignore/main.ts
diff --git a/tests/specs/test/ignore_persmissions/__test__.jsonc b/tests/specs/test/ignore_persmissions/__test__.jsonc
new file mode 100644
index 00000000000000..e1ed1b926cbf49
--- /dev/null
+++ b/tests/specs/test/ignore_persmissions/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/ignore_persmissions/main.out b/tests/specs/test/ignore_persmissions/main.out
new file mode 100644
index 00000000000000..d5cec67c03c74a
--- /dev/null
+++ b/tests/specs/test/ignore_persmissions/main.out
@@ -0,0 +1,6 @@
+Check [WILDCARD]/main.ts
+running 1 test from ./main.ts
+ignore ... ignored ([WILDCARD])
+
+ok | 0 passed | 0 failed | 1 ignored ([WILDCARD])
+
diff --git a/tests/testdata/test/ignore_permissions.ts b/tests/specs/test/ignore_persmissions/main.ts
similarity index 100%
rename from tests/testdata/test/ignore_permissions.ts
rename to tests/specs/test/ignore_persmissions/main.ts
diff --git a/tests/specs/test/interval/__test__.jsonc b/tests/specs/test/interval/__test__.jsonc
new file mode 100644
index 00000000000000..e1ed1b926cbf49
--- /dev/null
+++ b/tests/specs/test/interval/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/interval/main.out b/tests/specs/test/interval/main.out
new file mode 100644
index 00000000000000..7e5ef2914e0364
--- /dev/null
+++ b/tests/specs/test/interval/main.out
@@ -0,0 +1,5 @@
+Check [WILDCARD]/main.ts
+running 0 tests from ./main.ts
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/interval.ts b/tests/specs/test/interval/main.ts
similarity index 100%
rename from tests/testdata/test/interval.ts
rename to tests/specs/test/interval/main.ts
diff --git a/tests/specs/test/junit/__test__.jsonc b/tests/specs/test/junit/__test__.jsonc
new file mode 100644
index 00000000000000..5e91e5287c766b
--- /dev/null
+++ b/tests/specs/test/junit/__test__.jsonc
@@ -0,0 +1,4 @@
+{
+ "args": "test --reporter junit main.ts",
+ "output": "main.out"
+}
diff --git a/tests/specs/test/junit/main.out b/tests/specs/test/junit/main.out
new file mode 100644
index 00000000000000..ca9558118b40ed
--- /dev/null
+++ b/tests/specs/test/junit/main.out
@@ -0,0 +1,38 @@
+Check file:///[WILDCARD]/main.ts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/specs/test/junit/main.ts b/tests/specs/test/junit/main.ts
new file mode 100644
index 00000000000000..c4c0f45dcdb73a
--- /dev/null
+++ b/tests/specs/test/junit/main.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/specs/test/junit_multiple_test_files/__test__.jsonc b/tests/specs/test/junit_multiple_test_files/__test__.jsonc
new file mode 100644
index 00000000000000..d9b01bcb450aed
--- /dev/null
+++ b/tests/specs/test/junit_multiple_test_files/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --reporter junit pass.ts fail.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/fail_fast_with_val.ts b/tests/specs/test/junit_multiple_test_files/fail.ts
similarity index 100%
rename from tests/testdata/test/fail_fast_with_val.ts
rename to tests/specs/test/junit_multiple_test_files/fail.ts
index 637e825eced4de..9340db5569f088 100644
--- a/tests/testdata/test/fail_fast_with_val.ts
+++ b/tests/specs/test/junit_multiple_test_files/fail.ts
@@ -1,3 +1,6 @@
+Deno.test("test 0", () => {
+ throw new Error();
+});
Deno.test("test 1", () => {
throw new Error();
});
@@ -25,6 +28,3 @@ Deno.test("test 8", () => {
Deno.test("test 9", () => {
throw new Error();
});
-Deno.test("test 0", () => {
- throw new Error();
-});
diff --git a/tests/specs/test/junit_multiple_test_files/main.out b/tests/specs/test/junit_multiple_test_files/main.out
new file mode 100644
index 00000000000000..4ca962fd85b247
--- /dev/null
+++ b/tests/specs/test/junit_multiple_test_files/main.out
@@ -0,0 +1,102 @@
+Check file:///[WILDCARD]/pass.ts
+Check file:///[WILDCARD]/fail.ts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Error
+ throw new Error();
+ ^
+ at file:///[WILDCARD]/fail.ts:2:9
+
+
+ Error
+ throw new Error();
+ ^
+ at file:///[WILDCARD]/fail.ts:5:9
+
+
+ Error
+ throw new Error();
+ ^
+ at file:///[WILDCARD]/fail.ts:8:9
+
+
+ Error
+ throw new Error();
+ ^
+ at file:///[WILDCARD]/fail.ts:11:9
+
+
+ Error
+ throw new Error();
+ ^
+ at file:///[WILDCARD]/fail.ts:14:9
+
+
+ Error
+ throw new Error();
+ ^
+ at file:///[WILDCARD]/fail.ts:17:9
+
+
+ Error
+ throw new Error();
+ ^
+ at file:///[WILDCARD]/fail.ts:20:9
+
+
+ Error
+ throw new Error();
+ ^
+ at file:///[WILDCARD]/fail.ts:23:9
+
+
+ Error
+ throw new Error();
+ ^
+ at file:///[WILDCARD]/fail.ts:26:9
+
+
+ Error
+ throw new Error();
+ ^
+ at file:///[WILDCARD]/fail.ts:29:9
+
+
+
+error: Test failed
diff --git a/tests/specs/test/junit_multiple_test_files/pass.ts b/tests/specs/test/junit_multiple_test_files/pass.ts
new file mode 100644
index 00000000000000..c4c0f45dcdb73a
--- /dev/null
+++ b/tests/specs/test/junit_multiple_test_files/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/specs/test/junit_nested/__test__.jsonc b/tests/specs/test/junit_nested/__test__.jsonc
new file mode 100644
index 00000000000000..79b73474d507d3
--- /dev/null
+++ b/tests/specs/test/junit_nested/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --reporter junit main.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/junit_nested/main.out b/tests/specs/test/junit_nested/main.out
new file mode 100644
index 00000000000000..f2ac00f2993657
--- /dev/null
+++ b/tests/specs/test/junit_nested/main.out
@@ -0,0 +1,47 @@
+Check file:///[WILDCARD]/main.ts
+
+
+
+
+ 1 test step failed.
+
+
+ 2 test steps failed.
+
+
+
+
+
+
+ Error: Fail.
+ throw new Error("Fail.");
+ ^
+ at file:///[WILDCARD]/main.ts:4:11
+ [WILDCARD]
+
+
+ 1 test step failed.
+
+
+
+
+ Error: Fail.
+ throw new Error("Fail.");
+ ^
+ at file:///[WILDCARD]/main.ts:12:13
+ [WILDCARD]
+
+
+ Error: Fail.
+ throw new Error("Fail.");
+ ^
+ at file:///[WILDCARD]/main.ts:16:11
+ [WILDCARD]
+
+
+
+
+
+
+
+error: Test failed
diff --git a/tests/testdata/test/nested_failures.ts b/tests/specs/test/junit_nested/main.ts
similarity index 100%
rename from tests/testdata/test/nested_failures.ts
rename to tests/specs/test/junit_nested/main.ts
diff --git a/tests/specs/test/load_unload/__test__.jsonc b/tests/specs/test/load_unload/__test__.jsonc
new file mode 100644
index 00000000000000..e1ed1b926cbf49
--- /dev/null
+++ b/tests/specs/test/load_unload/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/load_unload.out b/tests/specs/test/load_unload/main.out
similarity index 77%
rename from tests/testdata/test/load_unload.out
rename to tests/specs/test/load_unload/main.out
index 75187fa7be2470..6a818d911b096b 100644
--- a/tests/testdata/test/load_unload.out
+++ b/tests/specs/test/load_unload/main.out
@@ -1,8 +1,8 @@
-Check [WILDCARD]/load_unload.ts
+Check [WILDCARD]/main.ts
------- pre-test output -------
load
----- pre-test output end -----
-running 1 test from [WILDCARD]/load_unload.ts
+running 1 test from [WILDCARD]/main.ts
test ...
------- output -------
test
diff --git a/tests/testdata/test/load_unload.ts b/tests/specs/test/load_unload/main.ts
similarity index 100%
rename from tests/testdata/test/load_unload.ts
rename to tests/specs/test/load_unload/main.ts
diff --git a/tests/specs/test/markdown/__test__.jsonc b/tests/specs/test/markdown/__test__.jsonc
new file mode 100644
index 00000000000000..558106d555e362
--- /dev/null
+++ b/tests/specs/test/markdown/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --doc --allow-all main.md",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/markdown.md b/tests/specs/test/markdown/main.md
similarity index 100%
rename from tests/testdata/test/markdown.md
rename to tests/specs/test/markdown/main.md
diff --git a/tests/specs/test/markdown/main.out b/tests/specs/test/markdown/main.out
new file mode 100644
index 00000000000000..30327c72f70088
--- /dev/null
+++ b/tests/specs/test/markdown/main.out
@@ -0,0 +1,7 @@
+Check [WILDCARD]/main.md$11-14.js
+Check [WILDCARD]/main.md$17-20.ts
+Check [WILDCARD]/main.md$29-32.ts
+error: TS2322 [ERROR]: Type 'number' is not assignable to type 'string'.
+const a: string = 42;
+ ^
+ at [WILDCARD]/main.md$29-32.ts:1:7
diff --git a/tests/specs/test/markdown_full_block_names/__test__.jsonc b/tests/specs/test/markdown_full_block_names/__test__.jsonc
new file mode 100644
index 00000000000000..558106d555e362
--- /dev/null
+++ b/tests/specs/test/markdown_full_block_names/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --doc --allow-all main.md",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/markdown_full_block_names.md b/tests/specs/test/markdown_full_block_names/main.md
similarity index 100%
rename from tests/testdata/test/markdown_full_block_names.md
rename to tests/specs/test/markdown_full_block_names/main.md
diff --git a/tests/specs/test/markdown_full_block_names/main.out b/tests/specs/test/markdown_full_block_names/main.out
new file mode 100644
index 00000000000000..9e64522dd225ab
--- /dev/null
+++ b/tests/specs/test/markdown_full_block_names/main.out
@@ -0,0 +1,6 @@
+Check [WILDCARD]/main.md$5-8.js
+Check [WILDCARD]/main.md$17-20.ts
+error: TS2322 [ERROR]: Type 'number' is not assignable to type 'string'.
+const a: string = 42;
+ ^
+ at [WILDCARD]/main.md$17-20.ts:1:7
diff --git a/tests/specs/test/markdown_ignore_html_comment/__test__.jsonc b/tests/specs/test/markdown_ignore_html_comment/__test__.jsonc
new file mode 100644
index 00000000000000..558106d555e362
--- /dev/null
+++ b/tests/specs/test/markdown_ignore_html_comment/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --doc --allow-all main.md",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/markdown_with_comment.md b/tests/specs/test/markdown_ignore_html_comment/main.md
similarity index 100%
rename from tests/testdata/test/markdown_with_comment.md
rename to tests/specs/test/markdown_ignore_html_comment/main.md
diff --git a/tests/specs/test/markdown_ignore_html_comment/main.out b/tests/specs/test/markdown_ignore_html_comment/main.out
new file mode 100644
index 00000000000000..4de73884535afb
--- /dev/null
+++ b/tests/specs/test/markdown_ignore_html_comment/main.out
@@ -0,0 +1,5 @@
+Check [WILDCARD]/main.md$34-37.ts
+error: TS2322 [ERROR]: Type 'number' is not assignable to type 'string'.
+const a: string = 42;
+ ^
+ at [WILDCARD]/main.md$34-37.ts:1:7
diff --git a/tests/specs/test/markdown_windows/__test__.jsonc b/tests/specs/test/markdown_windows/__test__.jsonc
new file mode 100644
index 00000000000000..558106d555e362
--- /dev/null
+++ b/tests/specs/test/markdown_windows/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --doc --allow-all main.md",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/markdown_windows.md b/tests/specs/test/markdown_windows/main.md
similarity index 100%
rename from tests/testdata/test/markdown_windows.md
rename to tests/specs/test/markdown_windows/main.md
diff --git a/tests/specs/test/markdown_windows/main.out b/tests/specs/test/markdown_windows/main.out
new file mode 100644
index 00000000000000..30327c72f70088
--- /dev/null
+++ b/tests/specs/test/markdown_windows/main.out
@@ -0,0 +1,7 @@
+Check [WILDCARD]/main.md$11-14.js
+Check [WILDCARD]/main.md$17-20.ts
+Check [WILDCARD]/main.md$29-32.ts
+error: TS2322 [ERROR]: Type 'number' is not assignable to type 'string'.
+const a: string = 42;
+ ^
+ at [WILDCARD]/main.md$29-32.ts:1:7
diff --git a/tests/specs/test/meta/__test__.jsonc b/tests/specs/test/meta/__test__.jsonc
new file mode 100644
index 00000000000000..e1ed1b926cbf49
--- /dev/null
+++ b/tests/specs/test/meta/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/meta.out b/tests/specs/test/meta/main.out
similarity index 60%
rename from tests/testdata/test/meta.out
rename to tests/specs/test/meta/main.out
index c46315ece71e62..06a0daa7b8ddc6 100644
--- a/tests/testdata/test/meta.out
+++ b/tests/specs/test/meta/main.out
@@ -1,9 +1,9 @@
-Check [WILDCARD]/test/meta.ts
-running 1 test from ./test/meta.ts
+Check [WILDCARD]/main.ts
+running 1 test from ./main.ts
check values ...
------- output -------
import.meta.main: false
-import.meta.url: [WILDCARD]/test/meta.ts
+import.meta.url: [WILDCARD]/main.ts
----- output end -----
check values ... ok ([WILDCARD])
diff --git a/tests/testdata/test/meta.ts b/tests/specs/test/meta/main.ts
similarity index 100%
rename from tests/testdata/test/meta.ts
rename to tests/specs/test/meta/main.ts
diff --git a/tests/specs/test/no_check/__test__.jsonc b/tests/specs/test/no_check/__test__.jsonc
new file mode 100644
index 00000000000000..3d0c743360872b
--- /dev/null
+++ b/tests/specs/test/no_check/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --no-check main.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/no_check.out b/tests/specs/test/no_check/main.out
similarity index 77%
rename from tests/testdata/test/no_check.out
rename to tests/specs/test/no_check/main.out
index 66ad07e2684476..cd9e7d0fae6cd9 100644
--- a/tests/testdata/test/no_check.out
+++ b/tests/specs/test/no_check/main.out
@@ -1,8 +1,8 @@
-Uncaught error from ./test/no_check.ts FAILED
+Uncaught error from ./main.ts FAILED
ERRORS
-./test/no_check.ts (uncaught error)
+./main.ts (uncaught error)
error: (in promise) TypeError: Cannot read properties of undefined (reading 'fn')
Deno.test();
^
@@ -12,7 +12,7 @@ It most likely originated from a dangling promise, event/timeout handler or top-
FAILURES
-./test/no_check.ts (uncaught error)
+./main.ts (uncaught error)
FAILED | 0 passed | 1 failed ([WILDCARD])
diff --git a/tests/testdata/test/no_check.ts b/tests/specs/test/no_check/main.ts
similarity index 100%
rename from tests/testdata/test/no_check.ts
rename to tests/specs/test/no_check/main.ts
diff --git a/tests/specs/test/no_color/__test__.jsonc b/tests/specs/test/no_color/__test__.jsonc
new file mode 100644
index 00000000000000..154baa8c19183a
--- /dev/null
+++ b/tests/specs/test/no_color/__test__.jsonc
@@ -0,0 +1,8 @@
+{
+ "args": "test main.ts",
+ "exitCode": 1,
+ "envs": {
+ "NO_COLOR": "1"
+ },
+ "output": "main.out"
+}
diff --git a/tests/specs/test/no_color/main.out b/tests/specs/test/no_color/main.out
new file mode 100644
index 00000000000000..834bbaf6e4a8e7
--- /dev/null
+++ b/tests/specs/test/no_color/main.out
@@ -0,0 +1,21 @@
+Check [WILDCARD]/main.ts
+running 3 tests from ./main.ts
+success ... ok ([WILDCARD])
+fail ... FAILED ([WILDCARD])
+ignored ... ignored ([WILDCARD])
+
+ ERRORS
+
+fail => ./main.ts:6:6
+error: Error: fail
+ throw new Error("fail");
+ ^
+ at fn ([WILDCARD]/main.ts:9:11)
+
+ FAILURES
+
+fail => ./main.ts:6:6
+
+FAILED | 1 passed | 1 failed | 1 ignored ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/no_color.ts b/tests/specs/test/no_color/main.ts
similarity index 100%
rename from tests/testdata/test/no_color.ts
rename to tests/specs/test/no_color/main.ts
diff --git a/tests/specs/test/no_prompt_by_default/__test__.jsonc b/tests/specs/test/no_prompt_by_default/__test__.jsonc
new file mode 100644
index 00000000000000..a02376f8717c8d
--- /dev/null
+++ b/tests/specs/test/no_prompt_by_default/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --quiet main.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/no_prompt_by_default.out b/tests/specs/test/no_prompt_by_default/main.out
similarity index 59%
rename from tests/testdata/test/no_prompt_by_default.out
rename to tests/specs/test/no_prompt_by_default/main.out
index cd40fab53f0781..e0d1290ecd85d3 100644
--- a/tests/testdata/test/no_prompt_by_default.out
+++ b/tests/specs/test/no_prompt_by_default/main.out
@@ -1,15 +1,15 @@
-running 1 test from ./test/no_prompt_by_default.ts
+running 1 test from ./main.ts
no prompt ... FAILED ([WILDCARD]s)
ERRORS
-no prompt => ./test/no_prompt_by_default.ts:[WILDCARD]
+no prompt => ./main.ts:[WILDCARD]
error: NotCapable: 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]
+no prompt => ./main.ts:[WILDCARD]
FAILED | 0 passed | 1 failed ([WILDCARD]s)
diff --git a/tests/testdata/test/no_prompt_by_default.ts b/tests/specs/test/no_prompt_by_default/main.ts
similarity index 100%
rename from tests/testdata/test/no_prompt_by_default.ts
rename to tests/specs/test/no_prompt_by_default/main.ts
diff --git a/tests/specs/test/no_prompt_with_denied_perms/__test__.jsonc b/tests/specs/test/no_prompt_with_denied_perms/__test__.jsonc
new file mode 100644
index 00000000000000..26050de002b00e
--- /dev/null
+++ b/tests/specs/test/no_prompt_with_denied_perms/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --quiet --allow-read main.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/no_prompt_with_denied_perms.out b/tests/specs/test/no_prompt_with_denied_perms/main.out
similarity index 56%
rename from tests/testdata/test/no_prompt_with_denied_perms.out
rename to tests/specs/test/no_prompt_with_denied_perms/main.out
index f6c8ec82662e25..e0d1290ecd85d3 100644
--- a/tests/testdata/test/no_prompt_with_denied_perms.out
+++ b/tests/specs/test/no_prompt_with_denied_perms/main.out
@@ -1,15 +1,15 @@
-running 1 test from ./test/no_prompt_with_denied_perms.ts
+running 1 test from ./main.ts
no prompt ... FAILED ([WILDCARD]s)
ERRORS
-no prompt => ./test/no_prompt_with_denied_perms.ts:[WILDCARD]
+no prompt => ./main.ts:[WILDCARD]
error: NotCapable: 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]
+no prompt => ./main.ts:[WILDCARD]
FAILED | 0 passed | 1 failed ([WILDCARD]s)
diff --git a/tests/testdata/test/no_prompt_with_denied_perms.ts b/tests/specs/test/no_prompt_with_denied_perms/main.ts
similarity index 100%
rename from tests/testdata/test/no_prompt_with_denied_perms.ts
rename to tests/specs/test/no_prompt_with_denied_perms/main.ts
diff --git a/tests/specs/test/no_run/__test__.jsonc b/tests/specs/test/no_run/__test__.jsonc
new file mode 100644
index 00000000000000..6a6d714eeb9cbb
--- /dev/null
+++ b/tests/specs/test/no_run/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --no-run main.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/no_run.out b/tests/specs/test/no_run/main.out
similarity index 61%
rename from tests/testdata/test/no_run.out
rename to tests/specs/test/no_run/main.out
index 5edf03fe0f6914..ff988494335338 100644
--- a/tests/testdata/test/no_run.out
+++ b/tests/specs/test/no_run/main.out
@@ -1,5 +1,5 @@
-Check [WILDCARD]/test/no_run.ts
+Check [WILDCARD]/main.ts
error: TS2322 [ERROR]: Type 'number' is not assignable to type 'string'.
const _value: string = 1;
~~~~~~
- at [WILDCARD]/test/no_run.ts:1:7
+ at [WILDCARD]/main.ts:1:7
diff --git a/tests/testdata/test/no_run.ts b/tests/specs/test/no_run/main.ts
similarity index 100%
rename from tests/testdata/test/no_run.ts
rename to tests/specs/test/no_run/main.ts
diff --git a/tests/specs/test/non_error_thrown/__test__.jsonc b/tests/specs/test/non_error_thrown/__test__.jsonc
new file mode 100644
index 00000000000000..a02376f8717c8d
--- /dev/null
+++ b/tests/specs/test/non_error_thrown/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --quiet main.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/non_error_thrown/main.out b/tests/specs/test/non_error_thrown/main.out
new file mode 100644
index 00000000000000..7e0de8028b25c4
--- /dev/null
+++ b/tests/specs/test/non_error_thrown/main.out
@@ -0,0 +1,40 @@
+running 6 tests from [WILDCARD]/main.ts
+foo ... FAILED ([WILDCARD])
+bar ... FAILED ([WILDCARD])
+baz ... FAILED ([WILDCARD])
+qux ... FAILED ([WILDCARD])
+quux ... FAILED ([WILDCARD])
+quuz ... FAILED ([WILDCARD])
+
+ ERRORS
+
+foo => [WILDCARD]/main.ts:1:6
+error: undefined
+
+bar => [WILDCARD]/main.ts:5:6
+error: null
+
+baz => [WILDCARD]/main.ts:9:6
+error: 123
+
+qux => [WILDCARD]/main.ts:13:6
+error: "Hello, world!"
+
+quux => [WILDCARD]/main.ts:17:6
+error: [ 1, 2, 3 ]
+
+quuz => [WILDCARD]/main.ts:21:6
+error: { a: "Hello, world!", b: [ 1, 2, 3 ] }
+
+ FAILURES
+
+foo => [WILDCARD]/main.ts:1:6
+bar => [WILDCARD]/main.ts:5:6
+baz => [WILDCARD]/main.ts:9:6
+qux => [WILDCARD]/main.ts:13:6
+quux => [WILDCARD]/main.ts:17:6
+quuz => [WILDCARD]/main.ts:21:6
+
+FAILED | 0 passed | 6 failed ([WILDCARD])
+
+error: Test failed
diff --git a/tests/testdata/test/non_error_thrown.ts b/tests/specs/test/non_error_thrown/main.ts
similarity index 100%
rename from tests/testdata/test/non_error_thrown.ts
rename to tests/specs/test/non_error_thrown/main.ts
diff --git a/tests/specs/test/only/__test__.jsonc b/tests/specs/test/only/__test__.jsonc
new file mode 100644
index 00000000000000..2c4ae3868d7fcb
--- /dev/null
+++ b/tests/specs/test/only/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/only.out b/tests/specs/test/only/main.out
similarity index 71%
rename from tests/testdata/test/only.out
rename to tests/specs/test/only/main.out
index 2e66ed22b4a805..e1c745bcdfd0f5 100644
--- a/tests/testdata/test/only.out
+++ b/tests/specs/test/only/main.out
@@ -1,5 +1,5 @@
-Check [WILDCARD]/test/only.ts
-running 2 tests from ./test/only.ts
+Check [WILDCARD]/main.ts
+running 2 tests from ./main.ts
only ... ok ([WILDCARD])
only2 ... ok ([WILDCARD])
diff --git a/tests/testdata/test/only.ts b/tests/specs/test/only/main.ts
similarity index 100%
rename from tests/testdata/test/only.ts
rename to tests/specs/test/only/main.ts
diff --git a/tests/specs/test/ops_sanitizer_closed_inside_started_before/__test__.jsonc b/tests/specs/test/ops_sanitizer_closed_inside_started_before/__test__.jsonc
new file mode 100644
index 00000000000000..a427ea6b8686f9
--- /dev/null
+++ b/tests/specs/test/ops_sanitizer_closed_inside_started_before/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --trace-leaks ops_sanitizer_closed_inside_started_before.ts",
+ "exitCode": 1,
+ "output": "ops_sanitizer_closed_inside_started_before.out"
+}
diff --git a/tests/testdata/test/sanitizer/ops_sanitizer_closed_inside_started_before.out b/tests/specs/test/ops_sanitizer_closed_inside_started_before/ops_sanitizer_closed_inside_started_before.out
similarity index 100%
rename from tests/testdata/test/sanitizer/ops_sanitizer_closed_inside_started_before.out
rename to tests/specs/test/ops_sanitizer_closed_inside_started_before/ops_sanitizer_closed_inside_started_before.out
diff --git a/tests/testdata/test/sanitizer/ops_sanitizer_closed_inside_started_before.ts b/tests/specs/test/ops_sanitizer_closed_inside_started_before/ops_sanitizer_closed_inside_started_before.ts
similarity index 100%
rename from tests/testdata/test/sanitizer/ops_sanitizer_closed_inside_started_before.ts
rename to tests/specs/test/ops_sanitizer_closed_inside_started_before/ops_sanitizer_closed_inside_started_before.ts
diff --git a/tests/specs/test/ops_sanitizer_multiple_timeout_tests/__test__.jsonc b/tests/specs/test/ops_sanitizer_multiple_timeout_tests/__test__.jsonc
new file mode 100644
index 00000000000000..71776d566c7062
--- /dev/null
+++ b/tests/specs/test/ops_sanitizer_multiple_timeout_tests/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --trace-leaks ops_sanitizer_multiple_timeout_tests.ts",
+ "exitCode": 1,
+ "output": "ops_sanitizer_multiple_timeout_tests.out"
+}
diff --git a/tests/testdata/test/sanitizer/ops_sanitizer_multiple_timeout_tests.out b/tests/specs/test/ops_sanitizer_multiple_timeout_tests/ops_sanitizer_multiple_timeout_tests.out
similarity index 100%
rename from tests/testdata/test/sanitizer/ops_sanitizer_multiple_timeout_tests.out
rename to tests/specs/test/ops_sanitizer_multiple_timeout_tests/ops_sanitizer_multiple_timeout_tests.out
diff --git a/tests/testdata/test/sanitizer/ops_sanitizer_multiple_timeout_tests.ts b/tests/specs/test/ops_sanitizer_multiple_timeout_tests/ops_sanitizer_multiple_timeout_tests.ts
similarity index 100%
rename from tests/testdata/test/sanitizer/ops_sanitizer_multiple_timeout_tests.ts
rename to tests/specs/test/ops_sanitizer_multiple_timeout_tests/ops_sanitizer_multiple_timeout_tests.ts
diff --git a/tests/specs/test/ops_sanitizer_multiple_timeout_tests_no_trace/__test__.jsonc b/tests/specs/test/ops_sanitizer_multiple_timeout_tests_no_trace/__test__.jsonc
new file mode 100644
index 00000000000000..c1e1438cda61dd
--- /dev/null
+++ b/tests/specs/test/ops_sanitizer_multiple_timeout_tests_no_trace/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test ops_sanitizer_multiple_timeout_tests.ts",
+ "exitCode": 1,
+ "output": "ops_sanitizer_multiple_timeout_tests_no_trace.out"
+}
diff --git a/tests/specs/test/ops_sanitizer_multiple_timeout_tests_no_trace/ops_sanitizer_multiple_timeout_tests.ts b/tests/specs/test/ops_sanitizer_multiple_timeout_tests_no_trace/ops_sanitizer_multiple_timeout_tests.ts
new file mode 100644
index 00000000000000..1f52d481f6adce
--- /dev/null
+++ b/tests/specs/test/ops_sanitizer_multiple_timeout_tests_no_trace/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/sanitizer/ops_sanitizer_multiple_timeout_tests_no_trace.out b/tests/specs/test/ops_sanitizer_multiple_timeout_tests_no_trace/ops_sanitizer_multiple_timeout_tests_no_trace.out
similarity index 100%
rename from tests/testdata/test/sanitizer/ops_sanitizer_multiple_timeout_tests_no_trace.out
rename to tests/specs/test/ops_sanitizer_multiple_timeout_tests_no_trace/ops_sanitizer_multiple_timeout_tests_no_trace.out
diff --git a/tests/specs/test/ops_sanitizer_nexttick/__test__.jsonc b/tests/specs/test/ops_sanitizer_nexttick/__test__.jsonc
new file mode 100644
index 00000000000000..29604e2fd76e29
--- /dev/null
+++ b/tests/specs/test/ops_sanitizer_nexttick/__test__.jsonc
@@ -0,0 +1,4 @@
+{
+ "args": "test --no-check ops_sanitizer_nexttick.ts",
+ "output": "ops_sanitizer_nexttick.out"
+}
diff --git a/tests/testdata/test/sanitizer/ops_sanitizer_nexttick.out b/tests/specs/test/ops_sanitizer_nexttick/ops_sanitizer_nexttick.out
similarity index 100%
rename from tests/testdata/test/sanitizer/ops_sanitizer_nexttick.out
rename to tests/specs/test/ops_sanitizer_nexttick/ops_sanitizer_nexttick.out
diff --git a/tests/testdata/test/sanitizer/ops_sanitizer_nexttick.ts b/tests/specs/test/ops_sanitizer_nexttick/ops_sanitizer_nexttick.ts
similarity index 100%
rename from tests/testdata/test/sanitizer/ops_sanitizer_nexttick.ts
rename to tests/specs/test/ops_sanitizer_nexttick/ops_sanitizer_nexttick.ts
diff --git a/tests/specs/test/ops_sanitizer_tcp/__test__.jsonc b/tests/specs/test/ops_sanitizer_tcp/__test__.jsonc
new file mode 100644
index 00000000000000..48f9404f4bdfd5
--- /dev/null
+++ b/tests/specs/test/ops_sanitizer_tcp/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --allow-net --trace-leaks ops_sanitizer_tcp.ts",
+ "exitCode": 1,
+ "output": "ops_sanitizer_tcp.out"
+}
diff --git a/tests/testdata/test/sanitizer/ops_sanitizer_tcp.out b/tests/specs/test/ops_sanitizer_tcp/ops_sanitizer_tcp.out
similarity index 100%
rename from tests/testdata/test/sanitizer/ops_sanitizer_tcp.out
rename to tests/specs/test/ops_sanitizer_tcp/ops_sanitizer_tcp.out
diff --git a/tests/testdata/test/sanitizer/ops_sanitizer_tcp.ts b/tests/specs/test/ops_sanitizer_tcp/ops_sanitizer_tcp.ts
similarity index 100%
rename from tests/testdata/test/sanitizer/ops_sanitizer_tcp.ts
rename to tests/specs/test/ops_sanitizer_tcp/ops_sanitizer_tcp.ts
diff --git a/tests/specs/test/ops_sanitizer_timeout_failure/__test__.jsonc b/tests/specs/test/ops_sanitizer_timeout_failure/__test__.jsonc
new file mode 100644
index 00000000000000..c044382baf91dc
--- /dev/null
+++ b/tests/specs/test/ops_sanitizer_timeout_failure/__test__.jsonc
@@ -0,0 +1,4 @@
+{
+ "args": "test ops_sanitizer_timeout_failure.ts",
+ "output": "ops_sanitizer_timeout_failure.out"
+}
diff --git a/tests/testdata/test/sanitizer/ops_sanitizer_timeout_failure.out b/tests/specs/test/ops_sanitizer_timeout_failure/ops_sanitizer_timeout_failure.out
similarity index 100%
rename from tests/testdata/test/sanitizer/ops_sanitizer_timeout_failure.out
rename to tests/specs/test/ops_sanitizer_timeout_failure/ops_sanitizer_timeout_failure.out
diff --git a/tests/testdata/test/sanitizer/ops_sanitizer_timeout_failure.ts b/tests/specs/test/ops_sanitizer_timeout_failure/ops_sanitizer_timeout_failure.ts
similarity index 100%
rename from tests/testdata/test/sanitizer/ops_sanitizer_timeout_failure.ts
rename to tests/specs/test/ops_sanitizer_timeout_failure/ops_sanitizer_timeout_failure.ts
diff --git a/tests/specs/test/ops_sanitizer_unstable/__test__.jsonc b/tests/specs/test/ops_sanitizer_unstable/__test__.jsonc
new file mode 100644
index 00000000000000..b9ec3c87846c41
--- /dev/null
+++ b/tests/specs/test/ops_sanitizer_unstable/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --trace-leaks ops_sanitizer_unstable.ts",
+ "exitCode": 1,
+ "output": "ops_sanitizer_unstable.out"
+}
diff --git a/tests/testdata/test/sanitizer/ops_sanitizer_unstable.out b/tests/specs/test/ops_sanitizer_unstable/ops_sanitizer_unstable.out
similarity index 100%
rename from tests/testdata/test/sanitizer/ops_sanitizer_unstable.out
rename to tests/specs/test/ops_sanitizer_unstable/ops_sanitizer_unstable.out
diff --git a/tests/testdata/test/sanitizer/ops_sanitizer_unstable.ts b/tests/specs/test/ops_sanitizer_unstable/ops_sanitizer_unstable.ts
similarity index 100%
rename from tests/testdata/test/sanitizer/ops_sanitizer_unstable.ts
rename to tests/specs/test/ops_sanitizer_unstable/ops_sanitizer_unstable.ts
diff --git a/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/__test__.jsonc b/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/__test__.jsonc
new file mode 100644
index 00000000000000..ec4ab0127a0f2b
--- /dev/null
+++ b/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test",
+ "output": "main.out",
+ "exitCode": 0
+}
diff --git a/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/actually_excluded.test.ts b/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/actually_excluded.test.ts
new file mode 100644
index 00000000000000..da1a8f7a04eebb
--- /dev/null
+++ b/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/actually_excluded.test.ts
@@ -0,0 +1 @@
+Deno.test("test3", () => {});
diff --git a/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/deno.json b/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/deno.json
new file mode 100644
index 00000000000000..e9c181e7717559
--- /dev/null
+++ b/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/deno.json
@@ -0,0 +1,6 @@
+{
+ "test": {
+ "exclude": ["!excluded.test.ts"]
+ },
+ "exclude": ["excluded.test.ts", "actually_excluded.test.ts"]
+}
diff --git a/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/excluded.test.ts b/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/excluded.test.ts
new file mode 100644
index 00000000000000..afb582199b43a9
--- /dev/null
+++ b/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/excluded.test.ts
@@ -0,0 +1 @@
+Deno.test("test2", () => {});
diff --git a/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/main.out b/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/main.out
new file mode 100644
index 00000000000000..6ed39696e2a7eb
--- /dev/null
+++ b/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/main.out
@@ -0,0 +1,9 @@
+Check [WILDCARD]/excluded.test.ts
+Check [WILDCARD]/main.test.ts
+running 1 test from ./excluded.test.ts
+test2 ... ok ([WILDCARD])
+running 1 test from ./main.test.ts
+test1 ... ok ([WILDCARD])
+
+ok | 2 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/main.test.ts b/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/main.test.ts
new file mode 100644
index 00000000000000..8d0131f756a088
--- /dev/null
+++ b/tests/specs/test/opt_out_top_level_exclude_via_test_unexclude/main.test.ts
@@ -0,0 +1 @@
+Deno.test("test1", () => {});
diff --git a/tests/specs/test/overloads/__test__.jsonc b/tests/specs/test/overloads/__test__.jsonc
new file mode 100644
index 00000000000000..955107ebc2db22
--- /dev/null
+++ b/tests/specs/test/overloads/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "output": "main.out",
+ "exitCode": 0
+}
diff --git a/tests/testdata/test/overloads.out b/tests/specs/test/overloads/main.out
similarity index 73%
rename from tests/testdata/test/overloads.out
rename to tests/specs/test/overloads/main.out
index 87a3f07cb02458..92ec46d0b39148 100644
--- a/tests/testdata/test/overloads.out
+++ b/tests/specs/test/overloads/main.out
@@ -1,5 +1,5 @@
-Check [WILDCARD]/test/overloads.ts
-running 6 tests from ./test/overloads.ts
+Check [WILDCARD]/overloads/main.ts
+running 6 tests from ./main.ts
test0 ... ok ([WILDCARD])
test1 ... ok ([WILDCARD])
test2 ... ok ([WILDCARD])
diff --git a/tests/testdata/test/overloads.ts b/tests/specs/test/overloads/main.ts
similarity index 100%
rename from tests/testdata/test/overloads.ts
rename to tests/specs/test/overloads/main.ts
diff --git a/tests/specs/test/parallel_flag/__test__.jsonc b/tests/specs/test/parallel_flag/__test__.jsonc
new file mode 100644
index 00000000000000..0c279e11d395a6
--- /dev/null
+++ b/tests/specs/test/parallel_flag/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts --parallel",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/parallel_flag/main.out b/tests/specs/test/parallel_flag/main.out
new file mode 100644
index 00000000000000..54efc4cad41890
--- /dev/null
+++ b/tests/specs/test/parallel_flag/main.out
@@ -0,0 +1,5 @@
+Check [WILDCARD]/main.ts
+./main.ts => test ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/short-pass.ts b/tests/specs/test/parallel_flag/main.ts
similarity index 100%
rename from tests/testdata/test/short-pass.ts
rename to tests/specs/test/parallel_flag/main.ts
diff --git a/tests/specs/test/parallel_flag_with_env_variables/__test__.jsonc b/tests/specs/test/parallel_flag_with_env_variables/__test__.jsonc
new file mode 100644
index 00000000000000..330313467f932f
--- /dev/null
+++ b/tests/specs/test/parallel_flag_with_env_variables/__test__.jsonc
@@ -0,0 +1,6 @@
+{
+ "args": "test main.ts --parallel",
+ "exitCode": 0,
+ "envs": { "DENO_JOBS": "2" },
+ "output": "main.out"
+}
diff --git a/tests/specs/test/parallel_flag_with_env_variables/main.out b/tests/specs/test/parallel_flag_with_env_variables/main.out
new file mode 100644
index 00000000000000..54efc4cad41890
--- /dev/null
+++ b/tests/specs/test/parallel_flag_with_env_variables/main.out
@@ -0,0 +1,5 @@
+Check [WILDCARD]/main.ts
+./main.ts => test ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/specs/test/parallel_flag_with_env_variables/main.ts b/tests/specs/test/parallel_flag_with_env_variables/main.ts
new file mode 100644
index 00000000000000..03818ae8d43fb6
--- /dev/null
+++ b/tests/specs/test/parallel_flag_with_env_variables/main.ts
@@ -0,0 +1 @@
+Deno.test("test", () => {});
diff --git a/tests/specs/test/parallel_output/__test__.jsonc b/tests/specs/test/parallel_output/__test__.jsonc
new file mode 100644
index 00000000000000..dde5a1c6f6e3d5
--- /dev/null
+++ b/tests/specs/test/parallel_output/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --parallel --reload main.ts",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/parallel_output/main.out b/tests/specs/test/parallel_output/main.out
new file mode 100644
index 00000000000000..3d020a71ff8de4
--- /dev/null
+++ b/tests/specs/test/parallel_output/main.out
@@ -0,0 +1,56 @@
+Check [WILDCARD]/main.ts
+./main.ts => step output ... step 1 ... ok ([WILDCARD]s)
+./main.ts => step output ... step 2 ... ok ([WILDCARD]s)
+------- output -------
+Hello, world! (from step 3)
+----- output end -----
+./main.ts => step output ... step 3 ... ok ([WILDCARD]s)
+------- output -------
+Hello, world! (from step 4)
+----- output end -----
+./main.ts => step output ... step 4 ... ok ([WILDCARD]s)
+./main.ts => step output ... ok ([WILDCARD]s)
+./main.ts => step failures ... step 1 ... ok ([WILDCARD]s)
+./main.ts => step failures ... step 2 ... FAILED ([WILDCARD]s)
+./main.ts => step failures ... step 3 ... FAILED ([WILDCARD]s)
+./main.ts => step failures ... FAILED (due to 2 failed steps) ([WILDCARD]s)
+./main.ts => step nested failure ... step 1 ... inner 1 ... ok ([WILDCARD]s)
+./main.ts => step nested failure ... step 1 ... inner 2 ... FAILED ([WILDCARD]s)
+./main.ts => step nested failure ... step 1 ... FAILED (due to 1 failed step) ([WILDCARD]s)
+./main.ts => step nested failure ... FAILED (due to 1 failed step) ([WILDCARD]s)
+
+ ERRORS
+
+step failures ... step 2 => ./main.ts:14:11
+error: Error: Fail.
+ throw new Error("Fail.");
+ ^
+ at file:///[WILDCARD]/main.ts:15:11
+ at [WILDCARD]
+ at file:///[WILDCARD]/main.ts:14:11
+
+step failures ... step 3 => ./main.ts:17:11
+error: Error: Fail.
+ await t.step("step 3", () => Promise.reject(new Error("Fail.")));
+ ^
+ at file:///[WILDCARD]/main.ts:17:47
+ at [WILDCARD]
+ at file:///[WILDCARD]/main.ts:17:11
+
+step nested failure ... step 1 ... inner 2 => ./main.ts:23:13
+error: Error: Failed.
+ throw new Error("Failed.");
+ ^
+ at file:///[WILDCARD]/main.ts:24:13
+ at [WILDCARD]
+ at file:///[WILDCARD]/main.ts:23:13
+
+ FAILURES
+
+step failures ... step 2 => ./main.ts:14:11
+step failures ... step 3 => ./main.ts:17:11
+step nested failure ... step 1 ... inner 2 => ./main.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/specs/test/parallel_output/main.ts
similarity index 100%
rename from tests/testdata/test/parallel_output.ts
rename to tests/specs/test/parallel_output/main.ts
diff --git a/tests/specs/test/pass/__test__.jsonc b/tests/specs/test/pass/__test__.jsonc
new file mode 100644
index 00000000000000..955107ebc2db22
--- /dev/null
+++ b/tests/specs/test/pass/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "output": "main.out",
+ "exitCode": 0
+}
diff --git a/tests/testdata/test/pass.out b/tests/specs/test/pass/main.out
similarity index 93%
rename from tests/testdata/test/pass.out
rename to tests/specs/test/pass/main.out
index 08b9f5a52bda1a..d2541d08dd74a5 100644
--- a/tests/testdata/test/pass.out
+++ b/tests/specs/test/pass/main.out
@@ -1,5 +1,5 @@
-Check [WILDCARD]/test/pass.ts
-running 16 tests from ./test/pass.ts
+Check [WILDCARD]/main.ts
+running 16 tests from ./main.ts
test 0 ... ok ([WILDCARD])
test 1 ... ok ([WILDCARD])
test 2 ... ok ([WILDCARD])
diff --git a/tests/specs/test/pass/main.ts b/tests/specs/test/pass/main.ts
new file mode 100644
index 00000000000000..c4c0f45dcdb73a
--- /dev/null
+++ b/tests/specs/test/pass/main.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/specs/test/quiet/__test__.jsonc b/tests/specs/test/quiet/__test__.jsonc
new file mode 100644
index 00000000000000..799bc6ff286065
--- /dev/null
+++ b/tests/specs/test/quiet/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --quiet main.ts",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/quiet.out b/tests/specs/test/quiet/main.out
similarity index 82%
rename from tests/testdata/test/quiet.out
rename to tests/specs/test/quiet/main.out
index 83dbe6ba909a08..5c72317f6945e4 100644
--- a/tests/testdata/test/quiet.out
+++ b/tests/specs/test/quiet/main.out
@@ -1,4 +1,4 @@
-running 4 tests from ./test/quiet.ts
+running 4 tests from ./main.ts
console.log ... ok ([WILDCARD])
console.error ... ok ([WILDCARD])
console.info ... ok ([WILDCARD])
diff --git a/tests/testdata/test/quiet.ts b/tests/specs/test/quiet/main.ts
similarity index 100%
rename from tests/testdata/test/quiet.ts
rename to tests/specs/test/quiet/main.ts
diff --git a/tests/specs/test/recursive_permissions_pledge/__test__.jsonc b/tests/specs/test/recursive_permissions_pledge/__test__.jsonc
new file mode 100644
index 00000000000000..7dfb5b7ff248f2
--- /dev/null
+++ b/tests/specs/test/recursive_permissions_pledge/__test__.jsonc
@@ -0,0 +1,8 @@
+{
+ "args": "test main.js",
+ "exitCode": 1,
+ "envs": {
+ "RUST_BACKTRACE": "0"
+ },
+ "output": "\n============================================================\nDeno has panicked. This is a bug in Deno. Please report this\nat https://github.com/denoland/deno/issues/new.\nIf you can reliably reproduce this panic, include the\nreproduction steps and re-run with the RUST_BACKTRACE=1 env\nvar set and include the backtrace in your report.\n\nPlatform: [WILDCARD]\nVersion: [WILDCARD]\nArgs: [[WILDCARD], \"test\", \"main.js\"]\n\nthread 'tokio-runtime-worker' panicked at [WILDCARD]testing.rs:[WILDCARD]:\npledge test permissions called before restoring previous pledge\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n"
+}
diff --git a/tests/testdata/test/recursive_permissions_pledge.js b/tests/specs/test/recursive_permissions_pledge/main.js
similarity index 100%
rename from tests/testdata/test/recursive_permissions_pledge.js
rename to tests/specs/test/recursive_permissions_pledge/main.js
diff --git a/tests/specs/test/report_error/__test__.jsonc b/tests/specs/test/report_error/__test__.jsonc
new file mode 100644
index 00000000000000..59774f938a836f
--- /dev/null
+++ b/tests/specs/test/report_error/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --quiet main.ts",
+ "output": "main.out",
+ "exitCode": 1
+}
diff --git a/tests/testdata/test/report_error.out b/tests/specs/test/report_error/main.out
similarity index 63%
rename from tests/testdata/test/report_error.out
rename to tests/specs/test/report_error/main.out
index 698550f97db023..5fe3a44238d9a0 100644
--- a/tests/testdata/test/report_error.out
+++ b/tests/specs/test/report_error/main.out
@@ -1,22 +1,22 @@
-running 2 tests from [WILDCARD]/report_error.ts
+running 2 tests from [WILDCARD]/main.ts
foo ...
-Uncaught error from [WILDCARD]/report_error.ts FAILED
+Uncaught error from [WILDCARD]/main.ts FAILED
foo ... cancelled (0ms)
bar ... cancelled (0ms)
ERRORS
-[WILDCARD]/report_error.ts (uncaught error)
+[WILDCARD]/main.ts (uncaught error)
error: Error: foo
reportError(new Error("foo"));
^
- at [WILDCARD]/report_error.ts:2:15
+ at [WILDCARD]/main.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)
+[WILDCARD]/main.ts (uncaught error)
FAILED | 0 passed | 3 failed ([WILDCARD])
diff --git a/tests/testdata/test/report_error.ts b/tests/specs/test/report_error/main.ts
similarity index 100%
rename from tests/testdata/test/report_error.ts
rename to tests/specs/test/report_error/main.ts
diff --git a/tests/specs/test/resource_sanitizer/__test__.jsonc b/tests/specs/test/resource_sanitizer/__test__.jsonc
new file mode 100644
index 00000000000000..38417fba24ff1f
--- /dev/null
+++ b/tests/specs/test/resource_sanitizer/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --allow-read resource_sanitizer.ts",
+ "output": "resource_sanitizer.out",
+ "exitCode": 1
+}
diff --git a/tests/testdata/test/sanitizer/resource_sanitizer.out b/tests/specs/test/resource_sanitizer/resource_sanitizer.out
similarity index 100%
rename from tests/testdata/test/sanitizer/resource_sanitizer.out
rename to tests/specs/test/resource_sanitizer/resource_sanitizer.out
diff --git a/tests/testdata/test/sanitizer/resource_sanitizer.ts b/tests/specs/test/resource_sanitizer/resource_sanitizer.ts
similarity index 51%
rename from tests/testdata/test/sanitizer/resource_sanitizer.ts
rename to tests/specs/test/resource_sanitizer/resource_sanitizer.ts
index 93c9222c51d239..7fa1bd8ad405ae 100644
--- a/tests/testdata/test/sanitizer/resource_sanitizer.ts
+++ b/tests/specs/test/resource_sanitizer/resource_sanitizer.ts
@@ -1,4 +1,4 @@
Deno.test("leak", function () {
- Deno.openSync("run/001_hello.js");
+ Deno.openSync("../../../testdata/run/001_hello.js");
Deno.stdin.close();
});
diff --git a/tests/specs/test/sanitizer_trace_ops_catch_error/__test__.jsonc b/tests/specs/test/sanitizer_trace_ops_catch_error/__test__.jsonc
new file mode 100644
index 00000000000000..a7ec0907c962a2
--- /dev/null
+++ b/tests/specs/test/sanitizer_trace_ops_catch_error/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test -A --trace-leaks main.ts",
+ "output": "main.out",
+ "exitCode": 0
+}
diff --git a/tests/specs/test/sanitizer_trace_ops_catch_error/main.out b/tests/specs/test/sanitizer_trace_ops_catch_error/main.out
new file mode 100644
index 00000000000000..c2c67605d66b43
--- /dev/null
+++ b/tests/specs/test/sanitizer_trace_ops_catch_error/main.out
@@ -0,0 +1,6 @@
+Check file:///[WILDCARD]main.ts
+running 1 test from [WILDCARD]main.ts
+handle thrown error in async function ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/testdata/test/sanitizer/trace_ops_caught_error/main.ts b/tests/specs/test/sanitizer_trace_ops_catch_error/main.ts
similarity index 100%
rename from tests/testdata/test/sanitizer/trace_ops_caught_error/main.ts
rename to tests/specs/test/sanitizer_trace_ops_catch_error/main.ts
diff --git a/tests/specs/test/shuffle/__test__.jsonc b/tests/specs/test/shuffle/__test__.jsonc
new file mode 100644
index 00000000000000..975865e50e6af0
--- /dev/null
+++ b/tests/specs/test/shuffle/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --shuffle shuffle",
+ "output": "[WILDCARD]",
+ "exitCode": 0
+}
diff --git a/tests/testdata/test/shuffle/bar_test.ts b/tests/specs/test/shuffle/shuffle/bar_test.ts
similarity index 100%
rename from tests/testdata/test/shuffle/bar_test.ts
rename to tests/specs/test/shuffle/shuffle/bar_test.ts
diff --git a/tests/testdata/test/shuffle/baz_test.ts b/tests/specs/test/shuffle/shuffle/baz_test.ts
similarity index 100%
rename from tests/testdata/test/shuffle/baz_test.ts
rename to tests/specs/test/shuffle/shuffle/baz_test.ts
diff --git a/tests/testdata/test/shuffle/foo_test.ts b/tests/specs/test/shuffle/shuffle/foo_test.ts
similarity index 100%
rename from tests/testdata/test/shuffle/foo_test.ts
rename to tests/specs/test/shuffle/shuffle/foo_test.ts
diff --git a/tests/specs/test/shuffle_with_seed/__test__.jsonc b/tests/specs/test/shuffle_with_seed/__test__.jsonc
new file mode 100644
index 00000000000000..477f1dbcf836ad
--- /dev/null
+++ b/tests/specs/test/shuffle_with_seed/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --shuffle=42 shuffle",
+ "output": "main.out",
+ "exitCode": 0
+}
diff --git a/tests/testdata/test/shuffle.out b/tests/specs/test/shuffle_with_seed/main.out
similarity index 71%
rename from tests/testdata/test/shuffle.out
rename to tests/specs/test/shuffle_with_seed/main.out
index 9037ff518d3ef1..375b9bae2ca4bc 100644
--- a/tests/testdata/test/shuffle.out
+++ b/tests/specs/test/shuffle_with_seed/main.out
@@ -1,7 +1,7 @@
-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
+Check [WILDCARD]/test/shuffle_with_seed/shuffle/bar_test.ts
+Check [WILDCARD]/test/shuffle_with_seed/shuffle/baz_test.ts
+Check [WILDCARD]/test/shuffle_with_seed/shuffle/foo_test.ts
+running 10 tests from [WILDCARD]shuffle/foo_test.ts
test 3 ... ok ([WILDCARD])
test 2 ... ok ([WILDCARD])
test 7 ... ok ([WILDCARD])
@@ -12,7 +12,7 @@ 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
+running 10 tests from [WILDCARD]shuffle/baz_test.ts
test 3 ... ok ([WILDCARD])
test 2 ... ok ([WILDCARD])
test 7 ... ok ([WILDCARD])
@@ -23,7 +23,7 @@ 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
+running 10 tests from [WILDCARD]shuffle/bar_test.ts
test 3 ... ok ([WILDCARD])
test 2 ... ok ([WILDCARD])
test 7 ... ok ([WILDCARD])
diff --git a/tests/specs/test/shuffle_with_seed/shuffle/bar_test.ts b/tests/specs/test/shuffle_with_seed/shuffle/bar_test.ts
new file mode 100644
index 00000000000000..ca118dc0de3c95
--- /dev/null
+++ b/tests/specs/test/shuffle_with_seed/shuffle/bar_test.ts
@@ -0,0 +1,3 @@
+for (let i = 0; i < 10; i++) {
+ Deno.test(`test ${i}`, () => {});
+}
diff --git a/tests/specs/test/shuffle_with_seed/shuffle/baz_test.ts b/tests/specs/test/shuffle_with_seed/shuffle/baz_test.ts
new file mode 100644
index 00000000000000..ca118dc0de3c95
--- /dev/null
+++ b/tests/specs/test/shuffle_with_seed/shuffle/baz_test.ts
@@ -0,0 +1,3 @@
+for (let i = 0; i < 10; i++) {
+ Deno.test(`test ${i}`, () => {});
+}
diff --git a/tests/specs/test/shuffle_with_seed/shuffle/foo_test.ts b/tests/specs/test/shuffle_with_seed/shuffle/foo_test.ts
new file mode 100644
index 00000000000000..ca118dc0de3c95
--- /dev/null
+++ b/tests/specs/test/shuffle_with_seed/shuffle/foo_test.ts
@@ -0,0 +1,3 @@
+for (let i = 0; i < 10; i++) {
+ Deno.test(`test ${i}`, () => {});
+}
diff --git a/tests/specs/test/steps_dot_failing_steps/__test__.jsonc b/tests/specs/test/steps_dot_failing_steps/__test__.jsonc
new file mode 100644
index 00000000000000..58ef6339a5f0cd
--- /dev/null
+++ b/tests/specs/test/steps_dot_failing_steps/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --reporter=dot failing_steps.ts",
+ "exitCode": 1,
+ "output": "failing_steps.dot.out"
+}
diff --git a/tests/specs/test/steps_dot_failing_steps/failing_steps.dot.out b/tests/specs/test/steps_dot_failing_steps/failing_steps.dot.out
new file mode 100644
index 00000000000000..8222c13aeb44b1
--- /dev/null
+++ b/tests/specs/test/steps_dot_failing_steps/failing_steps.dot.out
@@ -0,0 +1,53 @@
+!
+.
+!
+!
+!
+!
+!
+!
+!
+
+ ERRORS
+
+nested failure ... step 1 ... inner 1 => [WILDCARD]failing_steps.ts:[WILDCARD]
+error: Error: Failed.
+ throw new Error("Failed.");
+ ^
+ at [WILDCARD]/failing_steps.ts:[WILDCARD]
+
+multiple test step failures ... step 1 => [WILDCARD]failing_steps.ts:[WILDCARD]
+error: Error: Fail.
+ throw new Error("Fail.");
+ ^
+ at [WILDCARD]/failing_steps.ts:[WILDCARD]
+
+multiple test step failures ... step 2 => [WILDCARD]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 => [WILDCARD]failing_steps.ts:[WILDCARD]
+error: Error: Fail.
+ throw new Error("Fail.");
+ ^
+ at [WILDCARD]/failing_steps.ts:[WILDCARD]
+
+failing step in failing test => [WILDCARD]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 => [WILDCARD]failing_steps.ts:[WILDCARD]
+multiple test step failures ... step 1 => [WILDCARD]failing_steps.ts:[WILDCARD]
+multiple test step failures ... step 2 => [WILDCARD]failing_steps.ts:[WILDCARD]
+failing step in failing test ... step 1 => [WILDCARD]failing_steps.ts:[WILDCARD]
+failing step in failing test => [WILDCARD]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.ts b/tests/specs/test/steps_dot_failing_steps/failing_steps.ts
similarity index 100%
rename from tests/testdata/test/steps/failing_steps.ts
rename to tests/specs/test/steps_dot_failing_steps/failing_steps.ts
diff --git a/tests/specs/test/steps_dot_ignored_steps/__test__.jsonc b/tests/specs/test/steps_dot_ignored_steps/__test__.jsonc
new file mode 100644
index 00000000000000..672cc56f281711
--- /dev/null
+++ b/tests/specs/test/steps_dot_ignored_steps/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --reporter=dot ignored_steps.ts",
+ "exitCode": 0,
+ "output": "ignored_steps.dot.out"
+}
diff --git a/tests/testdata/test/steps/ignored_steps.dot.out b/tests/specs/test/steps_dot_ignored_steps/ignored_steps.dot.out
similarity index 100%
rename from tests/testdata/test/steps/ignored_steps.dot.out
rename to tests/specs/test/steps_dot_ignored_steps/ignored_steps.dot.out
diff --git a/tests/testdata/test/steps/ignored_steps.ts b/tests/specs/test/steps_dot_ignored_steps/ignored_steps.ts
similarity index 100%
rename from tests/testdata/test/steps/ignored_steps.ts
rename to tests/specs/test/steps_dot_ignored_steps/ignored_steps.ts
diff --git a/tests/specs/test/steps_dot_passing_steps/__test__.jsonc b/tests/specs/test/steps_dot_passing_steps/__test__.jsonc
new file mode 100644
index 00000000000000..0ba87a6b288907
--- /dev/null
+++ b/tests/specs/test/steps_dot_passing_steps/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --reporter=dot passing_steps.ts",
+ "exitCode": 0,
+ "output": "passing_steps.dot.out"
+}
diff --git a/tests/testdata/test/steps/passing_steps.dot.out b/tests/specs/test/steps_dot_passing_steps/passing_steps.dot.out
similarity index 100%
rename from tests/testdata/test/steps/passing_steps.dot.out
rename to tests/specs/test/steps_dot_passing_steps/passing_steps.dot.out
diff --git a/tests/testdata/test/steps/passing_steps.ts b/tests/specs/test/steps_dot_passing_steps/passing_steps.ts
similarity index 100%
rename from tests/testdata/test/steps/passing_steps.ts
rename to tests/specs/test/steps_dot_passing_steps/passing_steps.ts
diff --git a/tests/specs/test/steps_failing_steps/__test__.jsonc b/tests/specs/test/steps_failing_steps/__test__.jsonc
new file mode 100644
index 00000000000000..f4194c50c8d705
--- /dev/null
+++ b/tests/specs/test/steps_failing_steps/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test failing_steps.ts",
+ "exitCode": 1,
+ "output": "failing_steps.out"
+}
diff --git a/tests/testdata/test/steps/failing_steps.out b/tests/specs/test/steps_failing_steps/failing_steps.out
similarity index 59%
rename from tests/testdata/test/steps/failing_steps.out
rename to tests/specs/test/steps_failing_steps/failing_steps.out
index 4b717f5cc5c26a..f66e089bcf7c1e 100644
--- a/tests/testdata/test/steps/failing_steps.out
+++ b/tests/specs/test/steps_failing_steps/failing_steps.out
@@ -1,5 +1,5 @@
[WILDCARD]
-running 3 tests from ./test/steps/failing_steps.ts
+running 3 tests from [WILDCARD]failing_steps.ts
nested failure ...
step 1 ...
inner 1 ... FAILED ([WILDCARD])
@@ -16,31 +16,31 @@ failing step in failing test ... FAILED ([WILDCARD])
ERRORS
-nested failure ... step 1 ... inner 1 => ./test/steps/failing_steps.ts:[WILDCARD]
+nested failure ... step 1 ... inner 1 => [WILDCARD]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]
+multiple test step failures ... step 1 => [WILDCARD]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]
+multiple test step failures ... step 2 => [WILDCARD]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]
+failing step in failing test ... step 1 => [WILDCARD]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]
+failing step in failing test => [WILDCARD]failing_steps.ts:[WILDCARD]
error: Error: Fail test.
throw new Error("Fail test.");
^
@@ -48,11 +48,11 @@ error: Error: Fail test.
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]
+nested failure ... step 1 ... inner 1 => [WILDCARD]failing_steps.ts:[WILDCARD]
+multiple test step failures ... step 1 => [WILDCARD]failing_steps.ts:[WILDCARD]
+multiple test step failures ... step 2 => [WILDCARD]failing_steps.ts:[WILDCARD]
+failing step in failing test ... step 1 => [WILDCARD]failing_steps.ts:[WILDCARD]
+failing step in failing test => [WILDCARD]failing_steps.ts:[WILDCARD]
FAILED | 0 passed (1 step) | 3 failed (5 steps) ([WILDCARD])
diff --git a/tests/specs/test/steps_failing_steps/failing_steps.ts b/tests/specs/test/steps_failing_steps/failing_steps.ts
new file mode 100644
index 00000000000000..efa18d54ef80cf
--- /dev/null
+++ b/tests/specs/test/steps_failing_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/specs/test/steps_ignored_steps/__test__.jsonc b/tests/specs/test/steps_ignored_steps/__test__.jsonc
new file mode 100644
index 00000000000000..d3f5a81cfff0e9
--- /dev/null
+++ b/tests/specs/test/steps_ignored_steps/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test ignored_steps.ts",
+ "exitCode": 0,
+ "output": "ignored_steps.out"
+}
diff --git a/tests/testdata/test/steps/ignored_steps.out b/tests/specs/test/steps_ignored_steps/ignored_steps.out
similarity index 79%
rename from tests/testdata/test/steps/ignored_steps.out
rename to tests/specs/test/steps_ignored_steps/ignored_steps.out
index 2786e1e1a5e17e..0960e62565b7f4 100644
--- a/tests/testdata/test/steps/ignored_steps.out
+++ b/tests/specs/test/steps_ignored_steps/ignored_steps.out
@@ -1,5 +1,5 @@
[WILDCARD]
-running 1 test from ./test/steps/ignored_steps.ts
+running 1 test from [WILDCARD]ignored_steps.ts
ignored step ...
step 1 ... ignored ([WILDCARD])
step 2 ... ok ([WILDCARD])
diff --git a/tests/specs/test/steps_ignored_steps/ignored_steps.ts b/tests/specs/test/steps_ignored_steps/ignored_steps.ts
new file mode 100644
index 00000000000000..102b481fba08e7
--- /dev/null
+++ b/tests/specs/test/steps_ignored_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/specs/test/steps_invalid_usage/__test__.jsonc b/tests/specs/test/steps_invalid_usage/__test__.jsonc
new file mode 100644
index 00000000000000..763ec2a209f4a6
--- /dev/null
+++ b/tests/specs/test/steps_invalid_usage/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test invalid_usage.ts",
+ "exitCode": 1,
+ "output": "invalid_usage.out"
+}
diff --git a/tests/testdata/test/steps/invalid_usage.out b/tests/specs/test/steps_invalid_usage/invalid_usage.out
similarity index 67%
rename from tests/testdata/test/steps/invalid_usage.out
rename to tests/specs/test/steps_invalid_usage/invalid_usage.out
index 4b82befaea8845..413a97cfde162d 100644
--- a/tests/testdata/test/steps/invalid_usage.out
+++ b/tests/specs/test/steps_invalid_usage/invalid_usage.out
@@ -1,5 +1,5 @@
[WILDCARD]
-running 7 tests from ./test/steps/invalid_usage.ts
+running 7 tests from [WILDCARD]invalid_usage.ts
capturing ...
some step ... ok ([WILDCARD])
capturing ... FAILED ([WILDCARD])
@@ -34,48 +34,48 @@ parallel steps where only inner tests have sanitizers ... FAILED (due to 1 faile
ERRORS
-capturing => ./test/steps/invalid_usage.ts:[WILDCARD]
+capturing => [WILDCARD]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]
+top level missing await ... step => [WILDCARD]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]
+inner missing await ... step ... inner => [WILDCARD]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]
+parallel steps with sanitizers ... step 2 => [WILDCARD]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]
+parallel steps with sanitizers ... step 1 => [WILDCARD]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]
+parallel steps when first has sanitizer ... step 2 => [WILDCARD]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]
+parallel steps when second has sanitizer ... step 2 => [WILDCARD]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]
+parallel steps where only inner tests have sanitizers ... step 2 ... step inner => [WILDCARD]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]
+capturing => [WILDCARD]invalid_usage.ts:1:6
+top level missing await ... step => [WILDCARD]invalid_usage.ts:[WILDCARD]
+inner missing await ... step ... inner => [WILDCARD]invalid_usage.ts:[WILDCARD]
+parallel steps with sanitizers ... step 2 => [WILDCARD]invalid_usage.ts:[WILDCARD]
+parallel steps with sanitizers ... step 1 => [WILDCARD]invalid_usage.ts:[WILDCARD]
+parallel steps when first has sanitizer ... step 2 => [WILDCARD]invalid_usage.ts:[WILDCARD]
+parallel steps when second has sanitizer ... step 2 => [WILDCARD]invalid_usage.ts:[WILDCARD]
+parallel steps where only inner tests have sanitizers ... step 2 ... step inner => [WILDCARD]invalid_usage.ts:[WILDCARD]
FAILED | 0 passed (5 steps) | 7 failed (9 steps) ([WILDCARD])
diff --git a/tests/testdata/test/steps/invalid_usage.ts b/tests/specs/test/steps_invalid_usage/invalid_usage.ts
similarity index 100%
rename from tests/testdata/test/steps/invalid_usage.ts
rename to tests/specs/test/steps_invalid_usage/invalid_usage.ts
diff --git a/tests/specs/test/steps_output_within/__test__.jsonc b/tests/specs/test/steps_output_within/__test__.jsonc
new file mode 100644
index 00000000000000..2141b6b45a9a53
--- /dev/null
+++ b/tests/specs/test/steps_output_within/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test output_within.ts",
+ "exitCode": 0,
+ "output": "output_within.out"
+}
diff --git a/tests/testdata/test/steps/output_within.out b/tests/specs/test/steps_output_within/output_within.out
similarity index 90%
rename from tests/testdata/test/steps/output_within.out
rename to tests/specs/test/steps_output_within/output_within.out
index d58722daa58add..7c83b816f20eec 100644
--- a/tests/testdata/test/steps/output_within.out
+++ b/tests/specs/test/steps_output_within/output_within.out
@@ -1,5 +1,5 @@
[WILDCARD]
-running 1 test from ./test/steps/output_within.ts
+running 1 test from [WILDCARD]output_within.ts
description ...
------- output -------
1
diff --git a/tests/testdata/test/steps/output_within.ts b/tests/specs/test/steps_output_within/output_within.ts
similarity index 100%
rename from tests/testdata/test/steps/output_within.ts
rename to tests/specs/test/steps_output_within/output_within.ts
diff --git a/tests/specs/test/steps_passing_steps/__test__.jsonc b/tests/specs/test/steps_passing_steps/__test__.jsonc
new file mode 100644
index 00000000000000..daa8013921b6b0
--- /dev/null
+++ b/tests/specs/test/steps_passing_steps/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test passing_steps.ts",
+ "exitCode": 0,
+ "output": "passing_steps.out"
+}
diff --git a/tests/testdata/test/steps/passing_steps.out b/tests/specs/test/steps_passing_steps/passing_steps.out
similarity index 96%
rename from tests/testdata/test/steps/passing_steps.out
rename to tests/specs/test/steps_passing_steps/passing_steps.out
index 0757a4ed36df82..c59be298ed6dc2 100644
--- a/tests/testdata/test/steps/passing_steps.out
+++ b/tests/specs/test/steps_passing_steps/passing_steps.out
@@ -1,5 +1,5 @@
[WILDCARD]
-running 6 tests from ./test/steps/passing_steps.ts
+running 6 tests from [WILDCARD]passing_steps.ts
description ...
step 1 ...
inner 1 ... ok ([WILDCARD]s)
diff --git a/tests/specs/test/steps_passing_steps/passing_steps.ts b/tests/specs/test/steps_passing_steps/passing_steps.ts
new file mode 100644
index 00000000000000..fd145954b5b5b3
--- /dev/null
+++ b/tests/specs/test/steps_passing_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();
+ 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/specs/test/steps_tap_failing_steps/__test__.jsonc b/tests/specs/test/steps_tap_failing_steps/__test__.jsonc
new file mode 100644
index 00000000000000..fc83a7cdf9b7b8
--- /dev/null
+++ b/tests/specs/test/steps_tap_failing_steps/__test__.jsonc
@@ -0,0 +1,8 @@
+{
+ "args": "test --reporter=tap failing_steps.ts",
+ "exitCode": 1,
+ "envs": {
+ "NO_COLOR": "1"
+ },
+ "output": "failing_steps.tap.out"
+}
diff --git a/tests/testdata/test/steps/failing_steps.tap.out b/tests/specs/test/steps_tap_failing_steps/failing_steps.tap.out
similarity index 68%
rename from tests/testdata/test/steps/failing_steps.tap.out
rename to tests/specs/test/steps_tap_failing_steps/failing_steps.tap.out
index 11b289f08cec63..b47b9fed3085ba 100644
--- a/tests/testdata/test/steps/failing_steps.tap.out
+++ b/tests/specs/test/steps_tap_failing_steps/failing_steps.tap.out
@@ -1,43 +1,43 @@
TAP version 14
-# ./test/steps/failing_steps.ts
+# [WILDCARD]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]}}
+ {"message":"Error: Failed.\n throw new Error(\"Failed.\");\n ^\n at [WILDCARD]/failing_steps.ts:[WILDCARD]\n[WILDCARD]","severity":"fail","at":{"file":"[WILDCARD]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]}}
+ {"message":"1 test step failed.","severity":"fail","at":{"file":"[WILDCARD]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]}}
+ {"message":"1 test step failed.","severity":"fail","at":{"file":"[WILDCARD]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]}}
+ {"message":"Error: Fail.\n throw new Error(\"Fail.\");\n ^\n at [WILDCARD]/failing_steps.ts:[WILDCARD]\n[WILDCARD]","severity":"fail","at":{"file":"[WILDCARD]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]}}
+ {"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":"[WILDCARD]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]}}
+ {"message":"2 test steps failed.","severity":"fail","at":{"file":"[WILDCARD]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]}}
+ {"message":"Error: Fail.\n throw new Error(\"Fail.\");\n ^\n at [WILDCARD]/failing_steps.ts:[WILDCARD]\n[WILDCARD]","severity":"fail","at":{"file":"[WILDCARD]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]}}
+ {"message":"Error: Fail test.\n throw new Error(\"Fail test.\");\n ^\n at [WILDCARD]/failing_steps.ts:[WILDCARD]","severity":"fail","at":{"file":"[WILDCARD]failing_steps.ts","line":[WILDCARD]}}
...
1..3
error: Test failed
diff --git a/tests/specs/test/steps_tap_failing_steps/failing_steps.ts b/tests/specs/test/steps_tap_failing_steps/failing_steps.ts
new file mode 100644
index 00000000000000..efa18d54ef80cf
--- /dev/null
+++ b/tests/specs/test/steps_tap_failing_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/specs/test/steps_tap_ignored_steps/__test__.jsonc b/tests/specs/test/steps_tap_ignored_steps/__test__.jsonc
new file mode 100644
index 00000000000000..c28efe691789ef
--- /dev/null
+++ b/tests/specs/test/steps_tap_ignored_steps/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --reporter=tap ignored_steps.ts",
+ "exitCode": 0,
+ "output": "ignored_steps.tap.out"
+}
diff --git a/tests/testdata/test/steps/ignored_steps.tap.out b/tests/specs/test/steps_tap_ignored_steps/ignored_steps.tap.out
similarity index 78%
rename from tests/testdata/test/steps/ignored_steps.tap.out
rename to tests/specs/test/steps_tap_ignored_steps/ignored_steps.tap.out
index b2b2f507034215..63890577293244 100644
--- a/tests/testdata/test/steps/ignored_steps.tap.out
+++ b/tests/specs/test/steps_tap_ignored_steps/ignored_steps.tap.out
@@ -1,5 +1,5 @@
TAP version 14
-# ./test/steps/ignored_steps.ts
+# [WILDCARD]ignored_steps.ts
# Subtest: ignored step
ok 1 - step 1 # SKIP
ok 2 - step 2
diff --git a/tests/specs/test/steps_tap_ignored_steps/ignored_steps.ts b/tests/specs/test/steps_tap_ignored_steps/ignored_steps.ts
new file mode 100644
index 00000000000000..102b481fba08e7
--- /dev/null
+++ b/tests/specs/test/steps_tap_ignored_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/specs/test/steps_tap_passing_steps/__test__.jsonc b/tests/specs/test/steps_tap_passing_steps/__test__.jsonc
new file mode 100644
index 00000000000000..b30d20d6b3c9e4
--- /dev/null
+++ b/tests/specs/test/steps_tap_passing_steps/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --reporter=tap passing_steps.ts",
+ "exitCode": 0,
+ "output": "passing_steps.tap.out"
+}
diff --git a/tests/testdata/test/steps/passing_steps.tap.out b/tests/specs/test/steps_tap_passing_steps/passing_steps.tap.out
similarity index 97%
rename from tests/testdata/test/steps/passing_steps.tap.out
rename to tests/specs/test/steps_tap_passing_steps/passing_steps.tap.out
index 20a9fa312f798e..0797fb7deeae72 100644
--- a/tests/testdata/test/steps/passing_steps.tap.out
+++ b/tests/specs/test/steps_tap_passing_steps/passing_steps.tap.out
@@ -1,5 +1,5 @@
TAP version 14
-# ./test/steps/passing_steps.ts
+# [WILDCARD]passing_steps.ts
# Subtest: description
ok 1 - inner 1
ok 2 - inner 2
diff --git a/tests/specs/test/steps_tap_passing_steps/passing_steps.ts b/tests/specs/test/steps_tap_passing_steps/passing_steps.ts
new file mode 100644
index 00000000000000..fd145954b5b5b3
--- /dev/null
+++ b/tests/specs/test/steps_tap_passing_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();
+ 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/specs/test/test_filtered_out_only/__test__.jsonc b/tests/specs/test/test_filtered_out_only/__test__.jsonc
new file mode 100644
index 00000000000000..b190d01661a215
--- /dev/null
+++ b/tests/specs/test/test_filtered_out_only/__test__.jsonc
@@ -0,0 +1,4 @@
+{
+ "args": "test --quiet --filter foo main.ts",
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/filtered_out_only.out b/tests/specs/test/test_filtered_out_only/main.out
similarity index 62%
rename from tests/testdata/test/filtered_out_only.out
rename to tests/specs/test/test_filtered_out_only/main.out
index 337893848a3e8f..488643c803c46c 100644
--- a/tests/testdata/test/filtered_out_only.out
+++ b/tests/specs/test/test_filtered_out_only/main.out
@@ -1,4 +1,4 @@
-running 1 test from ./test/filtered_out_only.ts
+running 1 test from ./main.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/specs/test/test_filtered_out_only/main.ts
similarity index 100%
rename from tests/testdata/test/filtered_out_only.ts
rename to tests/specs/test/test_filtered_out_only/main.ts
diff --git a/tests/specs/test/test_replace_timers/__test__.jsonc b/tests/specs/test/test_replace_timers/__test__.jsonc
new file mode 100644
index 00000000000000..bc912431851931
--- /dev/null
+++ b/tests/specs/test/test_replace_timers/__test__.jsonc
@@ -0,0 +1,5 @@
+// Regression test for https://github.com/denoland/deno/issues/23041
+{
+ "args": "test main.js",
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/replace_timers.js b/tests/specs/test/test_replace_timers/main.js
similarity index 100%
rename from tests/testdata/test/replace_timers.js
rename to tests/specs/test/test_replace_timers/main.js
diff --git a/tests/testdata/test/replace_timers.js.out b/tests/specs/test/test_replace_timers/main.out
similarity index 70%
rename from tests/testdata/test/replace_timers.js.out
rename to tests/specs/test/test_replace_timers/main.out
index 81beb5ebe06dcd..cfac4994370b6e 100644
--- a/tests/testdata/test/replace_timers.js.out
+++ b/tests/specs/test/test_replace_timers/main.out
@@ -1,4 +1,4 @@
-running 1 test from ./test/replace_timers.js
+running 1 test from [WILDCARD]/main.js
foo ...
bar ... ok ([WILDCARD])
foo ... ok ([WILDCARD])
diff --git a/tests/specs/test/test_with_config/__test__.jsonc b/tests/specs/test/test_with_config/__test__.jsonc
new file mode 100644
index 00000000000000..8bd1e2a9e90db4
--- /dev/null
+++ b/tests/specs/test/test_with_config/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --config collect/deno.jsonc collect",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/test_with_config/collect/deno.jsonc b/tests/specs/test/test_with_config/collect/deno.jsonc
new file mode 100644
index 00000000000000..e14ce86da0742f
--- /dev/null
+++ b/tests/specs/test/test_with_config/collect/deno.jsonc
@@ -0,0 +1,5 @@
+{
+ "test": {
+ "exclude": ["./ignore"]
+ }
+}
diff --git a/tests/specs/test/test_with_config/collect/deno.malformed.jsonc b/tests/specs/test/test_with_config/collect/deno.malformed.jsonc
new file mode 100644
index 00000000000000..f2d8cbc6526dd0
--- /dev/null
+++ b/tests/specs/test/test_with_config/collect/deno.malformed.jsonc
@@ -0,0 +1,5 @@
+{
+ "test": {
+ "dont_know_this_field": {}
+ }
+}
diff --git a/tests/specs/test/test_with_config/collect/deno2.jsonc b/tests/specs/test/test_with_config/collect/deno2.jsonc
new file mode 100644
index 00000000000000..b7af09d1c03eaa
--- /dev/null
+++ b/tests/specs/test/test_with_config/collect/deno2.jsonc
@@ -0,0 +1,6 @@
+{
+ "test": {
+ "include": ["./include/"],
+ "exclude": ["./ignore", "./include/2_test.ts"]
+ }
+}
diff --git a/tests/specs/test/test_with_config/collect/ignore/test.ts b/tests/specs/test/test_with_config/collect/ignore/test.ts
new file mode 100644
index 00000000000000..16fb63ba7ac27f
--- /dev/null
+++ b/tests/specs/test/test_with_config/collect/ignore/test.ts
@@ -0,0 +1 @@
+throw new Error("this module should be ignored");
diff --git a/tests/specs/test/test_with_config/collect/include.ts b/tests/specs/test/test_with_config/collect/include.ts
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/tests/specs/test/test_with_config/collect/include/2_test.ts b/tests/specs/test/test_with_config/collect/include/2_test.ts
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/tests/specs/test/test_with_config/collect/include/test.ts b/tests/specs/test/test_with_config/collect/include/test.ts
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/tests/specs/test/test_with_config/collect/test.ts b/tests/specs/test/test_with_config/collect/test.ts
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/tests/specs/test/test_with_config/main.out b/tests/specs/test/test_with_config/main.out
new file mode 100644
index 00000000000000..c140f2f7c46008
--- /dev/null
+++ b/tests/specs/test/test_with_config/main.out
@@ -0,0 +1,9 @@
+Check [WILDCARD]collect/include/2_test.ts
+Check [WILDCARD]collect/include/test.ts
+Check [WILDCARD]collect/test.ts
+running 0 tests from [WILDCARD]collect/include/2_test.ts
+running 0 tests from [WILDCARD]collect/include/test.ts
+running 0 tests from [WILDCARD]collect/test.ts
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/specs/test/test_with_config2/__test__.jsonc b/tests/specs/test/test_with_config2/__test__.jsonc
new file mode 100644
index 00000000000000..51d0a8c6b39f9b
--- /dev/null
+++ b/tests/specs/test/test_with_config2/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --config collect/deno2.jsonc collect",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/test_with_config2/collect/deno.jsonc b/tests/specs/test/test_with_config2/collect/deno.jsonc
new file mode 100644
index 00000000000000..e14ce86da0742f
--- /dev/null
+++ b/tests/specs/test/test_with_config2/collect/deno.jsonc
@@ -0,0 +1,5 @@
+{
+ "test": {
+ "exclude": ["./ignore"]
+ }
+}
diff --git a/tests/specs/test/test_with_config2/collect/deno.malformed.jsonc b/tests/specs/test/test_with_config2/collect/deno.malformed.jsonc
new file mode 100644
index 00000000000000..f2d8cbc6526dd0
--- /dev/null
+++ b/tests/specs/test/test_with_config2/collect/deno.malformed.jsonc
@@ -0,0 +1,5 @@
+{
+ "test": {
+ "dont_know_this_field": {}
+ }
+}
diff --git a/tests/specs/test/test_with_config2/collect/deno2.jsonc b/tests/specs/test/test_with_config2/collect/deno2.jsonc
new file mode 100644
index 00000000000000..b7af09d1c03eaa
--- /dev/null
+++ b/tests/specs/test/test_with_config2/collect/deno2.jsonc
@@ -0,0 +1,6 @@
+{
+ "test": {
+ "include": ["./include/"],
+ "exclude": ["./ignore", "./include/2_test.ts"]
+ }
+}
diff --git a/tests/specs/test/test_with_config2/collect/ignore/test.ts b/tests/specs/test/test_with_config2/collect/ignore/test.ts
new file mode 100644
index 00000000000000..16fb63ba7ac27f
--- /dev/null
+++ b/tests/specs/test/test_with_config2/collect/ignore/test.ts
@@ -0,0 +1 @@
+throw new Error("this module should be ignored");
diff --git a/tests/specs/test/test_with_config2/collect/include.ts b/tests/specs/test/test_with_config2/collect/include.ts
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/tests/specs/test/test_with_config2/collect/include/2_test.ts b/tests/specs/test/test_with_config2/collect/include/2_test.ts
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/tests/specs/test/test_with_config2/collect/include/test.ts b/tests/specs/test/test_with_config2/collect/include/test.ts
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/tests/specs/test/test_with_config2/collect/test.ts b/tests/specs/test/test_with_config2/collect/test.ts
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/tests/specs/test/test_with_config2/main.out b/tests/specs/test/test_with_config2/main.out
new file mode 100644
index 00000000000000..3354c16cc5b16b
--- /dev/null
+++ b/tests/specs/test/test_with_config2/main.out
@@ -0,0 +1,7 @@
+Check [WILDCARD]/collect/include/test.ts
+Check [WILDCARD]/collect/test.ts
+running 0 tests from [WILDCARD]/collect/include/test.ts
+running 0 tests from [WILDCARD]/collect/test.ts
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/specs/test/test_with_custom_jsx/__test__.jsonc b/tests/specs/test/test_with_custom_jsx/__test__.jsonc
new file mode 100644
index 00000000000000..e516467eeabe11
--- /dev/null
+++ b/tests/specs/test/test_with_custom_jsx/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --quiet --allow-read main.ts --config=deno_custom_jsx.json",
+ "output": "main.out",
+ "exitCode": 0
+}
diff --git a/tests/testdata/test/deno_custom_jsx.json b/tests/specs/test/test_with_custom_jsx/deno_custom_jsx.json
similarity index 100%
rename from tests/testdata/test/deno_custom_jsx.json
rename to tests/specs/test/test_with_custom_jsx/deno_custom_jsx.json
diff --git a/tests/testdata/test/hello_world.out b/tests/specs/test/test_with_custom_jsx/main.out
similarity index 64%
rename from tests/testdata/test/hello_world.out
rename to tests/specs/test/test_with_custom_jsx/main.out
index aee8a64d48b4f4..cfeb14fd5ca538 100644
--- a/tests/testdata/test/hello_world.out
+++ b/tests/specs/test/test_with_custom_jsx/main.out
@@ -1,4 +1,4 @@
-running 1 test from ./test/hello_world.ts
+running 1 test from ./main.ts
hello world test ... ok ([WILDCARD])
ok | 1 passed | 0 failed ([WILDCARD])
diff --git a/tests/testdata/test/hello_world.ts b/tests/specs/test/test_with_custom_jsx/main.ts
similarity index 100%
rename from tests/testdata/test/hello_world.ts
rename to tests/specs/test/test_with_custom_jsx/main.ts
diff --git a/tests/specs/test/test_with_glob_config/__test__.jsonc b/tests/specs/test/test_with_glob_config/__test__.jsonc
new file mode 100644
index 00000000000000..9e2deabf95440a
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --config deno.glob.json",
+ "output": "main.out",
+ "exitCode": 0
+}
diff --git a/tests/specs/test/test_with_glob_config/deno.glob.json b/tests/specs/test/test_with_glob_config/deno.glob.json
new file mode 100644
index 00000000000000..9deb4d2f22ae0c
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/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/specs/test/test_with_glob_config/glob/data/tes.ts b/tests/specs/test/test_with_glob_config/glob/data/tes.ts
new file mode 100644
index 00000000000000..6940729e9eb848
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/glob/data/tes.ts
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/specs/test/test_with_glob_config/glob/data/test1.js b/tests/specs/test/test_with_glob_config/glob/data/test1.js
new file mode 100644
index 00000000000000..6940729e9eb848
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/glob/data/test1.js
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/specs/test/test_with_glob_config/glob/data/test1.ts b/tests/specs/test/test_with_glob_config/glob/data/test1.ts
new file mode 100644
index 00000000000000..6940729e9eb848
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/glob/data/test1.ts
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/specs/test/test_with_glob_config/glob/data/test12.ts b/tests/specs/test/test_with_glob_config/glob/data/test12.ts
new file mode 100644
index 00000000000000..6940729e9eb848
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/glob/data/test12.ts
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/specs/test/test_with_glob_config/glob/nested/fizz/bar.ts b/tests/specs/test/test_with_glob_config/glob/nested/fizz/bar.ts
new file mode 100644
index 00000000000000..6940729e9eb848
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/glob/nested/fizz/bar.ts
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/specs/test/test_with_glob_config/glob/nested/fizz/bazz.ts b/tests/specs/test/test_with_glob_config/glob/nested/fizz/bazz.ts
new file mode 100644
index 00000000000000..6940729e9eb848
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/glob/nested/fizz/bazz.ts
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/specs/test/test_with_glob_config/glob/nested/fizz/fizz.ts b/tests/specs/test/test_with_glob_config/glob/nested/fizz/fizz.ts
new file mode 100644
index 00000000000000..6940729e9eb848
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/glob/nested/fizz/fizz.ts
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/specs/test/test_with_glob_config/glob/nested/fizz/foo.ts b/tests/specs/test/test_with_glob_config/glob/nested/fizz/foo.ts
new file mode 100644
index 00000000000000..6940729e9eb848
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/glob/nested/fizz/foo.ts
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/specs/test/test_with_glob_config/glob/nested/foo/bar.ts b/tests/specs/test/test_with_glob_config/glob/nested/foo/bar.ts
new file mode 100644
index 00000000000000..6940729e9eb848
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/glob/nested/foo/bar.ts
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/specs/test/test_with_glob_config/glob/nested/foo/bazz.ts b/tests/specs/test/test_with_glob_config/glob/nested/foo/bazz.ts
new file mode 100644
index 00000000000000..6940729e9eb848
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/glob/nested/foo/bazz.ts
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/specs/test/test_with_glob_config/glob/nested/foo/fizz.ts b/tests/specs/test/test_with_glob_config/glob/nested/foo/fizz.ts
new file mode 100644
index 00000000000000..6940729e9eb848
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/glob/nested/foo/fizz.ts
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/specs/test/test_with_glob_config/glob/nested/foo/foo.ts b/tests/specs/test/test_with_glob_config/glob/nested/foo/foo.ts
new file mode 100644
index 00000000000000..6940729e9eb848
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/glob/nested/foo/foo.ts
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/specs/test/test_with_glob_config/glob/pages/[id].ts b/tests/specs/test/test_with_glob_config/glob/pages/[id].ts
new file mode 100644
index 00000000000000..6940729e9eb848
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/glob/pages/[id].ts
@@ -0,0 +1,2 @@
+function foo() {
+}
diff --git a/tests/specs/test/test_with_glob_config/main.out b/tests/specs/test/test_with_glob_config/main.out
new file mode 100644
index 00000000000000..fbff4d934c1695
--- /dev/null
+++ b/tests/specs/test/test_with_glob_config/main.out
@@ -0,0 +1,21 @@
+Check [WILDCARD]/glob/pages/[id].ts
+Check [WILDCARD]/glob/data/test1.js
+Check [WILDCARD]/glob/data/test1.ts
+Check [WILDCARD]/glob/nested/fizz/bar.ts
+Check [WILDCARD]/glob/nested/fizz/fizz.ts
+Check [WILDCARD]/glob/nested/fizz/foo.ts
+Check [WILDCARD]/glob/nested/foo/bar.ts
+Check [WILDCARD]/glob/nested/foo/fizz.ts
+Check [WILDCARD]/glob/nested/foo/foo.ts
+running 0 tests from ./glob/pages/[id].ts
+running 0 tests from ./glob/data/test1.js
+running 0 tests from ./glob/data/test1.ts
+running 0 tests from ./glob/nested/fizz/bar.ts
+running 0 tests from ./glob/nested/fizz/fizz.ts
+running 0 tests from ./glob/nested/fizz/foo.ts
+running 0 tests from ./glob/nested/foo/bar.ts
+running 0 tests from ./glob/nested/foo/fizz.ts
+running 0 tests from ./glob/nested/foo/foo.ts
+
+ok | 0 passed | 0 failed ([WILDCARD])
+
diff --git a/tests/specs/test/test_with_malformed_config/__test__.jsonc b/tests/specs/test/test_with_malformed_config/__test__.jsonc
new file mode 100644
index 00000000000000..56c30bce6a5d0a
--- /dev/null
+++ b/tests/specs/test/test_with_malformed_config/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --config deno.malformed.jsonc",
+ "exitCode": 1,
+ "output": "main.out"
+}
diff --git a/tests/specs/test/test_with_malformed_config/deno.malformed.jsonc b/tests/specs/test/test_with_malformed_config/deno.malformed.jsonc
new file mode 100644
index 00000000000000..f2d8cbc6526dd0
--- /dev/null
+++ b/tests/specs/test/test_with_malformed_config/deno.malformed.jsonc
@@ -0,0 +1,5 @@
+{
+ "test": {
+ "dont_know_this_field": {}
+ }
+}
diff --git a/tests/testdata/test/collect_with_malformed_config.out b/tests/specs/test/test_with_malformed_config/main.out
similarity index 100%
rename from tests/testdata/test/collect_with_malformed_config.out
rename to tests/specs/test/test_with_malformed_config/main.out
diff --git a/tests/specs/test/text/__test__.jsonc b/tests/specs/test/text/__test__.jsonc
new file mode 100644
index 00000000000000..35ec2225b41307
--- /dev/null
+++ b/tests/specs/test/text/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --doc --allow-all main.md",
+ "exitCode": 0,
+ "output": "main.out"
+}
diff --git a/tests/testdata/test/text.md b/tests/specs/test/text/main.md
similarity index 100%
rename from tests/testdata/test/text.md
rename to tests/specs/test/text/main.md
diff --git a/tests/testdata/test/text.out b/tests/specs/test/text/main.out
similarity index 100%
rename from tests/testdata/test/text.out
rename to tests/specs/test/text/main.out
diff --git a/tests/specs/test/uncaught_errors/__test__.jsonc b/tests/specs/test/uncaught_errors/__test__.jsonc
new file mode 100644
index 00000000000000..746ddfc26d51db
--- /dev/null
+++ b/tests/specs/test/uncaught_errors/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test --quiet uncaught_errors_1.ts uncaught_errors_2.ts uncaught_errors_3.ts",
+ "output": "main.out",
+ "exitCode": 1
+}
diff --git a/tests/testdata/test/uncaught_errors.out b/tests/specs/test/uncaught_errors/main.out
similarity index 53%
rename from tests/testdata/test/uncaught_errors.out
rename to tests/specs/test/uncaught_errors/main.out
index a52f95d57413ee..23d59e61c3ccb9 100644
--- a/tests/testdata/test/uncaught_errors.out
+++ b/tests/specs/test/uncaught_errors/main.out
@@ -1,58 +1,58 @@
-running 3 tests from ./test/uncaught_errors_1.ts
+running 3 tests from [WILDCARD]/uncaught_errors_1.ts
foo 1 ... FAILED ([WILDCARD])
foo 2 ... ok ([WILDCARD])
foo 3 ...
-Uncaught error from ./test/uncaught_errors_1.ts FAILED
+Uncaught error from [WILDCARD]/uncaught_errors_1.ts FAILED
foo 3 ... cancelled (0ms)
-running 3 tests from ./test/uncaught_errors_2.ts
+running 3 tests from [WILDCARD]/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
+Uncaught error from [WILDCARD]/uncaught_errors_3.ts FAILED
ERRORS
-foo 1 => ./test/uncaught_errors_1.ts:1:6
+foo 1 => [WILDCARD]/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
+ at [WILDCARD]/uncaught_errors_1.ts:2:9
-./test/uncaught_errors_1.ts (uncaught error)
+[WILDCARD]/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
+ at [WILDCARD]/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
+bar 2 => [WILDCARD]/uncaught_errors_2.ts:3:6
error: Error: bar 2
throw new Error("bar 2");
^
- at [WILDCARD]/test/uncaught_errors_2.ts:4:9
+ at [WILDCARD]/uncaught_errors_2.ts:4:9
-bar 3 => ./test/uncaught_errors_2.ts:6:6
+bar 3 => [WILDCARD]/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
+ at [WILDCARD]/uncaught_errors_2.ts:7:9
-./test/uncaught_errors_3.ts (uncaught error)
+[WILDCARD]/uncaught_errors_3.ts (uncaught error)
error: (in promise) Error: baz
throw new Error("baz");
^
- at [WILDCARD]/test/uncaught_errors_3.ts:1:7
+ at [WILDCARD]/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)
+foo 1 => [WILDCARD]/uncaught_errors_1.ts:1:6
+[WILDCARD]/uncaught_errors_1.ts (uncaught error)
+bar 2 => [WILDCARD]/uncaught_errors_2.ts:3:6
+bar 3 => [WILDCARD]/uncaught_errors_2.ts:6:6
+[WILDCARD]/uncaught_errors_3.ts (uncaught error)
FAILED | 2 passed | 6 failed ([WILDCARD])
diff --git a/tests/testdata/test/uncaught_errors_1.ts b/tests/specs/test/uncaught_errors/uncaught_errors_1.ts
similarity index 100%
rename from tests/testdata/test/uncaught_errors_1.ts
rename to tests/specs/test/uncaught_errors/uncaught_errors_1.ts
diff --git a/tests/testdata/test/uncaught_errors_2.ts b/tests/specs/test/uncaught_errors/uncaught_errors_2.ts
similarity index 100%
rename from tests/testdata/test/uncaught_errors_2.ts
rename to tests/specs/test/uncaught_errors/uncaught_errors_2.ts
diff --git a/tests/testdata/test/uncaught_errors_3.ts b/tests/specs/test/uncaught_errors/uncaught_errors_3.ts
similarity index 100%
rename from tests/testdata/test/uncaught_errors_3.ts
rename to tests/specs/test/uncaught_errors/uncaught_errors_3.ts
diff --git a/tests/specs/test/unhandled_rejection/__test__.jsonc b/tests/specs/test/unhandled_rejection/__test__.jsonc
new file mode 100644
index 00000000000000..d8887f7538360e
--- /dev/null
+++ b/tests/specs/test/unhandled_rejection/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "output": "main.out",
+ "exitCode": 1
+}
diff --git a/tests/testdata/test/unhandled_rejection.out b/tests/specs/test/unhandled_rejection/main.out
similarity index 56%
rename from tests/testdata/test/unhandled_rejection.out
rename to tests/specs/test/unhandled_rejection/main.out
index bc83879296794c..e708ae20c30325 100644
--- a/tests/testdata/test/unhandled_rejection.out
+++ b/tests/specs/test/unhandled_rejection/main.out
@@ -1,21 +1,21 @@
-Check [WILDCARD]/test/unhandled_rejection.ts
-Uncaught error from ./test/unhandled_rejection.ts FAILED
+Check [WILDCARD]/main.ts
+Uncaught error from ./main.ts FAILED
ERRORS
-./test/unhandled_rejection.ts (uncaught error)
+./main.ts (uncaught error)
error: (in promise) Error: rejection
reject(new Error("rejection"));
^
- at [WILDCARD]/test/unhandled_rejection.ts:2:10
+ at [WILDCARD]/main.ts:2:10
at new Promise ()
- at [WILDCARD]/test/unhandled_rejection.ts:1:1
+ at [WILDCARD]/main.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)
+./main.ts (uncaught error)
FAILED | 0 passed | 1 failed ([WILDCARD])
diff --git a/tests/testdata/test/unhandled_rejection.ts b/tests/specs/test/unhandled_rejection/main.ts
similarity index 100%
rename from tests/testdata/test/unhandled_rejection.ts
rename to tests/specs/test/unhandled_rejection/main.ts
diff --git a/tests/specs/test/unresolved_promise/__test__.jsonc b/tests/specs/test/unresolved_promise/__test__.jsonc
new file mode 100644
index 00000000000000..d8887f7538360e
--- /dev/null
+++ b/tests/specs/test/unresolved_promise/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "test main.ts",
+ "output": "main.out",
+ "exitCode": 1
+}
diff --git a/tests/testdata/test/unresolved_promise.out b/tests/specs/test/unresolved_promise/main.out
similarity index 74%
rename from tests/testdata/test/unresolved_promise.out
rename to tests/specs/test/unresolved_promise/main.out
index 88535e1714ad68..0195400b6b286d 100644
--- a/tests/testdata/test/unresolved_promise.out
+++ b/tests/specs/test/unresolved_promise/main.out
@@ -1,9 +1,9 @@
[WILDCARD]
-./test/unresolved_promise.ts (uncaught error)
+./main.ts (uncaught error)
error: Top-level await promise never resolved
await new Promise((_resolve, _reject) => {});
^
- at ([WILDCARD]/test/unresolved_promise.ts:1:1)
+ at ([WILDCARD]/main.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]
diff --git a/tests/testdata/test/unresolved_promise.ts b/tests/specs/test/unresolved_promise/main.ts
similarity index 100%
rename from tests/testdata/test/unresolved_promise.ts
rename to tests/specs/test/unresolved_promise/main.ts
diff --git a/tests/testdata/test/aggregate_error.out b/tests/testdata/test/aggregate_error.out
deleted file mode 100644
index e70bf5963e793b..00000000000000
--- a/tests/testdata/test/aggregate_error.out
+++ /dev/null
@@ -1,22 +0,0 @@
-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/check_local_by_default.out b/tests/testdata/test/check_local_by_default.out
deleted file mode 100644
index 4564f99b860881..00000000000000
--- a/tests/testdata/test/check_local_by_default.out
+++ /dev/null
@@ -1,4 +0,0 @@
-running 0 tests from ./test/check_local_by_default.ts
-
-ok | 0 passed | 0 failed ([WILDCARD])
-
diff --git a/tests/testdata/test/collect.out b/tests/testdata/test/collect.out
deleted file mode 100644
index 734adbe6b15c1c..00000000000000
--- a/tests/testdata/test/collect.out
+++ /dev/null
@@ -1,9 +0,0 @@
-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/collect2.out b/tests/testdata/test/collect2.out
deleted file mode 100644
index 0c00c956a8a7c2..00000000000000
--- a/tests/testdata/test/collect2.out
+++ /dev/null
@@ -1,7 +0,0 @@
-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/doc.out b/tests/testdata/test/doc.out
deleted file mode 100644
index cd8bbb62039e96..00000000000000
--- a/tests/testdata/test/doc.out
+++ /dev/null
@@ -1,9 +0,0 @@
-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
deleted file mode 100644
index 519479fc524f4c..00000000000000
--- a/tests/testdata/test/doc.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * ```
- * 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
deleted file mode 100644
index 2b8b6dc73592ac..00000000000000
--- a/tests/testdata/test/doc_only.out
+++ /dev/null
@@ -1,4 +0,0 @@
-Check [WILDCARD]/test/doc_only/mod.ts$2-5.ts
-
-ok | 0 passed | 0 failed ([WILDCARD])
-
diff --git a/tests/testdata/test/fail.out b/tests/testdata/test/fail.out
deleted file mode 100644
index 3fcf6fd8ffcad6..00000000000000
--- a/tests/testdata/test/fail.out
+++ /dev/null
@@ -1,91 +0,0 @@
-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_fast.out b/tests/testdata/test/fail_fast.out
deleted file mode 100644
index 606d5b345f31db..00000000000000
--- a/tests/testdata/test/fail_fast.out
+++ /dev/null
@@ -1,20 +0,0 @@
-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_with_val.out b/tests/testdata/test/fail_fast_with_val.out
deleted file mode 100644
index a844b05c1a524d..00000000000000
--- a/tests/testdata/test/fail_fast_with_val.out
+++ /dev/null
@@ -1,23 +0,0 @@
-[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/file_protocol.out b/tests/testdata/test/file_protocol.out
deleted file mode 100644
index 3f9c73f7e3e4b6..00000000000000
--- a/tests/testdata/test/file_protocol.out
+++ /dev/null
@@ -1,6 +0,0 @@
-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/filter.out b/tests/testdata/test/filter.out
deleted file mode 100644
index af3e43ab81950e..00000000000000
--- a/tests/testdata/test/filter.out
+++ /dev/null
@@ -1,12 +0,0 @@
-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/finally_timeout.out b/tests/testdata/test/finally_timeout.out
deleted file mode 100644
index 26153da06da080..00000000000000
--- a/tests/testdata/test/finally_timeout.out
+++ /dev/null
@@ -1,20 +0,0 @@
-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/glob/data/tes.ts b/tests/testdata/test/glob/data/tes.ts
index 26f07fba54510d..6940729e9eb848 100644
--- a/tests/testdata/test/glob/data/tes.ts
+++ b/tests/testdata/test/glob/data/tes.ts
@@ -1,3 +1,2 @@
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
index 26f07fba54510d..6940729e9eb848 100644
--- a/tests/testdata/test/glob/data/test1.js
+++ b/tests/testdata/test/glob/data/test1.js
@@ -1,3 +1,2 @@
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
index 26f07fba54510d..6940729e9eb848 100644
--- a/tests/testdata/test/glob/data/test1.ts
+++ b/tests/testdata/test/glob/data/test1.ts
@@ -1,3 +1,2 @@
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
index 26f07fba54510d..6940729e9eb848 100644
--- a/tests/testdata/test/glob/data/test12.ts
+++ b/tests/testdata/test/glob/data/test12.ts
@@ -1,3 +1,2 @@
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
index 26f07fba54510d..6940729e9eb848 100644
--- a/tests/testdata/test/glob/nested/fizz/bar.ts
+++ b/tests/testdata/test/glob/nested/fizz/bar.ts
@@ -1,3 +1,2 @@
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
index 26f07fba54510d..6940729e9eb848 100644
--- a/tests/testdata/test/glob/nested/fizz/bazz.ts
+++ b/tests/testdata/test/glob/nested/fizz/bazz.ts
@@ -1,3 +1,2 @@
function foo() {
-
-}
\ No newline at end of file
+}
diff --git a/tests/testdata/test/glob/nested/fizz/foo.ts b/tests/testdata/test/glob/nested/fizz/foo.ts
index 26f07fba54510d..6940729e9eb848 100644
--- a/tests/testdata/test/glob/nested/fizz/foo.ts
+++ b/tests/testdata/test/glob/nested/fizz/foo.ts
@@ -1,3 +1,2 @@
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
index 26f07fba54510d..6940729e9eb848 100644
--- a/tests/testdata/test/glob/nested/foo/bar.ts
+++ b/tests/testdata/test/glob/nested/foo/bar.ts
@@ -1,3 +1,2 @@
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
index 26f07fba54510d..6940729e9eb848 100644
--- a/tests/testdata/test/glob/nested/foo/bazz.ts
+++ b/tests/testdata/test/glob/nested/foo/bazz.ts
@@ -1,3 +1,2 @@
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
index 26f07fba54510d..6940729e9eb848 100644
--- a/tests/testdata/test/glob/nested/foo/fizz.ts
+++ b/tests/testdata/test/glob/nested/foo/fizz.ts
@@ -1,3 +1,2 @@
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
index 26f07fba54510d..6940729e9eb848 100644
--- a/tests/testdata/test/glob/nested/foo/foo.ts
+++ b/tests/testdata/test/glob/nested/foo/foo.ts
@@ -1,3 +1,2 @@
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
index 26f07fba54510d..6940729e9eb848 100644
--- a/tests/testdata/test/glob/pages/[id].ts
+++ b/tests/testdata/test/glob/pages/[id].ts
@@ -1,3 +1,2 @@
function foo() {
-
-}
\ No newline at end of file
+}
diff --git a/tests/testdata/test/ignore_permissions.out b/tests/testdata/test/ignore_permissions.out
deleted file mode 100644
index cc2574da9c4e77..00000000000000
--- a/tests/testdata/test/ignore_permissions.out
+++ /dev/null
@@ -1,6 +0,0 @@
-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/interval.out b/tests/testdata/test/interval.out
deleted file mode 100644
index 1d0bc15ac239c6..00000000000000
--- a/tests/testdata/test/interval.out
+++ /dev/null
@@ -1,5 +0,0 @@
-Check [WILDCARD]/test/interval.ts
-running 0 tests from ./test/interval.ts
-
-ok | 0 passed | 0 failed ([WILDCARD])
-
diff --git a/tests/testdata/test/junit_multiple_test_files.junit.out b/tests/testdata/test/junit_multiple_test_files.junit.out
deleted file mode 100644
index bf6f3eaa4c6f8d..00000000000000
--- a/tests/testdata/test/junit_multiple_test_files.junit.out
+++ /dev/null
@@ -1,102 +0,0 @@
-Check file:///[WILDCARD]/test/pass.ts
-Check file:///[WILDCARD]/test/fail.ts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Error
- throw new Error();
- ^
- at file:///[WILDCARD]/test/fail.ts:2:9
-
-
- Error
- throw new Error();
- ^
- at file:///[WILDCARD]/test/fail.ts:5:9
-
-
- Error
- throw new Error();
- ^
- at file:///[WILDCARD]/test/fail.ts:8:9
-
-
- Error
- throw new Error();
- ^
- at file:///[WILDCARD]/test/fail.ts:11:9
-
-
- Error
- throw new Error();
- ^
- at file:///[WILDCARD]/test/fail.ts:14:9
-
-
- Error
- throw new Error();
- ^
- at file:///[WILDCARD]/test/fail.ts:17:9
-
-
- Error
- throw new Error();
- ^
- at file:///[WILDCARD]/test/fail.ts:20:9
-
-
- Error
- throw new Error();
- ^
- at file:///[WILDCARD]/test/fail.ts:23:9
-
-
- Error
- throw new Error();
- ^
- at file:///[WILDCARD]/test/fail.ts:26:9
-
-
- Error
- throw new Error();
- ^
- at file:///[WILDCARD]/test/fail.ts:29:9
-
-
-
-error: Test failed
diff --git a/tests/testdata/test/markdown.out b/tests/testdata/test/markdown.out
deleted file mode 100644
index 38c9f0349f5bdc..00000000000000
--- a/tests/testdata/test/markdown.out
+++ /dev/null
@@ -1,7 +0,0 @@
-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.out b/tests/testdata/test/markdown_full_block_names.out
deleted file mode 100644
index 13051112ea485e..00000000000000
--- a/tests/testdata/test/markdown_full_block_names.out
+++ /dev/null
@@ -1,6 +0,0 @@
-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.out b/tests/testdata/test/markdown_windows.out
deleted file mode 100644
index 4810e50cd39eee..00000000000000
--- a/tests/testdata/test/markdown_windows.out
+++ /dev/null
@@ -1,7 +0,0 @@
-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.out b/tests/testdata/test/markdown_with_comment.out
deleted file mode 100644
index b202919d8fd216..00000000000000
--- a/tests/testdata/test/markdown_with_comment.out
+++ /dev/null
@@ -1,5 +0,0 @@
-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/nested_failures.junit.out b/tests/testdata/test/nested_failures.junit.out
deleted file mode 100644
index 3e4d3c0d4b30ea..00000000000000
--- a/tests/testdata/test/nested_failures.junit.out
+++ /dev/null
@@ -1,47 +0,0 @@
-Check file:///[WILDCARD]/test/nested_failures.ts
-
-
-
-
- 1 test step failed.
-
-
- 2 test steps failed.
-
-
-
-
-
-
- Error: Fail.
- throw new Error("Fail.");
- ^
- at file:///[WILDCARD]/test/nested_failures.ts:4:11
- [WILDCARD]
-
-
- 1 test step failed.
-
-
-
-
- Error: Fail.
- throw new Error("Fail.");
- ^
- at file:///[WILDCARD]/test/nested_failures.ts:12:13
- [WILDCARD]
-
-
- Error: Fail.
- throw new Error("Fail.");
- ^
- at file:///[WILDCARD]/test/nested_failures.ts:16:11
- [WILDCARD]
-
-
-
-
-
-
-
-error: Test failed
diff --git a/tests/testdata/test/non_error_thrown.out b/tests/testdata/test/non_error_thrown.out
deleted file mode 100644
index 6755f2905fa528..00000000000000
--- a/tests/testdata/test/non_error_thrown.out
+++ /dev/null
@@ -1,40 +0,0 @@
-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/parallel_output.out b/tests/testdata/test/parallel_output.out
deleted file mode 100644
index d3528a6e0b8c20..00000000000000
--- a/tests/testdata/test/parallel_output.out
+++ /dev/null
@@ -1,56 +0,0 @@
-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/pass.junit.out b/tests/testdata/test/pass.junit.out
deleted file mode 100644
index af9fd6f6b8657a..00000000000000
--- a/tests/testdata/test/pass.junit.out
+++ /dev/null
@@ -1,38 +0,0 @@
-Check file:///[WILDCARD]/test/pass.ts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/testdata/test/sanitizer/ops_sanitizer_step_leak.out b/tests/testdata/test/sanitizer/ops_sanitizer_step_leak.out
deleted file mode 100644
index be88a6e1dab650..00000000000000
--- a/tests/testdata/test/sanitizer/ops_sanitizer_step_leak.out
+++ /dev/null
@@ -1,10 +0,0 @@
-Check [WILDCARD]/ops_sanitizer_step_leak.ts
-running 1 test from [WILDCARD]/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/sanitizer/ops_sanitizer_step_leak.ts b/tests/testdata/test/sanitizer/ops_sanitizer_step_leak.ts
deleted file mode 100644
index 3fb9b397e5bcf7..00000000000000
--- a/tests/testdata/test/sanitizer/ops_sanitizer_step_leak.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-Deno.test("timeout", async (t) => {
- const timer = setTimeout(() => {
- console.log("timeout");
- }, 10000);
- clearTimeout(timer);
- await t.step("step", async () => {
- await new Promise((resolve) => setTimeout(() => resolve(), 10));
- });
- console.log("done");
-});
diff --git a/tests/testdata/test/sanitizer/trace_ops_caught_error/main.out b/tests/testdata/test/sanitizer/trace_ops_caught_error/main.out
deleted file mode 100644
index 4e591adf1edba7..00000000000000
--- a/tests/testdata/test/sanitizer/trace_ops_caught_error/main.out
+++ /dev/null
@@ -1,6 +0,0 @@
-Check file:///[WILDCARD]/trace_ops_caught_error/main.ts
-running 1 test from [WILDCARD]/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/short-pass.out b/tests/testdata/test/short-pass.out
deleted file mode 100644
index 3f239de4147050..00000000000000
--- a/tests/testdata/test/short-pass.out
+++ /dev/null
@@ -1,5 +0,0 @@
-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/steps/failing_steps.dot.out b/tests/testdata/test/steps/failing_steps.dot.out
deleted file mode 100644
index f8ba8d8e62ad4b..00000000000000
--- a/tests/testdata/test/steps/failing_steps.dot.out
+++ /dev/null
@@ -1,53 +0,0 @@
-!
-.
-!
-!
-!
-!
-!
-!
-!
-
- 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/tools/lint.js b/tools/lint.js
index e914fe159c048c..ae7b8470b0faa2 100755
--- a/tools/lint.js
+++ b/tools/lint.js
@@ -221,7 +221,7 @@ async function ensureNoNewITests() {
"run_tests.rs": 334,
"shared_library_tests.rs": 0,
"task_tests.rs": 4,
- "test_tests.rs": 73,
+ "test_tests.rs": 0,
"upgrade_tests.rs": 0,
"vendor_tests.rs": 1,
"watcher_tests.rs": 0,