Skip to content

Commit

Permalink
tests: run wpt scripts with Deno.core.evalContext (#10852)
Browse files Browse the repository at this point in the history
This means wpts are now run in script context, and there are better
stack traces.
  • Loading branch information
lucacasonato committed Jun 6, 2021
1 parent f1deed4 commit a66f327
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 29 deletions.
15 changes: 12 additions & 3 deletions core/bindings.rs
Original file line number Diff line number Diff line change
@@ -1,6 1,7 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.

use crate::error::AnyError;
use crate::resolve_url_or_path;
use crate::JsRuntime;
use crate::Op;
use crate::OpId;
Expand Down Expand Up @@ -382,13 383,21 @@ fn eval_context(
let source = match v8::Local::<v8::String>::try_from(args.get(0)) {
Ok(s) => s,
Err(_) => {
throw_type_error(scope, "Invalid argument");
throw_type_error(scope, "Missing first argument");
return;
}
};

let url = v8::Local::<v8::String>::try_from(args.get(1))
.map(|n| Url::from_file_path(n.to_rust_string_lossy(scope)).unwrap());
let url = match v8::Local::<v8::String>::try_from(args.get(1)) {
Ok(s) => match resolve_url_or_path(&s.to_rust_string_lossy(scope)) {
Ok(s) => Some(s),
Err(err) => {
throw_type_error(scope, &format!("Invalid specifier: {}", err));
return;
}
},
Err(_) => None,
};

#[derive(Serialize)]
struct Output<'s>(Option<serde_v8::Value<'s>>, Option<ErrInfo<'s>>);
Expand Down
5 changes: 3 additions & 2 deletions tools/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 3,11 @@ import {
dirname,
fromFileUrl,
join,
toFileUrl,
} from "https://deno.land/[email protected]/path/mod.ts";
export { dirname, join };
export { dirname, fromFileUrl, join, toFileUrl };
export { existsSync } from "https://deno.land/[email protected]/fs/mod.ts";
export { readLines } from "https://deno.land/std@0.84.0/io/mod.ts";
export { readLines } from "https://deno.land/std@0.97.0/io/mod.ts";
export { delay } from "https://deno.land/[email protected]/async/delay.ts";

export const ROOT_PATH = dirname(dirname(fromFileUrl(import.meta.url)));
Expand Down
22 changes: 7 additions & 15 deletions tools/wpt/expectation.json
Original file line number Diff line number Diff line change
Expand Up @@ -634,7 634,7 @@
"jsapi": {
"constructor": {
"compile.any.html": true,
"instantiate-bad-imports.any.html": false,
"instantiate-bad-imports.any.html": true,
"instantiate.any.html": [
"Synchronous options handling: Buffer argument"
],
Expand All @@ -653,21 653,15 @@
"Table interface: operation set(unsigned long, optional any)"
],
"instance": {
"constructor-bad-imports.any.html": false,
"constructor-bad-imports.any.html": true,
"constructor-caching.any.html": true,
"constructor.any.html": true,
"exports.any.html": [
"Setting (sloppy mode)"
],
"exports.any.html": true,
"toString.any.html": true
},
"interface.any.html": [
"WebAssembly: property descriptor"
],
"interface.any.html": true,
"memory": {
"buffer.any.html": [
"Setting (sloppy mode)"
],
"buffer.any.html": true,
"constructor.any.html": true,
"grow.any.html": true,
"toString.any.html": true,
Expand All @@ -687,9 681,7 @@
"constructor.any.html": true,
"get-set.any.html": true,
"grow.any.html": true,
"length.any.html": [
"Setting (sloppy mode)"
],
"length.any.html": true,
"toString.any.html": true,
"constructor-reftypes.tentative.any.html": [
"initialize externref table with default value",
Expand Down Expand Up @@ -1217,4 1209,4 @@
"set.any.html": true
}
}
}
}
30 changes: 21 additions & 9 deletions tools/wpt/runner.ts
Original file line number Diff line number Diff line change
@@ -1,5 1,5 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
import { delay, join, readLines, ROOT_PATH } from "../util.js";
import { delay, join, readLines, ROOT_PATH, toFileUrl } from "../util.js";
import { assert, ManifestTestOptions, release, runPy } from "./utils.ts";
import { DOMParser } from "https://deno.land/x/[email protected]/deno-dom-wasm.ts";

Expand Down Expand Up @@ -140,20 140,32 @@ async function generateBundle(location: URL): Promise<string> {
assert(doc, "document should have been parsed");
const scripts = doc.getElementsByTagName("script");
const scriptContents = [];
let inlineScriptCount = 0;
for (const script of scripts) {
const src = script.getAttribute("src");
if (src === "/resources/testharnessreport.js") {
scriptContents.push(
await Deno.readTextFile(
join(ROOT_PATH, "./tools/wpt/testharnessreport.js"),
),
const url = toFileUrl(
join(ROOT_PATH, "./tools/wpt/testharnessreport.js"),
);
const contents = await Deno.readTextFile(url);
scriptContents.push([url.href, contents]);
} else if (src) {
const res = await fetch(new URL(src, location));
scriptContents.push(await res.text());
const url = new URL(src, location);
const res = await fetch(url);
if (res.ok) {
const contents = await res.text();
scriptContents.push([url.href, contents]);
}
} else {
scriptContents.push(script.textContent);
const url = new URL(`#${inlineScriptCount}`, location);
inlineScriptCount ;
scriptContents.push([url.href, script.textContent]);
}
}
return scriptContents.join("\n");

return scriptContents.map(([url, contents]) =>
`Deno.core.evalContext(${JSON.stringify(contents)}, ${
JSON.stringify(url)
});`
).join("\n");
}

0 comments on commit a66f327

Please sign in to comment.