summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtools/wpt.ts10
-rw-r--r--tools/wpt/utils.ts10
2 files changed, 16 insertions, 4 deletions
diff --git a/tools/wpt.ts b/tools/wpt.ts
index 46829c036..9d1e689ac 100755
--- a/tools/wpt.ts
+++ b/tools/wpt.ts
@@ -14,6 +14,7 @@ import {
autoConfig,
cargoBuild,
checkPy3Available,
+ escapeLoneSurrogates,
Expectation,
generateRunInfo,
getExpectation,
@@ -235,16 +236,17 @@ async function generateWptReport(
}
return {
- name: case_.name,
+ name: escapeLoneSurrogates(case_.name),
status: case_.passed ? "PASS" : "FAIL",
- message: case_.message,
+ message: escapeLoneSurrogates(case_.message),
expected,
known_intermittent: [],
};
}),
status,
- message: result.harnessStatus?.message ??
- (result.stderr.trim() || null),
+ message: escapeLoneSurrogates(
+ result.harnessStatus?.message ?? (result.stderr.trim() || null),
+ ),
duration: result.duration,
expected: status === "OK" ? undefined : "OK",
"known_intermittent": [],
diff --git a/tools/wpt/utils.ts b/tools/wpt/utils.ts
index 13c68ec90..1f76ff128 100644
--- a/tools/wpt/utils.ts
+++ b/tools/wpt/utils.ts
@@ -154,6 +154,16 @@ export async function cargoBuild() {
assert(status.success, "cargo build failed");
}
+export function escapeLoneSurrogates(input: string): string;
+export function escapeLoneSurrogates(input: string | null): string | null;
+export function escapeLoneSurrogates(input: string | null): string | null {
+ if (input === null) return null;
+ return input.replace(
+ /[\uD800-\uDFFF]/gu,
+ (match) => `U+${match.charCodeAt(0).toString(16)}`,
+ );
+}
+
/// WPTREPORT
export async function generateRunInfo(): Promise<unknown> {