From e027da92892a045f539930404a5d74358475e420 Mon Sep 17 00:00:00 2001 From: "Node.js GitHub Bot" Date: Sun, 1 Jun 2025 00:23:58 +0000 Subject: [PATCH] test: update WPT for urlpattern to 3ffda23e5a PR-URL: https://github.com/nodejs/node/pull/58537 Reviewed-By: James M Snell Reviewed-By: Filip Skokan Reviewed-By: Ethan Arrowood --- test/fixtures/wpt/README.md | 2 +- .../urlpattern-generate-test-data.json | 116 ++++++++++++++++++ .../urlpattern-generate.tentative.any.js | 26 ++++ test/fixtures/wpt/versions.json | 2 +- test/wpt/status/urlpattern.json | 3 + 5 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/wpt/urlpattern/resources/urlpattern-generate-test-data.json create mode 100644 test/fixtures/wpt/urlpattern/urlpattern-generate.tentative.any.js diff --git a/test/fixtures/wpt/README.md b/test/fixtures/wpt/README.md index 43a7be5b1d2..232f78fb00c 100644 --- a/test/fixtures/wpt/README.md +++ b/test/fixtures/wpt/README.md @@ -29,7 +29,7 @@ Last update: - resources: https://github.com/web-platform-tests/wpt/tree/1e140d63ec/resources - streams: https://github.com/web-platform-tests/wpt/tree/bc9dcbbf1a/streams - url: https://github.com/web-platform-tests/wpt/tree/9504a83e01/url -- urlpattern: https://github.com/web-platform-tests/wpt/tree/f07d05f49c/urlpattern +- urlpattern: https://github.com/web-platform-tests/wpt/tree/3ffda23e5a/urlpattern - user-timing: https://github.com/web-platform-tests/wpt/tree/5ae85bf826/user-timing - wasm/jsapi: https://github.com/web-platform-tests/wpt/tree/cde25e7e3c/wasm/jsapi - wasm/webapi: https://github.com/web-platform-tests/wpt/tree/fd1b23eeaa/wasm/webapi diff --git a/test/fixtures/wpt/urlpattern/resources/urlpattern-generate-test-data.json b/test/fixtures/wpt/urlpattern/resources/urlpattern-generate-test-data.json new file mode 100644 index 00000000000..c118f0a73b5 --- /dev/null +++ b/test/fixtures/wpt/urlpattern/resources/urlpattern-generate-test-data.json @@ -0,0 +1,116 @@ +[ + { + "pattern": { "pathname": "/foo" }, + "component": "invalid", + "groups": {}, + "expected": null + }, + { + "pattern": { "pathname": "/foo" }, + "component": "pathname", + "groups": {}, + "expected": "/foo" + }, + { + "pattern": { "pathname": "/:foo" }, + "component": "pathname", + "groups": { "foo": "bar" }, + "expected": "/bar" + }, + { + "pattern": { "pathname": "/:foo" }, + "component": "pathname", + "groups": { "foo": "🍅" }, + "expected": "/%F0%9F%8D%85" + }, + { + "pattern": { "hostname": "{:foo}.example.com" }, + "component": "hostname", + "groups": { "foo": "🍅" }, + "expected": "xn--fi8h.example.com" + }, + { + "pattern": { "pathname": "/:foo" }, + "component": "pathname", + "groups": {}, + "expected": null + }, + { + "pattern": { "pathname": "/foo/:bar" }, + "component": "pathname", + "groups": { "bar": "baz" }, + "expected": "/foo/baz" + }, + { + "pattern": { "pathname": "/foo:bar" }, + "component": "pathname", + "groups": { "bar": "baz" }, + "expected": "/foobaz" + }, + { + "pattern": { "pathname": "/:foo/:bar" }, + "component": "pathname", + "groups": { "foo": "baz", "bar": "qux" }, + "expected": "/baz/qux" + }, + { + "pattern": "https://example.com/:foo", + "component": "pathname", + "groups": { "foo": " " }, + "expected": "/%20" + }, + { + "pattern": "original-scheme://example.com/:foo", + "component": "pathname", + "groups": { "foo": " " }, + "expected": "/ " + }, + { + "pattern": { "pathname": "/:foo" }, + "component": "pathname", + "groups": { "foo": "bar/baz" }, + "expected": null + }, + { + "pattern": { "pathname": "*" }, + "component": "pathname", + "groups": {}, + "expected": null + }, + { + "pattern": { "pathname": "/{foo}+" }, + "component": "pathname", + "groups": {}, + "expected": null + }, + { + "pattern": { "pathname": "/{foo}?" }, + "component": "pathname", + "groups": {}, + "expected": null + }, + { + "pattern": { "pathname": "/{foo}*" }, + "component": "pathname", + "groups": {}, + "expected": null + }, + { + "pattern": { "pathname": "/(regexp)" }, + "component": "pathname", + "groups": {}, + "expected": null + }, + { + "pattern": { "pathname": "/([^\\/]+?)" }, + "component": "pathname", + "groups": {}, + "expected": null + }, + { + "pattern": { "port": "([^\\:]+?)" }, + "component": "port", + "groups": {}, + "expected": null + } +] diff --git a/test/fixtures/wpt/urlpattern/urlpattern-generate.tentative.any.js b/test/fixtures/wpt/urlpattern/urlpattern-generate.tentative.any.js new file mode 100644 index 00000000000..1f6962942d8 --- /dev/null +++ b/test/fixtures/wpt/urlpattern/urlpattern-generate.tentative.any.js @@ -0,0 +1,26 @@ +// META: global=window,worker + +function runTests(data) { + for (let entry of data) { + test(function () { + const pattern = new URLPattern(entry.pattern); + + if (entry.expected === null) { + assert_throws_js(TypeError, _ => pattern.generate(entry.component, entry.groups), + 'generate() should fail with TypeError'); + return; + } + + const result = pattern.generate(entry.component, entry.groups); + assert_equals(result, entry.expected); + }, `Pattern: ${JSON.stringify(entry.pattern)} ` + + `Component: ${entry.component} ` + + `Groups: ${JSON.stringify(entry.groups)}`); + } +} + +promise_test(async function () { + const response = await fetch('resources/urlpattern-generate-test-data.json'); + const data = await response.json(); + runTests(data); +}, 'Loading data...'); diff --git a/test/fixtures/wpt/versions.json b/test/fixtures/wpt/versions.json index d20428fe789..79031f7caa4 100644 --- a/test/fixtures/wpt/versions.json +++ b/test/fixtures/wpt/versions.json @@ -76,7 +76,7 @@ "path": "url" }, "urlpattern": { - "commit": "f07d05f49c679a62dd112e18aa07405859745952", + "commit": "3ffda23e5af7c59590b17c2710a22efd22dd4973", "path": "urlpattern" }, "user-timing": { diff --git a/test/wpt/status/urlpattern.json b/test/wpt/status/urlpattern.json index 4854a84f19f..c3ee2b3e3f1 100644 --- a/test/wpt/status/urlpattern.json +++ b/test/wpt/status/urlpattern.json @@ -1,4 +1,7 @@ { + "urlpattern-generate.tentative.any.js": { + "skip": "generate function is not yet included in the URLPattern spec" + }, "resources/urlpattern-compare-tests.tentative.js": { "skip": "compareComponent function is not yet included in the URLPattern spec" },