From 04a259e2c8b3fdca8371f35e923bc239e8bb9ec0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 10 Aug 2023 01:40:34 +0200 Subject: [PATCH] fix(test): handle ASCII escape chars in test name (#20081) Handles ASCCI espace chars in test and bench name making test and bench reporting more reliable. This one is also tested in the fixture of "node:test" module. --- cli/js/40_testing.js | 21 +++++++++++++++++++- cli/tests/testdata/test/pass.out | 34 ++++++++++++++++++++++++++++++-- cli/tests/testdata/test/pass.ts | 23 +++++++++++++++++++++ 3 files changed, 75 insertions(+), 3 deletions(-) diff --git a/cli/js/40_testing.js b/cli/js/40_testing.js index c073b1c185124e..21417db2340c16 100644 --- a/cli/js/40_testing.js +++ b/cli/js/40_testing.js @@ -27,6 +27,7 @@ const { Promise, SafeArrayIterator, Set, + StringPrototypeReplaceAll, SymbolToStringTag, TypeError, } = primordials; @@ -516,6 +517,21 @@ function withPermissions(fn, permissions) { }; } +const ESCAPE_ASCII_CHARS = [ + ["\b", "\\b"], + ["\f", "\\f"], + ["\t", "\\t"], + ["\n", "\\n"], + ["\r", "\\r"], + ["\v", "\\v"], +]; + +function escapeName(name) { + for (const [escape, replaceWith] of ESCAPE_ASCII_CHARS) { + name = StringPrototypeReplaceAll(name, escape, replaceWith); + } + return name; +} /** * @typedef {{ * id: number, @@ -693,6 +709,7 @@ function test( } testDesc.location = location; testDesc.fn = wrapTest(testDesc); + testDesc.name = escapeName(testDesc.name); const { id, origin } = ops.op_register_test(testDesc); testDesc.id = id; @@ -818,6 +835,7 @@ function bench( benchDesc.async = AsyncFunction === benchDesc.fn.constructor; benchDesc.fn = wrapBenchmark(benchDesc); benchDesc.warmup = false; + benchDesc.name = escapeName(benchDesc.name); const { id, origin } = ops.op_register_bench(benchDesc); benchDesc.id = id; @@ -1190,7 +1208,8 @@ function createTestContext(desc) { stepDesc.level = level + 1; stepDesc.parent = desc; stepDesc.rootId = rootId; - stepDesc.rootName = rootName; + stepDesc.name = escapeName(stepDesc.name); + stepDesc.rootName = escapeName(rootName); stepDesc.fn = wrapTest(stepDesc); const { id, origin } = ops.op_register_test_step(stepDesc); stepDesc.id = id; diff --git a/cli/tests/testdata/test/pass.out b/cli/tests/testdata/test/pass.out index f9c4f1ba476a5a..08b9f5a52bda1a 100644 --- a/cli/tests/testdata/test/pass.out +++ b/cli/tests/testdata/test/pass.out @@ -1,5 +1,5 @@ Check [WILDCARD]/test/pass.ts -running 10 tests from ./test/pass.ts +running 16 tests from ./test/pass.ts test 0 ... ok ([WILDCARD]) test 1 ... ok ([WILDCARD]) test 2 ... ok ([WILDCARD]) @@ -18,6 +18,36 @@ test 9 ... console.error ----- output end ----- test 9 ... ok ([WILDCARD]) +test\b ... +------- output ------- +console.error +----- output end ----- +test\b ... ok ([WILDCARD]) +test\f ... +------- output ------- +console.error +----- output end ----- +test\f ... ok ([WILDCARD]) +test\t ... +------- output ------- +console.error +----- output end ----- +test\t ... ok ([WILDCARD]) +test\n ... +------- output ------- +console.error +----- output end ----- +test\n ... ok ([WILDCARD]) +test\r ... +------- output ------- +console.error +----- output end ----- +test\r ... ok ([WILDCARD]) +test\v ... +------- output ------- +console.error +----- output end ----- +test\v ... ok ([WILDCARD]) -ok | 10 passed | 0 failed ([WILDCARD]) +ok | 16 passed | 0 failed ([WILDCARD]) diff --git a/cli/tests/testdata/test/pass.ts b/cli/tests/testdata/test/pass.ts index f72123584e5e03..c4c0f45dcdb73a 100644 --- a/cli/tests/testdata/test/pass.ts +++ b/cli/tests/testdata/test/pass.ts @@ -12,3 +12,26 @@ Deno.test("test 8", () => { 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"); +});