diff --git a/cli/js/testing.ts b/cli/js/testing.ts index a6010ed53e24d..64ae6f0b3250f 100644 --- a/cli/js/testing.ts +++ b/cli/js/testing.ts @@ -9,9 +9,6 @@ import { metrics } from "./ops/runtime.ts"; import { resources } from "./ops/resources.ts"; import { assert } from "./util.ts"; -const RED_FAILED = red("FAILED"); -const GREEN_OK = green("ok"); -const YELLOW_IGNORED = yellow("ignored"); const disabledConsole = new Console((): void => {}); function delay(n: number): Promise { @@ -178,6 +175,9 @@ function log(msg: string, noNewLine = false): void { } function reportToConsole(message: TestMessage): void { + const redFailed = red("FAILED"); + const greenOk = green("ok"); + const yellowIgnored = yellow("ignored"); if (message.start != null) { log(`running ${message.start.tests.length} tests`); } else if (message.testStart != null) { @@ -188,13 +188,13 @@ function reportToConsole(message: TestMessage): void { } else if (message.testEnd != null) { switch (message.testEnd.status) { case "passed": - log(`${GREEN_OK} ${formatDuration(message.testEnd.duration)}`); + log(`${greenOk} ${formatDuration(message.testEnd.duration)}`); break; case "failed": - log(`${RED_FAILED} ${formatDuration(message.testEnd.duration)}`); + log(`${redFailed} ${formatDuration(message.testEnd.duration)}`); break; case "ignored": - log(`${YELLOW_IGNORED} ${formatDuration(message.testEnd.duration)}`); + log(`${yellowIgnored} ${formatDuration(message.testEnd.duration)}`); break; } } else if (message.end != null) { @@ -215,7 +215,7 @@ function reportToConsole(message: TestMessage): void { } } log( - `\ntest result: ${message.end.failed ? RED_FAILED : GREEN_OK}. ` + + `\ntest result: ${message.end.failed ? redFailed : greenOk}. ` + `${message.end.passed} passed; ${message.end.failed} failed; ` + `${message.end.ignored} ignored; ${message.end.measured} measured; ` + `${message.end.filtered} filtered out ` + @@ -223,7 +223,7 @@ function reportToConsole(message: TestMessage): void { ); if (message.end.usedOnly && message.end.failed == 0) { - log(`${RED_FAILED} because the "only" option was used\n`); + log(`${redFailed} because the "only" option was used\n`); } } } diff --git a/cli/tests/deno_test_no_color.ts b/cli/tests/deno_test_no_color.ts new file mode 100644 index 0000000000000..38c531ee9e2dd --- /dev/null +++ b/cli/tests/deno_test_no_color.ts @@ -0,0 +1,17 @@ +Deno.test({ + name: "success", + fn() {}, +}); + +Deno.test({ + name: "fail", + fn() { + throw new Error("fail"); + }, +}); + +Deno.test({ + name: "ignored", + ignore: true, + fn() {}, +}); diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs index cbd0dbc26a628..78a89eb2b8994 100644 --- a/cli/tests/integration_tests.rs +++ b/cli/tests/integration_tests.rs @@ -1119,6 +1119,22 @@ fn repl_test_assign_underscore_error() { assert_eq!(err, "Thrown: 2\n"); } +#[test] +fn deno_test_no_color() { + let (out, _) = util::run_and_collect_output( + false, + "test deno_test_no_color.ts", + None, + Some(vec![("NO_COLOR".to_owned(), "true".to_owned())]), + false, + ); + // ANSI escape codes should be stripped. + assert!(out.contains("test success ... ok")); + assert!(out.contains("test fail ... FAILED")); + assert!(out.contains("test ignored ... ignored")); + assert!(out.contains("test result: FAILED. 1 passed; 1 failed; 1 ignored; 0 measured; 0 filtered out")); +} + #[test] fn util_test() { util::run_python_script("tools/util_test.py")