diff options
Diffstat (limited to 'tools/wpt/runner.ts')
-rw-r--r-- | tools/wpt/runner.ts | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/tools/wpt/runner.ts b/tools/wpt/runner.ts index a3c22006a..7e15216be 100644 --- a/tools/wpt/runner.ts +++ b/tools/wpt/runner.ts @@ -75,13 +75,23 @@ export async function runSingleTest( _options: ManifestTestOptions, reporter: (result: TestCaseResult) => void, inspectBrk: boolean, + timeouts: { long: number; default: number }, ): Promise<TestResult> { + const timeout = _options.timeout === "long" + ? timeouts.long + : timeouts.default; + const filename = url.pathname.substring( + url.pathname.lastIndexOf("/") + 1, + url.pathname.indexOf("."), + ); + const { title } = Object.fromEntries(_options.script_metadata || []); const bundle = await generateBundle(url); const tempFile = await Deno.makeTempFile({ prefix: "wpt-bundle-", suffix: ".js", }); + let interval; try { await Deno.writeTextFile(tempFile, bundle); @@ -107,6 +117,7 @@ export async function runSingleTest( "[]", ); + const start = performance.now(); const proc = new Deno.Command(denoBinary(), { args, env: { @@ -124,10 +135,19 @@ export async function runSingleTest( const lines = proc.stderr.pipeThrough(new TextDecoderStream()).pipeThrough( new TextLineStream(), ); + interval = setInterval(() => { + const passedTime = performance.now() - start; + if (passedTime > timeout) { + proc.kill("SIGINT"); + } + }, 1000); for await (const line of lines) { if (line.startsWith("{")) { const data = JSON.parse(line); const result = { ...data, passed: data.status == 0 }; + if (/^Untitled( \d+)?$/.test(result.name)) { + result.name = `${title || filename}${result.name.slice(8)}`; + } cases.push(result); reporter(result); } else if (line.startsWith("#$#$#{")) { @@ -149,6 +169,7 @@ export async function runSingleTest( stderr, }; } finally { + clearInterval(interval); await Deno.remove(tempFile); } } |