1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-25 15:29:32 -05:00

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.
This commit is contained in:
Bartek Iwańczuk 2023-08-10 01:40:34 +02:00 committed by GitHub
parent 414274b68a
commit 04a259e2c8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 75 additions and 3 deletions

View file

@ -27,6 +27,7 @@ const {
Promise, Promise,
SafeArrayIterator, SafeArrayIterator,
Set, Set,
StringPrototypeReplaceAll,
SymbolToStringTag, SymbolToStringTag,
TypeError, TypeError,
} = primordials; } = 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 {{ * @typedef {{
* id: number, * id: number,
@ -693,6 +709,7 @@ function test(
} }
testDesc.location = location; testDesc.location = location;
testDesc.fn = wrapTest(testDesc); testDesc.fn = wrapTest(testDesc);
testDesc.name = escapeName(testDesc.name);
const { id, origin } = ops.op_register_test(testDesc); const { id, origin } = ops.op_register_test(testDesc);
testDesc.id = id; testDesc.id = id;
@ -818,6 +835,7 @@ function bench(
benchDesc.async = AsyncFunction === benchDesc.fn.constructor; benchDesc.async = AsyncFunction === benchDesc.fn.constructor;
benchDesc.fn = wrapBenchmark(benchDesc); benchDesc.fn = wrapBenchmark(benchDesc);
benchDesc.warmup = false; benchDesc.warmup = false;
benchDesc.name = escapeName(benchDesc.name);
const { id, origin } = ops.op_register_bench(benchDesc); const { id, origin } = ops.op_register_bench(benchDesc);
benchDesc.id = id; benchDesc.id = id;
@ -1190,7 +1208,8 @@ function createTestContext(desc) {
stepDesc.level = level + 1; stepDesc.level = level + 1;
stepDesc.parent = desc; stepDesc.parent = desc;
stepDesc.rootId = rootId; stepDesc.rootId = rootId;
stepDesc.rootName = rootName; stepDesc.name = escapeName(stepDesc.name);
stepDesc.rootName = escapeName(rootName);
stepDesc.fn = wrapTest(stepDesc); stepDesc.fn = wrapTest(stepDesc);
const { id, origin } = ops.op_register_test_step(stepDesc); const { id, origin } = ops.op_register_test_step(stepDesc);
stepDesc.id = id; stepDesc.id = id;

View file

@ -1,5 +1,5 @@
Check [WILDCARD]/test/pass.ts Check [WILDCARD]/test/pass.ts
running 10 tests from ./test/pass.ts running 16 tests from ./test/pass.ts
test 0 ... ok ([WILDCARD]) test 0 ... ok ([WILDCARD])
test 1 ... ok ([WILDCARD]) test 1 ... ok ([WILDCARD])
test 2 ... ok ([WILDCARD]) test 2 ... ok ([WILDCARD])
@ -18,6 +18,36 @@ test 9 ...
console.error console.error
----- output end ----- ----- output end -----
test 9 ... ok ([WILDCARD]) 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])

View file

@ -12,3 +12,26 @@ Deno.test("test 8", () => {
Deno.test("test 9", () => { Deno.test("test 9", () => {
console.error("console.error"); 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");
});