summaryrefslogtreecommitdiff
path: root/cli/tests
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tests')
-rw-r--r--cli/tests/integration/bench_tests.rs135
-rw-r--r--cli/tests/integration/mod.rs2
-rw-r--r--cli/tests/testdata/bench/allow_all.out18
-rw-r--r--cli/tests/testdata/bench/allow_all.ts35
-rw-r--r--cli/tests/testdata/bench/allow_none.out51
-rw-r--r--cli/tests/testdata/bench/allow_none.ts23
-rw-r--r--cli/tests/testdata/bench/clear_timeout.out8
-rw-r--r--cli/tests/testdata/bench/clear_timeout.ts5
-rw-r--r--cli/tests/testdata/bench/collect.out5
-rw-r--r--cli/tests/testdata/bench/collect/bench.ts0
-rw-r--r--cli/tests/testdata/bench/collect/ignore/bench.ts1
-rw-r--r--cli/tests/testdata/bench/exit_sanitizer.out35
-rw-r--r--cli/tests/testdata/bench/exit_sanitizer.ts11
-rw-r--r--cli/tests/testdata/bench/fail.out81
-rw-r--r--cli/tests/testdata/bench/fail.ts30
-rw-r--r--cli/tests/testdata/bench/filter.out12
-rw-r--r--cli/tests/testdata/bench/filter/a_bench.ts3
-rw-r--r--cli/tests/testdata/bench/filter/b_bench.ts3
-rw-r--r--cli/tests/testdata/bench/filter/c_bench.ts3
-rw-r--r--cli/tests/testdata/bench/finally_timeout.out19
-rw-r--r--cli/tests/testdata/bench/finally_timeout.ts11
-rw-r--r--cli/tests/testdata/bench/ignore.out15
-rw-r--r--cli/tests/testdata/bench/ignore.ts9
-rw-r--r--cli/tests/testdata/bench/ignore_permissions.out6
-rw-r--r--cli/tests/testdata/bench/ignore_permissions.ts16
-rw-r--r--cli/tests/testdata/bench/interval.out5
-rw-r--r--cli/tests/testdata/bench/interval.ts1
-rw-r--r--cli/tests/testdata/bench/load_unload.out6
-rw-r--r--cli/tests/testdata/bench/load_unload.ts22
-rw-r--r--cli/tests/testdata/bench/meta.out7
-rw-r--r--cli/tests/testdata/bench/meta.ts2
-rw-r--r--cli/tests/testdata/bench/no_check.out8
-rw-r--r--cli/tests/testdata/bench/no_check.ts1
-rw-r--r--cli/tests/testdata/bench/no_color.ts17
-rw-r--r--cli/tests/testdata/bench/no_prompt_by_default.out17
-rw-r--r--cli/tests/testdata/bench/no_prompt_by_default.ts3
-rw-r--r--cli/tests/testdata/bench/no_prompt_with_denied_perms.out17
-rw-r--r--cli/tests/testdata/bench/no_prompt_with_denied_perms.ts3
-rw-r--r--cli/tests/testdata/bench/only.out7
-rw-r--r--cli/tests/testdata/bench/only.ts15
-rw-r--r--cli/tests/testdata/bench/overloads.out11
-rw-r--r--cli/tests/testdata/bench/overloads.ts6
-rw-r--r--cli/tests/testdata/bench/pass.out15
-rw-r--r--cli/tests/testdata/bench/pass.ts10
-rw-r--r--cli/tests/testdata/bench/quiet.out8
-rw-r--r--cli/tests/testdata/bench/quiet.ts15
-rw-r--r--cli/tests/testdata/bench/unhandled_rejection.out10
-rw-r--r--cli/tests/testdata/bench/unhandled_rejection.ts3
-rw-r--r--cli/tests/testdata/bench/unresolved_promise.out5
-rw-r--r--cli/tests/testdata/bench/unresolved_promise.ts1
50 files changed, 752 insertions, 0 deletions
diff --git a/cli/tests/integration/bench_tests.rs b/cli/tests/integration/bench_tests.rs
new file mode 100644
index 000000000..06806c0b7
--- /dev/null
+++ b/cli/tests/integration/bench_tests.rs
@@ -0,0 +1,135 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+
+use crate::itest;
+
+itest!(overloads {
+ args: "bench --unstable bench/overloads.ts",
+ exit_code: 0,
+ output: "bench/overloads.out",
+});
+
+itest!(meta {
+ args: "bench --unstable bench/meta.ts",
+ exit_code: 0,
+ output: "bench/meta.out",
+});
+
+itest!(pass {
+ args: "bench --unstable bench/pass.ts",
+ exit_code: 0,
+ output: "bench/pass.out",
+});
+
+itest!(ignore {
+ args: "bench --unstable bench/ignore.ts",
+ exit_code: 0,
+ output: "bench/ignore.out",
+});
+
+itest!(ignore_permissions {
+ args: "bench --unstable bench/ignore_permissions.ts",
+ exit_code: 0,
+ output: "bench/ignore_permissions.out",
+});
+
+itest!(fail {
+ args: "bench --unstable bench/fail.ts",
+ exit_code: 1,
+ output: "bench/fail.out",
+});
+
+itest!(collect {
+ args: "bench --unstable --ignore=bench/collect/ignore bench/collect",
+ exit_code: 0,
+ output: "bench/collect.out",
+});
+
+itest!(load_unload {
+ args: "bench --unstable bench/load_unload.ts",
+ exit_code: 0,
+ output: "bench/load_unload.out",
+});
+
+itest!(interval {
+ args: "bench --unstable bench/interval.ts",
+ exit_code: 0,
+ output: "bench/interval.out",
+});
+
+itest!(quiet {
+ args: "bench --unstable --quiet bench/quiet.ts",
+ exit_code: 0,
+ output: "bench/quiet.out",
+});
+
+itest!(only {
+ args: "bench --unstable bench/only.ts",
+ exit_code: 1,
+ output: "bench/only.out",
+});
+
+itest!(no_check {
+ args: "bench --unstable --no-check bench/no_check.ts",
+ exit_code: 1,
+ output: "bench/no_check.out",
+});
+
+itest!(allow_all {
+ args: "bench --unstable --allow-all bench/allow_all.ts",
+ exit_code: 0,
+ output: "bench/allow_all.out",
+});
+
+itest!(allow_none {
+ args: "bench --unstable bench/allow_none.ts",
+ exit_code: 1,
+ output: "bench/allow_none.out",
+});
+
+itest!(exit_sanitizer {
+ args: "bench --unstable bench/exit_sanitizer.ts",
+ output: "bench/exit_sanitizer.out",
+ exit_code: 1,
+});
+
+itest!(clear_timeout {
+ args: "bench --unstable bench/clear_timeout.ts",
+ exit_code: 0,
+ output: "bench/clear_timeout.out",
+});
+
+itest!(finally_timeout {
+ args: "bench --unstable bench/finally_timeout.ts",
+ exit_code: 1,
+ output: "bench/finally_timeout.out",
+});
+
+itest!(unresolved_promise {
+ args: "bench --unstable bench/unresolved_promise.ts",
+ exit_code: 1,
+ output: "bench/unresolved_promise.out",
+});
+
+itest!(unhandled_rejection {
+ args: "bench --unstable bench/unhandled_rejection.ts",
+ exit_code: 1,
+ output: "bench/unhandled_rejection.out",
+});
+
+itest!(filter {
+ args: "bench --unstable --filter=foo bench/filter",
+ exit_code: 0,
+ output: "bench/filter.out",
+});
+
+itest!(no_prompt_by_default {
+ args: "bench --unstable bench/no_prompt_by_default.ts",
+ exit_code: 1,
+ output: "bench/no_prompt_by_default.out",
+});
+
+itest!(no_prompt_with_denied_perms {
+ args: "bench --unstable --allow-read bench/no_prompt_with_denied_perms.ts",
+ exit_code: 1,
+ output: "bench/no_prompt_with_denied_perms.out",
+});
diff --git a/cli/tests/integration/mod.rs b/cli/tests/integration/mod.rs
index 8d934dc0f..98b203ee9 100644
--- a/cli/tests/integration/mod.rs
+++ b/cli/tests/integration/mod.rs
@@ -50,6 +50,8 @@ macro_rules! itest_flaky(
// the test (ex. `lint_tests.rs`) and which is the implementation (ex. `lint.rs`)
// when both are open, especially for two tabs in VS Code
+#[path = "bench_tests.rs"]
+mod bench;
#[path = "bundle_tests.rs"]
mod bundle;
#[path = "cache_tests.rs"]
diff --git a/cli/tests/testdata/bench/allow_all.out b/cli/tests/testdata/bench/allow_all.out
new file mode 100644
index 000000000..eb7d2005c
--- /dev/null
+++ b/cli/tests/testdata/bench/allow_all.out
@@ -0,0 +1,18 @@
+[WILDCARD]
+running 14 benches from [WILDCARD]
+bench read false ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench read true ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench write false ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench write true ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench net false ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench net true ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench env false ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench env true ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench run false ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench run true ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench ffi false ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench ffi true ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench hrtime false ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench hrtime true ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+
+bench result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out [WILDCARD]
diff --git a/cli/tests/testdata/bench/allow_all.ts b/cli/tests/testdata/bench/allow_all.ts
new file mode 100644
index 000000000..110e4621f
--- /dev/null
+++ b/cli/tests/testdata/bench/allow_all.ts
@@ -0,0 +1,35 @@
+import { assertEquals } from "../../../../test_util/std/testing/asserts.ts";
+
+const permissions: Deno.PermissionName[] = [
+ "read",
+ "write",
+ "net",
+ "env",
+ "run",
+ "ffi",
+ "hrtime",
+];
+
+for (const name of permissions) {
+ Deno.bench({
+ name: `${name} false`,
+ permissions: {
+ [name]: false,
+ },
+ async fn() {
+ const status = await Deno.permissions.query({ name });
+ assertEquals(status.state, "prompt");
+ },
+ });
+
+ Deno.bench({
+ name: `${name} true`,
+ permissions: {
+ [name]: true,
+ },
+ async fn() {
+ const status = await Deno.permissions.query({ name });
+ assertEquals(status.state, "granted");
+ },
+ });
+}
diff --git a/cli/tests/testdata/bench/allow_none.out b/cli/tests/testdata/bench/allow_none.out
new file mode 100644
index 000000000..0eb2ba5a3
--- /dev/null
+++ b/cli/tests/testdata/bench/allow_none.out
@@ -0,0 +1,51 @@
+[WILDCARD]
+running 7 benches from [WILDCARD]
+bench read ... 1000 iterations FAILED [WILDCARD]
+bench write ... 1000 iterations FAILED [WILDCARD]
+bench net ... 1000 iterations FAILED [WILDCARD]
+bench env ... 1000 iterations FAILED [WILDCARD]
+bench run ... 1000 iterations FAILED [WILDCARD]
+bench ffi ... 1000 iterations FAILED [WILDCARD]
+bench hrtime ... 1000 iterations FAILED [WILDCARD]
+
+failures:
+
+read
+PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+write
+PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+net
+PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+env
+PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+run
+PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+ffi
+PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+hrtime
+PermissionDenied: Can't escalate parent thread permissions
+[WILDCARD]
+
+failures:
+
+ read
+ write
+ net
+ env
+ run
+ ffi
+ hrtime
+
+bench result: FAILED. 0 passed; 7 failed; 0 ignored; 0 measured; 0 filtered out [WILDCARD]
diff --git a/cli/tests/testdata/bench/allow_none.ts b/cli/tests/testdata/bench/allow_none.ts
new file mode 100644
index 000000000..778e98420
--- /dev/null
+++ b/cli/tests/testdata/bench/allow_none.ts
@@ -0,0 +1,23 @@
+import { unreachable } from "../../../../test_util/std/testing/asserts.ts";
+
+const permissions: Deno.PermissionName[] = [
+ "read",
+ "write",
+ "net",
+ "env",
+ "run",
+ "ffi",
+ "hrtime",
+];
+
+for (const name of permissions) {
+ Deno.bench({
+ name,
+ permissions: {
+ [name]: true,
+ },
+ fn() {
+ unreachable();
+ },
+ });
+}
diff --git a/cli/tests/testdata/bench/clear_timeout.out b/cli/tests/testdata/bench/clear_timeout.out
new file mode 100644
index 000000000..10aa47d75
--- /dev/null
+++ b/cli/tests/testdata/bench/clear_timeout.out
@@ -0,0 +1,8 @@
+Check [WILDCARD]/bench/clear_timeout.ts
+running 3 benches from [WILDCARD]/bench/clear_timeout.ts
+bench bench1 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench2 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench3 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+
+bench result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
diff --git a/cli/tests/testdata/bench/clear_timeout.ts b/cli/tests/testdata/bench/clear_timeout.ts
new file mode 100644
index 000000000..4148263ac
--- /dev/null
+++ b/cli/tests/testdata/bench/clear_timeout.ts
@@ -0,0 +1,5 @@
+clearTimeout(setTimeout(() => {}, 1000));
+
+Deno.bench("bench1", () => {});
+Deno.bench("bench2", () => {});
+Deno.bench("bench3", () => {});
diff --git a/cli/tests/testdata/bench/collect.out b/cli/tests/testdata/bench/collect.out
new file mode 100644
index 000000000..570b2e4f2
--- /dev/null
+++ b/cli/tests/testdata/bench/collect.out
@@ -0,0 +1,5 @@
+Check [WILDCARD]/bench/collect/bench.ts
+running 0 benches from [WILDCARD]/bench/collect/bench.ts
+
+bench result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
diff --git a/cli/tests/testdata/bench/collect/bench.ts b/cli/tests/testdata/bench/collect/bench.ts
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/cli/tests/testdata/bench/collect/bench.ts
diff --git a/cli/tests/testdata/bench/collect/ignore/bench.ts b/cli/tests/testdata/bench/collect/ignore/bench.ts
new file mode 100644
index 000000000..16fb63ba7
--- /dev/null
+++ b/cli/tests/testdata/bench/collect/ignore/bench.ts
@@ -0,0 +1 @@
+throw new Error("this module should be ignored");
diff --git a/cli/tests/testdata/bench/exit_sanitizer.out b/cli/tests/testdata/bench/exit_sanitizer.out
new file mode 100644
index 000000000..23ce871fc
--- /dev/null
+++ b/cli/tests/testdata/bench/exit_sanitizer.out
@@ -0,0 +1,35 @@
+Check [WILDCARD]/bench/exit_sanitizer.ts
+running 3 benches from [WILDCARD]/bench/exit_sanitizer.ts
+bench exit(0) ... 1000 iterations FAILED ([WILDCARD])
+bench exit(1) ... 1000 iterations FAILED ([WILDCARD])
+bench exit(2) ... 1000 iterations FAILED ([WILDCARD])
+
+failures:
+
+exit(0)
+AssertionError: Bench attempted to exit with exit code: 0
+ at [WILDCARD]
+ at [WILDCARD]/bench/exit_sanitizer.ts:2:8
+ at [WILDCARD]
+
+exit(1)
+AssertionError: Bench attempted to exit with exit code: 1
+ at [WILDCARD]
+ at [WILDCARD]/bench/exit_sanitizer.ts:6:8
+ at [WILDCARD]
+
+exit(2)
+AssertionError: Bench attempted to exit with exit code: 2
+ at [WILDCARD]
+ at [WILDCARD]/bench/exit_sanitizer.ts:10:8
+ at [WILDCARD]
+
+failures:
+
+ exit(0)
+ exit(1)
+ exit(2)
+
+bench result: FAILED. 0 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
+error: Bench failed
diff --git a/cli/tests/testdata/bench/exit_sanitizer.ts b/cli/tests/testdata/bench/exit_sanitizer.ts
new file mode 100644
index 000000000..8e596b310
--- /dev/null
+++ b/cli/tests/testdata/bench/exit_sanitizer.ts
@@ -0,0 +1,11 @@
+Deno.bench("exit(0)", function () {
+ Deno.exit(0);
+});
+
+Deno.bench("exit(1)", function () {
+ Deno.exit(1);
+});
+
+Deno.bench("exit(2)", function () {
+ Deno.exit(2);
+});
diff --git a/cli/tests/testdata/bench/fail.out b/cli/tests/testdata/bench/fail.out
new file mode 100644
index 000000000..9779a27fe
--- /dev/null
+++ b/cli/tests/testdata/bench/fail.out
@@ -0,0 +1,81 @@
+Check [WILDCARD]/bench/fail.ts
+running 10 benches from [WILDCARD]/bench/fail.ts
+bench bench0 ... 1000 iterations FAILED ([WILDCARD])
+bench bench1 ... 1000 iterations FAILED ([WILDCARD])
+bench bench2 ... 1000 iterations FAILED ([WILDCARD])
+bench bench3 ... 1000 iterations FAILED ([WILDCARD])
+bench bench4 ... 1000 iterations FAILED ([WILDCARD])
+bench bench5 ... 1000 iterations FAILED ([WILDCARD])
+bench bench6 ... 1000 iterations FAILED ([WILDCARD])
+bench bench7 ... 1000 iterations FAILED ([WILDCARD])
+bench bench8 ... 1000 iterations FAILED ([WILDCARD])
+bench bench9 ... 1000 iterations FAILED ([WILDCARD])
+
+failures:
+
+bench0
+Error
+ at [WILDCARD]/bench/fail.ts:2:9
+ at [WILDCARD]
+
+bench1
+Error
+ at [WILDCARD]/bench/fail.ts:5:9
+ at [WILDCARD]
+
+bench2
+Error
+ at [WILDCARD]/bench/fail.ts:8:9
+ at [WILDCARD]
+
+bench3
+Error
+ at [WILDCARD]/bench/fail.ts:11:9
+ at [WILDCARD]
+
+bench4
+Error
+ at [WILDCARD]/bench/fail.ts:14:9
+ at [WILDCARD]
+
+bench5
+Error
+ at [WILDCARD]/bench/fail.ts:17:9
+ at [WILDCARD]
+
+bench6
+Error
+ at [WILDCARD]/bench/fail.ts:20:9
+ at [WILDCARD]
+
+bench7
+Error
+ at [WILDCARD]/bench/fail.ts:23:9
+ at [WILDCARD]
+
+bench8
+Error
+ at [WILDCARD]/bench/fail.ts:26:9
+ at [WILDCARD]
+
+bench9
+Error
+ at [WILDCARD]/bench/fail.ts:29:9
+ at [WILDCARD]
+
+failures:
+
+ bench0
+ bench1
+ bench2
+ bench3
+ bench4
+ bench5
+ bench6
+ bench7
+ bench8
+ bench9
+
+bench result: FAILED. 0 passed; 10 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
+error: Bench failed
diff --git a/cli/tests/testdata/bench/fail.ts b/cli/tests/testdata/bench/fail.ts
new file mode 100644
index 000000000..33d70ce55
--- /dev/null
+++ b/cli/tests/testdata/bench/fail.ts
@@ -0,0 +1,30 @@
+Deno.bench("bench0", () => {
+ throw new Error();
+});
+Deno.bench("bench1", () => {
+ throw new Error();
+});
+Deno.bench("bench2", () => {
+ throw new Error();
+});
+Deno.bench("bench3", () => {
+ throw new Error();
+});
+Deno.bench("bench4", () => {
+ throw new Error();
+});
+Deno.bench("bench5", () => {
+ throw new Error();
+});
+Deno.bench("bench6", () => {
+ throw new Error();
+});
+Deno.bench("bench7", () => {
+ throw new Error();
+});
+Deno.bench("bench8", () => {
+ throw new Error();
+});
+Deno.bench("bench9", () => {
+ throw new Error();
+});
diff --git a/cli/tests/testdata/bench/filter.out b/cli/tests/testdata/bench/filter.out
new file mode 100644
index 000000000..8657e56cc
--- /dev/null
+++ b/cli/tests/testdata/bench/filter.out
@@ -0,0 +1,12 @@
+Check [WILDCARD]/bench/filter/a_bench.ts
+Check [WILDCARD]/bench/filter/b_bench.ts
+Check [WILDCARD]/bench/filter/c_bench.ts
+running 1 bench from [WILDCARD]/bench/filter/a_bench.ts
+bench foo ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+running 1 bench from [WILDCARD]/bench/filter/b_bench.ts
+bench foo ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+running 1 bench from [WILDCARD]/bench/filter/c_bench.ts
+bench foo ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+
+bench result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 6 filtered out ([WILDCARD])
+
diff --git a/cli/tests/testdata/bench/filter/a_bench.ts b/cli/tests/testdata/bench/filter/a_bench.ts
new file mode 100644
index 000000000..fc4ef859c
--- /dev/null
+++ b/cli/tests/testdata/bench/filter/a_bench.ts
@@ -0,0 +1,3 @@
+Deno.bench("foo", function () {});
+Deno.bench("bar", function () {});
+Deno.bench("baz", function () {});
diff --git a/cli/tests/testdata/bench/filter/b_bench.ts b/cli/tests/testdata/bench/filter/b_bench.ts
new file mode 100644
index 000000000..fc4ef859c
--- /dev/null
+++ b/cli/tests/testdata/bench/filter/b_bench.ts
@@ -0,0 +1,3 @@
+Deno.bench("foo", function () {});
+Deno.bench("bar", function () {});
+Deno.bench("baz", function () {});
diff --git a/cli/tests/testdata/bench/filter/c_bench.ts b/cli/tests/testdata/bench/filter/c_bench.ts
new file mode 100644
index 000000000..fc4ef859c
--- /dev/null
+++ b/cli/tests/testdata/bench/filter/c_bench.ts
@@ -0,0 +1,3 @@
+Deno.bench("foo", function () {});
+Deno.bench("bar", function () {});
+Deno.bench("baz", function () {});
diff --git a/cli/tests/testdata/bench/finally_timeout.out b/cli/tests/testdata/bench/finally_timeout.out
new file mode 100644
index 000000000..dfae4607d
--- /dev/null
+++ b/cli/tests/testdata/bench/finally_timeout.out
@@ -0,0 +1,19 @@
+Check [WILDCARD]/bench/finally_timeout.ts
+running 2 benches from [WILDCARD]/bench/finally_timeout.ts
+bench error ... 1000 iterations FAILED ([WILDCARD])
+bench success ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+
+failures:
+
+error
+Error: fail
+ at [WILDCARD]/bench/finally_timeout.ts:4:11
+ at [WILDCARD]
+
+failures:
+
+ error
+
+bench result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
+error: Bench failed
diff --git a/cli/tests/testdata/bench/finally_timeout.ts b/cli/tests/testdata/bench/finally_timeout.ts
new file mode 100644
index 000000000..c49eb8da2
--- /dev/null
+++ b/cli/tests/testdata/bench/finally_timeout.ts
@@ -0,0 +1,11 @@
+Deno.bench("error", function () {
+ const timer = setTimeout(() => null, 10000);
+ try {
+ throw new Error("fail");
+ } finally {
+ clearTimeout(timer);
+ }
+});
+
+Deno.bench("success", function () {
+});
diff --git a/cli/tests/testdata/bench/ignore.out b/cli/tests/testdata/bench/ignore.out
new file mode 100644
index 000000000..cda77ea52
--- /dev/null
+++ b/cli/tests/testdata/bench/ignore.out
@@ -0,0 +1,15 @@
+Check [WILDCARD]/bench/ignore.ts
+running 10 benches from [WILDCARD]/bench/ignore.ts
+bench bench0 ... 1000 iterations ignored ([WILDCARD])
+bench bench1 ... 1000 iterations ignored ([WILDCARD])
+bench bench2 ... 1000 iterations ignored ([WILDCARD])
+bench bench3 ... 1000 iterations ignored ([WILDCARD])
+bench bench4 ... 1000 iterations ignored ([WILDCARD])
+bench bench5 ... 1000 iterations ignored ([WILDCARD])
+bench bench6 ... 1000 iterations ignored ([WILDCARD])
+bench bench7 ... 1000 iterations ignored ([WILDCARD])
+bench bench8 ... 1000 iterations ignored ([WILDCARD])
+bench bench9 ... 1000 iterations ignored ([WILDCARD])
+
+bench result: ok. 0 passed; 0 failed; 10 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
diff --git a/cli/tests/testdata/bench/ignore.ts b/cli/tests/testdata/bench/ignore.ts
new file mode 100644
index 000000000..0226fe76f
--- /dev/null
+++ b/cli/tests/testdata/bench/ignore.ts
@@ -0,0 +1,9 @@
+for (let i = 0; i < 10; i++) {
+ Deno.bench({
+ name: `bench${i}`,
+ ignore: true,
+ fn() {
+ throw new Error("unreachable");
+ },
+ });
+}
diff --git a/cli/tests/testdata/bench/ignore_permissions.out b/cli/tests/testdata/bench/ignore_permissions.out
new file mode 100644
index 000000000..c55ccaa21
--- /dev/null
+++ b/cli/tests/testdata/bench/ignore_permissions.out
@@ -0,0 +1,6 @@
+Check [WILDCARD]/bench/ignore_permissions.ts
+running 1 bench from [WILDCARD]/bench/ignore_permissions.ts
+bench ignore ... 1000 iterations ignored ([WILDCARD])
+
+bench result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
diff --git a/cli/tests/testdata/bench/ignore_permissions.ts b/cli/tests/testdata/bench/ignore_permissions.ts
new file mode 100644
index 000000000..0dcd9299f
--- /dev/null
+++ b/cli/tests/testdata/bench/ignore_permissions.ts
@@ -0,0 +1,16 @@
+Deno.bench({
+ name: "ignore",
+ permissions: {
+ read: true,
+ write: true,
+ net: true,
+ env: true,
+ run: true,
+ ffi: true,
+ hrtime: true,
+ },
+ ignore: true,
+ fn() {
+ throw new Error("unreachable");
+ },
+});
diff --git a/cli/tests/testdata/bench/interval.out b/cli/tests/testdata/bench/interval.out
new file mode 100644
index 000000000..dec5549ef
--- /dev/null
+++ b/cli/tests/testdata/bench/interval.out
@@ -0,0 +1,5 @@
+Check [WILDCARD]/bench/interval.ts
+running 0 benches from [WILDCARD]/bench/interval.ts
+
+bench result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
diff --git a/cli/tests/testdata/bench/interval.ts b/cli/tests/testdata/bench/interval.ts
new file mode 100644
index 000000000..7eb588c59
--- /dev/null
+++ b/cli/tests/testdata/bench/interval.ts
@@ -0,0 +1 @@
+setInterval(function () {}, 0);
diff --git a/cli/tests/testdata/bench/load_unload.out b/cli/tests/testdata/bench/load_unload.out
new file mode 100644
index 000000000..9b73341d4
--- /dev/null
+++ b/cli/tests/testdata/bench/load_unload.out
@@ -0,0 +1,6 @@
+Check [WILDCARD]/bench/load_unload.ts
+running 1 bench from [WILDCARD]/bench/load_unload.ts
+bench bench ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+
+bench result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
diff --git a/cli/tests/testdata/bench/load_unload.ts b/cli/tests/testdata/bench/load_unload.ts
new file mode 100644
index 000000000..3653c135d
--- /dev/null
+++ b/cli/tests/testdata/bench/load_unload.ts
@@ -0,0 +1,22 @@
+let interval: number | null = null;
+addEventListener("load", () => {
+ if (interval) {
+ throw new Error("Interval is already set");
+ }
+
+ interval = setInterval(() => {}, 0);
+});
+
+addEventListener("unload", () => {
+ if (!interval) {
+ throw new Error("Interval was not set");
+ }
+
+ clearInterval(interval);
+});
+
+Deno.bench("bench", () => {
+ if (!interval) {
+ throw new Error("Interval was not set");
+ }
+});
diff --git a/cli/tests/testdata/bench/meta.out b/cli/tests/testdata/bench/meta.out
new file mode 100644
index 000000000..e62172eb3
--- /dev/null
+++ b/cli/tests/testdata/bench/meta.out
@@ -0,0 +1,7 @@
+Check [WILDCARD]/bench/meta.ts
+import.meta.main: false
+import.meta.url: [WILDCARD]/bench/meta.ts
+running 0 benches from [WILDCARD]/bench/meta.ts
+
+bench result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
diff --git a/cli/tests/testdata/bench/meta.ts b/cli/tests/testdata/bench/meta.ts
new file mode 100644
index 000000000..e32fdeea6
--- /dev/null
+++ b/cli/tests/testdata/bench/meta.ts
@@ -0,0 +1,2 @@
+console.log("import.meta.main: %s", import.meta.main);
+console.log("import.meta.url: %s", import.meta.url);
diff --git a/cli/tests/testdata/bench/no_check.out b/cli/tests/testdata/bench/no_check.out
new file mode 100644
index 000000000..ceb8b22fc
--- /dev/null
+++ b/cli/tests/testdata/bench/no_check.out
@@ -0,0 +1,8 @@
+
+bench result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
+error: Uncaught TypeError: Cannot read properties of undefined (reading 'fn')
+Deno.bench();
+ ^
+ at [WILDCARD]
+ at [WILDCARD]/bench/no_check.ts:1:6
diff --git a/cli/tests/testdata/bench/no_check.ts b/cli/tests/testdata/bench/no_check.ts
new file mode 100644
index 000000000..b159cabd6
--- /dev/null
+++ b/cli/tests/testdata/bench/no_check.ts
@@ -0,0 +1 @@
+Deno.bench();
diff --git a/cli/tests/testdata/bench/no_color.ts b/cli/tests/testdata/bench/no_color.ts
new file mode 100644
index 000000000..d15bf3572
--- /dev/null
+++ b/cli/tests/testdata/bench/no_color.ts
@@ -0,0 +1,17 @@
+Deno.bench({
+ name: "success",
+ fn() {},
+});
+
+Deno.bench({
+ name: "fail",
+ fn() {
+ throw new Error("fail");
+ },
+});
+
+Deno.bench({
+ name: "ignored",
+ ignore: true,
+ fn() {},
+});
diff --git a/cli/tests/testdata/bench/no_prompt_by_default.out b/cli/tests/testdata/bench/no_prompt_by_default.out
new file mode 100644
index 000000000..3fe67b720
--- /dev/null
+++ b/cli/tests/testdata/bench/no_prompt_by_default.out
@@ -0,0 +1,17 @@
+Check [WILDCARD]no_prompt_by_default.ts
+running 1 bench from [WILDCARD]no_prompt_by_default.ts
+bench no prompt ... 1000 iterations FAILED ([WILDCARD]ms)
+
+failures:
+
+no prompt
+PermissionDenied: Requires read access to "./some_file.txt", run again with the --allow-read flag
+[WILDCARD]
+
+failures:
+
+ no prompt
+
+bench result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD]ms)
+
+error: Bench failed
diff --git a/cli/tests/testdata/bench/no_prompt_by_default.ts b/cli/tests/testdata/bench/no_prompt_by_default.ts
new file mode 100644
index 000000000..59359eebd
--- /dev/null
+++ b/cli/tests/testdata/bench/no_prompt_by_default.ts
@@ -0,0 +1,3 @@
+Deno.bench("no prompt", async () => {
+ await Deno.readTextFile("./some_file.txt");
+});
diff --git a/cli/tests/testdata/bench/no_prompt_with_denied_perms.out b/cli/tests/testdata/bench/no_prompt_with_denied_perms.out
new file mode 100644
index 000000000..f6aec6226
--- /dev/null
+++ b/cli/tests/testdata/bench/no_prompt_with_denied_perms.out
@@ -0,0 +1,17 @@
+Check [WILDCARD]/no_prompt_with_denied_perms.ts
+running 1 bench from [WILDCARD]/no_prompt_with_denied_perms.ts
+bench no prompt ... 1000 iterations FAILED ([WILDCARD]ms)
+
+failures:
+
+no prompt
+PermissionDenied: Requires read access to "./some_file.txt", run again with the --allow-read flag
+[WILDCARD]
+
+failures:
+
+ no prompt
+
+bench result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD]ms)
+
+error: Bench failed
diff --git a/cli/tests/testdata/bench/no_prompt_with_denied_perms.ts b/cli/tests/testdata/bench/no_prompt_with_denied_perms.ts
new file mode 100644
index 000000000..2f0d63bbe
--- /dev/null
+++ b/cli/tests/testdata/bench/no_prompt_with_denied_perms.ts
@@ -0,0 +1,3 @@
+Deno.bench("no prompt", { permissions: { read: false } }, async () => {
+ await Deno.readTextFile("./some_file.txt");
+});
diff --git a/cli/tests/testdata/bench/only.out b/cli/tests/testdata/bench/only.out
new file mode 100644
index 000000000..3c9855560
--- /dev/null
+++ b/cli/tests/testdata/bench/only.out
@@ -0,0 +1,7 @@
+Check [WILDCARD]/bench/only.ts
+running 1 bench from [WILDCARD]/bench/only.ts
+bench only ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+
+bench result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 2 filtered out ([WILDCARD])
+
+error: Bench failed because the "only" option was used
diff --git a/cli/tests/testdata/bench/only.ts b/cli/tests/testdata/bench/only.ts
new file mode 100644
index 000000000..0129c024c
--- /dev/null
+++ b/cli/tests/testdata/bench/only.ts
@@ -0,0 +1,15 @@
+Deno.bench({
+ name: "before",
+ fn() {},
+});
+
+Deno.bench({
+ only: true,
+ name: "only",
+ fn() {},
+});
+
+Deno.bench({
+ name: "after",
+ fn() {},
+});
diff --git a/cli/tests/testdata/bench/overloads.out b/cli/tests/testdata/bench/overloads.out
new file mode 100644
index 000000000..a736b2e98
--- /dev/null
+++ b/cli/tests/testdata/bench/overloads.out
@@ -0,0 +1,11 @@
+Check [WILDCARD]/bench/overloads.ts
+running 6 benches from [WILDCARD]/bench/overloads.ts
+bench bench0 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench1 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench2 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench3 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench4 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench5 ... 1000 iterations ignored ([WILDCARD])
+
+bench result: ok. 5 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
diff --git a/cli/tests/testdata/bench/overloads.ts b/cli/tests/testdata/bench/overloads.ts
new file mode 100644
index 000000000..4f5887f79
--- /dev/null
+++ b/cli/tests/testdata/bench/overloads.ts
@@ -0,0 +1,6 @@
+Deno.bench("bench0", () => {});
+Deno.bench(function bench1() {});
+Deno.bench({ name: "bench2", fn: () => {} });
+Deno.bench("bench3", { permissions: "none" }, () => {});
+Deno.bench({ name: "bench4" }, () => {});
+Deno.bench({ ignore: true }, function bench5() {});
diff --git a/cli/tests/testdata/bench/pass.out b/cli/tests/testdata/bench/pass.out
new file mode 100644
index 000000000..99320e666
--- /dev/null
+++ b/cli/tests/testdata/bench/pass.out
@@ -0,0 +1,15 @@
+Check [WILDCARD]/bench/pass.ts
+running 10 benches from [WILDCARD]/bench/pass.ts
+bench bench0 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench1 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench2 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench3 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench4 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench5 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench6 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench7 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench8 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+bench bench9 ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok ([WILDCARD])
+
+bench result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
diff --git a/cli/tests/testdata/bench/pass.ts b/cli/tests/testdata/bench/pass.ts
new file mode 100644
index 000000000..48348d447
--- /dev/null
+++ b/cli/tests/testdata/bench/pass.ts
@@ -0,0 +1,10 @@
+Deno.bench("bench0", () => {});
+Deno.bench("bench1", () => {});
+Deno.bench("bench2", () => {});
+Deno.bench("bench3", () => {});
+Deno.bench("bench4", () => {});
+Deno.bench("bench5", () => {});
+Deno.bench("bench6", () => {});
+Deno.bench("bench7", () => {});
+Deno.bench("bench8", () => {});
+Deno.bench("bench9", () => {});
diff --git a/cli/tests/testdata/bench/quiet.out b/cli/tests/testdata/bench/quiet.out
new file mode 100644
index 000000000..e214980e6
--- /dev/null
+++ b/cli/tests/testdata/bench/quiet.out
@@ -0,0 +1,8 @@
+running 4 benches from [WILDCARD]/bench/quiet.ts
+bench console.log ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench console.error ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench console.info ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+bench console.warn ... 1000 iterations [WILDCARD] ns/iter ([WILDCARD]..[WILDCARD] ns/iter) ok [WILDCARD]
+
+bench result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
diff --git a/cli/tests/testdata/bench/quiet.ts b/cli/tests/testdata/bench/quiet.ts
new file mode 100644
index 000000000..efeb366ff
--- /dev/null
+++ b/cli/tests/testdata/bench/quiet.ts
@@ -0,0 +1,15 @@
+Deno.bench("console.log", function () {
+ console.log("log");
+});
+
+Deno.bench("console.error", function () {
+ console.error("error");
+});
+
+Deno.bench("console.info", function () {
+ console.info("info");
+});
+
+Deno.bench("console.warn", function () {
+ console.info("warn");
+});
diff --git a/cli/tests/testdata/bench/unhandled_rejection.out b/cli/tests/testdata/bench/unhandled_rejection.out
new file mode 100644
index 000000000..0e2b03c3e
--- /dev/null
+++ b/cli/tests/testdata/bench/unhandled_rejection.out
@@ -0,0 +1,10 @@
+Check [WILDCARD]/bench/unhandled_rejection.ts
+
+bench result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
+error: Uncaught (in promise) Error: rejection
+ reject(new Error("rejection"));
+ ^
+ at [WILDCARD]/bench/unhandled_rejection.ts:2:10
+ at new Promise (<anonymous>)
+ at [WILDCARD]/bench/unhandled_rejection.ts:1:1
diff --git a/cli/tests/testdata/bench/unhandled_rejection.ts b/cli/tests/testdata/bench/unhandled_rejection.ts
new file mode 100644
index 000000000..32f3111ea
--- /dev/null
+++ b/cli/tests/testdata/bench/unhandled_rejection.ts
@@ -0,0 +1,3 @@
+new Promise((_resolve, reject) => {
+ reject(new Error("rejection"));
+});
diff --git a/cli/tests/testdata/bench/unresolved_promise.out b/cli/tests/testdata/bench/unresolved_promise.out
new file mode 100644
index 000000000..b3c3d65f9
--- /dev/null
+++ b/cli/tests/testdata/bench/unresolved_promise.out
@@ -0,0 +1,5 @@
+Check [WILDCARD]/bench/unresolved_promise.ts
+
+bench result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD])
+
+error: Module evaluation is still pending but there are no pending ops or dynamic imports. This situation is often caused by unresolved promises.
diff --git a/cli/tests/testdata/bench/unresolved_promise.ts b/cli/tests/testdata/bench/unresolved_promise.ts
new file mode 100644
index 000000000..25fe70762
--- /dev/null
+++ b/cli/tests/testdata/bench/unresolved_promise.ts
@@ -0,0 +1 @@
+await new Promise((_resolve, _reject) => {});