diff options
Diffstat (limited to 'tools/wpt/runner.ts')
-rw-r--r-- | tools/wpt/runner.ts | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/tools/wpt/runner.ts b/tools/wpt/runner.ts index a3c22006a..1b40e25b8 100644 --- a/tools/wpt/runner.ts +++ b/tools/wpt/runner.ts @@ -76,12 +76,15 @@ export async function runSingleTest( reporter: (result: TestCaseResult) => void, inspectBrk: boolean, ): Promise<TestResult> { + const timeout = _options.timeout === "long" ? 60_000 : 20_000; + 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 +110,7 @@ export async function runSingleTest( "[]", ); + const start = performance.now(); const proc = new Deno.Command(denoBinary(), { args, env: { @@ -124,10 +128,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 (title && /^Untitled( \d+)?$/.test(result.name)) { + result.name = `${title}${result.name.slice(8)}`; + } cases.push(result); reporter(result); } else if (line.startsWith("#$#$#{")) { @@ -149,6 +162,7 @@ export async function runSingleTest( stderr, }; } finally { + clearInterval(interval); await Deno.remove(tempFile); } } |