Skip to content

Commit c8d528e

Browse files
panvatargos
authored andcommitted
test: update WPT resources, common, streams, FileAPI, broadcastchannel
PR-URL: #46912 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
1 parent adff278 commit c8d528e

File tree

108 files changed

+2076
-5276
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

108 files changed

+2076
-5276
lines changed

test/common/wpt.js

+11-15
Original file line numberDiff line numberDiff line change
@@ -453,14 +453,13 @@ class WPTRunner {
453453
this.scriptsModifier = modifier;
454454
}
455455

456-
fullInitScript(hasSubsetScript, locationSearchString) {
456+
fullInitScript(url, metaTitle) {
457457
let { initScript } = this;
458-
if (hasSubsetScript || locationSearchString) {
459-
initScript = `${initScript}\n\n//===\nglobalThis.location ||= {};`;
460-
}
461458

462-
if (locationSearchString) {
463-
initScript = `${initScript}\n\n//===\nglobalThis.location.search = "${locationSearchString}";`;
459+
initScript = `${initScript}\n\n//===\nglobalThis.location = new URL("${url.href}");`;
460+
461+
if (metaTitle) {
462+
initScript = `${initScript}\n\n//===\nglobalThis.META_TITLE = "${metaTitle}";`;
464463
}
465464

466465
if (this.globalThisInitScripts.length === null) {
@@ -553,13 +552,13 @@ class WPTRunner {
553552
const relativePath = spec.getRelativePath();
554553
const harnessPath = fixtures.path('wpt', 'resources', 'testharness.js');
555554
const scriptsToRun = [];
556-
let hasSubsetScript = false;
555+
let needsGc = false;
557556

558557
// Scripts specified with the `// META: script=` header
559558
if (meta.script) {
560559
for (const script of meta.script) {
561-
if (script === '/common/subset-tests.js' || script === '/common/subset-tests-by-key.js') {
562-
hasSubsetScript = true;
560+
if (script === '/common/gc.js') {
561+
needsGc = true;
563562
}
564563
const obj = {
565564
filename: this.resource.toRealFilePath(relativePath, script),
@@ -592,12 +591,13 @@ class WPTRunner {
592591
testRelativePath: relativePath,
593592
wptRunner: __filename,
594593
wptPath: this.path,
595-
initScript: this.fullInitScript(hasSubsetScript, variant),
594+
initScript: this.fullInitScript(new URL(`/${relativePath.replace(/\.js$/, '.html')}${variant}`, 'http://wpt'), meta.title),
596595
harness: {
597596
code: fs.readFileSync(harnessPath, 'utf8'),
598597
filename: harnessPath,
599598
},
600599
scriptsToRun,
600+
needsGc,
601601
},
602602
});
603603
this.workers.set(testFileName, worker);
@@ -749,11 +749,7 @@ class WPTRunner {
749749
*/
750750
resultCallback(filename, test, reportResult) {
751751
const status = this.getTestStatus(test.status);
752-
const title = this.getTestTitle(filename);
753-
if (/^Untitled( \d+)?$/.test(test.name)) {
754-
test.name = `${title}${test.name.slice(8)}`;
755-
}
756-
console.log(`---- ${title} ----`);
752+
console.log(`---- ${test.name} ----`);
757753
if (status !== kPass) {
758754
this.fail(filename, test, status, reportResult);
759755
} else {

test/common/wpt/worker.js

+12-5
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,29 @@
11
'use strict';
22

3-
const { runInThisContext } = require('vm');
3+
const { runInNewContext, runInThisContext } = require('vm');
4+
const { setFlagsFromString } = require('v8');
45
const { parentPort, workerData } = require('worker_threads');
56

67
const { ResourceLoader } = require(workerData.wptRunner);
78
const resource = new ResourceLoader(workerData.wptPath);
89

9-
global.self = global;
10-
global.GLOBAL = {
10+
if (workerData.needsGc) {
11+
// See https://github.com/nodejs/node/issues/16595#issuecomment-340288680
12+
setFlagsFromString('--expose-gc');
13+
globalThis.gc = runInNewContext('gc');
14+
}
15+
16+
globalThis.self = global;
17+
globalThis.GLOBAL = {
1118
isWindow() { return false; },
1219
isShadowRealm() { return false; },
1320
};
14-
global.require = require;
21+
globalThis.require = require;
1522

1623
// This is a mock, because at the moment fetch is not implemented
1724
// in Node.js, but some tests and harness depend on this to pull
1825
// resources.
19-
global.fetch = function fetch(file) {
26+
globalThis.fetch = function fetch(file) {
2027
return resource.read(workerData.testRelativePath, file, true);
2128
};
2229

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<!DOCTYPE html>
2+
<meta charset="utf-8">
3+
<title>Blob methods from detached frame work as expected</title>
4+
<script src="/resources/testharness.js"></script>
5+
<script src="/resources/testharnessreport.js"></script>
6+
7+
<iframe id="emptyDocumentIframe" src="../support/empty-document.html"></iframe>
8+
9+
<script>
10+
const BlobPrototypeFromDetachedFramePromise = new Promise(resolve => {
11+
emptyDocumentIframe.onload = () => {
12+
const BlobPrototype = emptyDocumentIframe.contentWindow.Blob.prototype;
13+
emptyDocumentIframe.remove();
14+
resolve(BlobPrototype);
15+
};
16+
});
17+
18+
const charCodeArrayToString = charCodeArray => Array.from(charCodeArray, c => String.fromCharCode(c)).join("");
19+
const charCodeBufferToString = charCodeBuffer => charCodeArrayToString(new Uint8Array(charCodeBuffer));
20+
21+
promise_test(async () => {
22+
const { slice } = await BlobPrototypeFromDetachedFramePromise;
23+
const blob = new Blob(["foobar"]);
24+
25+
const slicedBlob = slice.call(blob, 1, 3);
26+
assert_true(slicedBlob instanceof Blob);
27+
28+
assert_equals(await slicedBlob.text(), "oo");
29+
assert_equals(charCodeBufferToString(await slicedBlob.arrayBuffer()), "oo");
30+
31+
const reader = slicedBlob.stream().getReader();
32+
const { value } = await reader.read();
33+
assert_equals(charCodeArrayToString(value), "oo");
34+
}, "slice()");
35+
36+
promise_test(async () => {
37+
const { text } = await BlobPrototypeFromDetachedFramePromise;
38+
const blob = new Blob(["foo"]);
39+
40+
assert_equals(await text.call(blob), "foo");
41+
}, "text()");
42+
43+
promise_test(async () => {
44+
const { arrayBuffer } = await BlobPrototypeFromDetachedFramePromise;
45+
const blob = new Blob(["bar"]);
46+
47+
const charCodeBuffer = await arrayBuffer.call(blob);
48+
assert_equals(charCodeBufferToString(charCodeBuffer), "bar");
49+
}, "arrayBuffer()");
50+
51+
promise_test(async () => {
52+
const { stream } = await BlobPrototypeFromDetachedFramePromise;
53+
const blob = new Blob(["baz"]);
54+
55+
const reader = stream.call(blob).getReader();
56+
const { value } = await reader.read();
57+
assert_equals(charCodeArrayToString(value), "baz");
58+
}, "stream()");
59+
</script>

0 commit comments

Comments
 (0)