Skip to content

WHATWG URLPattern Conformance Report

Generated by scripts/generate_compliance_report.py on 2026-05-13 04:26:17 UTC, running against web-platform-tests/wpt/urlpattern/ pinned at dd54691 with regex engine regex (set-operation support: yes). Suite names match the upstream WPT runner basenames.

Legend. pass · fail · xfail (known engine gap) · skip · error.

Summary

Suite Total Pass XFail Skip Fail Error
urlpattern.any.js 366 366 0 0 0 0
urlpattern-constructor.any.js 4 4 0 0 0 0
urlpattern-hasregexpgroups.any.js 55 55 0 0 0 0
urlpattern-compare.tentative.any.js 25 25 0 0 0 0
urlpattern-generate.tentative.any.js 19 19 0 0 0 0
All suites 469 469 0 0 0 0

urlpattern.any.js

Runner: urlpattern.any.js · Data: urlpatterntestdata.json

366 cases — 366 pass
# Case Status Detail
0 000-pathname='/foo/bar' pass
1 001-pathname='/foo/bar' pass
2 002-pathname='/foo/bar' pass
3 003-pathname='/foo/bar' pass
4 004-pathname='/foo/bar' pass
5 005-pathname='/foo/bar' pass
6 006-pathname='/foo/bar' pass
7 007-pathname='/foo/bar' pass
8 008-pathname='/foo/bar' pass
9 009-pathname='/foo/bar' pass
10 010-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
11 011-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
12 012-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
13 013-pathname='/foo/bar',baseURL='https://example.com' pass
14 014-pathname='/foo/bar',baseURL='https://example.com' pass
15 015-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
16 016-pathname='/foo/bar',baseURL='https://example.com' pass
17 017-pathname='/foo/bar',baseURL='https://example.com?otherquery#otherhash' pass
18 018-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
19 019-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
20 020-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
21 021-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
22 022-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
23 023-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
24 024-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
25 025-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
26 026-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
27 027-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
28 028-pathname='/foo/bar',baseURL='https://example.com?query#hash' pass
29 029-pathname='/foo/:bar' pass
30 030-pathname='/foo/([^\\/]+?)' pass
31 031-pathname='/foo/:bar' pass
32 032-pathname='/foo/:bar' pass
33 033-pathname='/foo/:bar' pass
34 034-pathname='/foo/(.*)' pass
35 035-pathname='/foo/*' pass
36 036-pathname='/foo/(.*)' pass
37 037-pathname='/foo/*' pass
38 038-pathname='/foo/(.*)' pass
39 039-pathname='/foo/*' pass
40 040-pathname='/foo/(.*)' pass
41 041-pathname='/foo/*' pass
42 042-pathname='/foo/:bar(.*)' pass
43 043-pathname='/foo/:bar(.*)' pass
44 044-pathname='/foo/:bar(.*)' pass
45 045-pathname='/foo/:bar(.*)' pass
46 046-pathname='/foo/:bar?' pass
47 047-pathname='/foo/:bar?' pass
48 048-pathname='/foo/:bar?' pass
49 049-pathname='/foo/:bar?' pass
50 050-pathname='/foo/:bar?' pass
51 051-pathname='/foo/:bar+' pass
52 052-pathname='/foo/:bar+' pass
53 053-pathname='/foo/:bar+' pass
54 054-pathname='/foo/:bar+' pass
55 055-pathname='/foo/:bar+' pass
56 056-pathname='/foo/:bar*' pass
57 057-pathname='/foo/:bar*' pass
58 058-pathname='/foo/:bar*' pass
59 059-pathname='/foo/:bar*' pass
60 060-pathname='/foo/:bar*' pass
61 061-pathname='/foo/(.*)?' pass
62 062-pathname='/foo/*?' pass
63 063-pathname='/foo/(.*)?' pass
64 064-pathname='/foo/*?' pass
65 065-pathname='/foo/(.*)?' pass
66 066-pathname='/foo/*?' pass
67 067-pathname='/foo/(.*)?' pass
68 068-pathname='/foo/*?' pass
69 069-pathname='/foo/(.*)?' pass
70 070-pathname='/foo/*?' pass
71 071-pathname='/foo/(.*)?' pass
72 072-pathname='/foo/*?' pass
73 073-pathname='/foo/(.*)+' pass
74 074-pathname='/foo/*+' pass
75 075-pathname='/foo/(.*)+' pass
76 076-pathname='/foo/*+' pass
77 077-pathname='/foo/(.*)+' pass
78 078-pathname='/foo/*+' pass
79 079-pathname='/foo/(.*)+' pass
80 080-pathname='/foo/*+' pass
81 081-pathname='/foo/(.*)+' pass
82 082-pathname='/foo/*+' pass
83 083-pathname='/foo/(.*)+' pass
84 084-pathname='/foo/*+' pass
85 085-pathname='/foo/(.*)*' pass
86 086-pathname='/foo/**' pass
87 087-pathname='/foo/(.*)*' pass
88 088-pathname='/foo/**' pass
89 089-pathname='/foo/(.*)*' pass
90 090-pathname='/foo/**' pass
91 091-pathname='/foo/(.*)*' pass
92 092-pathname='/foo/**' pass
93 093-pathname='/foo/(.*)*' pass
94 094-pathname='/foo/**' pass
95 095-pathname='/foo/(.*)*' pass
96 096-pathname='/foo/**' pass
97 097-pathname='/foo{/bar}' pass
98 098-pathname='/foo{/bar}' pass
99 099-pathname='/foo{/bar}' pass
100 100-pathname='/foo{/bar}' pass
101 101-pathname='/foo{/bar}?' pass
102 102-pathname='/foo{/bar}?' pass
103 103-pathname='/foo{/bar}?' pass
104 104-pathname='/foo{/bar}?' pass
105 105-pathname='/foo{/bar}+' pass
106 106-pathname='/foo{/bar}+' pass
107 107-pathname='/foo{/bar}+' pass
108 108-pathname='/foo{/bar}+' pass
109 109-pathname='/foo{/bar}+' pass
110 110-pathname='/foo{/bar}*' pass
111 111-pathname='/foo{/bar}*' pass
112 112-pathname='/foo{/bar}*' pass
113 113-pathname='/foo{/bar}*' pass
114 114-pathname='/foo{/bar}*' pass
115 115-protocol='(café)' pass
116 116-username='(café)' pass
117 117-password='(café)' pass
118 118-hostname='(café)' pass
119 119-pathname='(café)' pass
120 120-search='(café)' pass
121 121-hash='(café)' pass
122 122-protocol=':café' pass
123 123-username=':café' pass
124 124-password=':café' pass
125 125-hostname=':café' pass
126 126-pathname='/:café' pass
127 127-search=':café' pass
128 128-hash=':café' pass
129 129-protocol=':℘' pass
130 130-username=':℘' pass
131 131-password=':℘' pass
132 132-hostname=':℘' pass
133 133-pathname='/:℘' pass
134 134-search=':℘' pass
135 135-hash=':℘' pass
136 136-protocol=':㐀' pass
137 137-username=':㐀' pass
138 138-password=':㐀' pass
139 139-hostname=':㐀' pass
140 140-pathname='/:㐀' pass
141 141-search=':㐀' pass
142 142-hash=':㐀' pass
143 143-protocol='(.*)' pass
144 144-protocol='(.*)' pass
145 145-protocol='foo-bar' pass
146 146-username='caf%C3%A9' pass
147 147-username='café' pass
148 148-username='caf%c3%a9' pass
149 149-password='caf%C3%A9' pass
150 150-password='café' pass
151 151-password='caf%c3%a9' pass
152 152-hostname='xn--caf-dma.com' pass
153 153-hostname='café.com' pass
154 154-http://🚲.com/ pass
155 155-http://\ud83d\udeb2 pass
156 156-hostname='\ud83d\udeb2' pass
157 157-pathname='\ud83d\udeb2' pass
158 158-pathname=':\ud83d\udeb2' pass
159 159-pathname=':a󠄀b' pass
160 160-pathname='test/:a𐑐b' pass
161 161-pathname=':🚲' pass
162 162-port='' pass
163 163-protocol='http',port='80' pass
164 164-protocol='http',port='80{20}?' pass
165 165-protocol='http',port='80' pass
166 166-protocol='http',port='100000' pass
167 167-port='80' pass
168 168-protocol='http{s}?',port='80' pass
169 169-port='80' pass
170 170-port='80' pass
171 171-port='80' pass
172 172-port='80' pass
173 173-port='80' pass
174 174-port='(.*)' pass
175 175-pathname='/foo/bar' pass
176 176-pathname='/foo/baz' pass
177 177-pathname='/caf%C3%A9' pass
178 178-pathname='/café' pass
179 179-pathname='/caf%c3%a9' pass
180 180-pathname='/foo/bar' pass
181 181-pathname='/foo/bar' pass
182 182-pathname='/foo/../bar' pass
183 183-pathname='./foo/bar',baseURL='https://example.com' pass
184 184-pathname='',baseURL='https://example.com' pass
185 185-pathname='{/bar}',baseURL='https://example.com/foo/' pass
186 186-pathname='\\/bar',baseURL='https://example.com/foo/' pass
187 187-pathname='b',baseURL='https://example.com/foo/' pass
188 188-pathname='foo/bar' pass
189 189-pathname='foo/bar',baseURL='https://example.com' pass
190 190-pathname=':name.html',baseURL='https://example.com' pass
191 191-search='q=caf%C3%A9' pass
192 192-search='q=café' pass
193 193-search='q=caf%c3%a9' pass
194 194-hash='caf%C3%A9' pass
195 195-hash='café' pass
196 196-hash='caf%c3%a9' pass
197 197-protocol='about',pathname='(blank\|sourcedoc)' pass
198 198-protocol='data',pathname=':number([0-9]+)' pass
199 199-pathname='/(\\m)' pass
200 200-pathname='/foo!' pass
201 201-pathname='/foo\\:' pass
202 202-pathname='/foo\\{' pass
203 203-pathname='/foo\\(' pass
204 204-protocol='javascript',pathname='varx=1;' pass
205 205-pathname='varx=1;' pass
206 206-protocol='javascript',pathname='varx=1;' pass
207 207-protocol='(data\|javascript)',pathname='varx=1;' pass
208 208-protocol='(https\|javascript)',pathname='varx=1;' pass
209 209-pathname='varx=1;' pass
210 210-pathname='/foo/bar' pass
211 211-pathname='/foo/bar' pass
212 212-https://example.com:8080/foo?bar#baz pass
213 213-/foo?bar#baz pass
214 214-/foo pass
215 215-example.com/foo pass
216 216-http{s}?://{*.}?example.com/:product/:endpoint pass
217 217-https://example.com?foo pass
218 218-https://example.com#foo pass
219 219-https://example.com:8080?foo pass
220 220-https://example.com:8080#foo pass
221 221-https://example.com/?foo pass
222 222-https://example.com/#foo pass
223 223-https://example.com/*?foo pass
224 224-https://example.com/*\?foo pass
225 225-https://example.com/:name?foo pass
226 226-https://example.com/:name\?foo pass
227 227-https://example.com/(bar)?foo pass
228 228-https://example.com/(bar)\?foo pass
229 229-https://example.com/{bar}?foo pass
230 230-https://example.com/{bar}\?foo pass
231 231-https://example.com/ pass
232 232-data:foobar pass
233 233-data\:foobar pass
234 234-https://{sub.}?example.com/foo pass
235 235-https://{sub.}?example{.com/}foo pass
236 236-{https://}example.com/foo pass
237 237-https://(sub.)?example.com/foo pass
238 238-https://(sub.)?example(.com/)foo pass
239 239-(https://)example.com/foo pass
240 240-https://{sub{.}}example.com/foo pass
241 241-https://(sub(?:.))?example.com/foo pass
242 242-file:///foo/bar pass
243 243-data: pass
244 244-foo://bar pass
245 245-(café)://foo pass
246 246-https://example.com/foo?bar#baz pass
247 247-protocol='http{s}?:',search='?bar',hash='#baz' pass
248 248-?bar#baz pass
249 249-?bar pass
250 250-#baz pass
251 251-#baz pass
252 252-pathname='*' pass
253 253-pathname='*' pass
254 254-https://foo\:bar@example.com pass
255 255-https://foo@example.com pass
256 256-https://\:bar@example.com pass
257 257-https://:user::pass@example.com pass
258 258-https\:foo\:bar@example.com pass
259 259-data\:foo\:bar@example.com pass
260 260-https://foo{\:}bar@example.com pass
261 261-data{\:}channel.html pass
262 262-http://[\:\:1]/ pass
263 263-http://[\:\:1]:8080/ pass
264 264-http://[\:\:a]/ pass
265 265-http://[:address]/ pass
266 266-http://[\:\:AB\::num]/ pass
267 267-hostname='[\\:\\:AB\\::num]' pass
268 268-hostname='[\\:\\:xY\\::num]' pass
269 269-hostname='{[\\:\\:ab\\::num]}' pass
270 270-hostname='{[\\:\\:fé\\::num]}' pass
271 271-hostname='{[\\:\\::num\\:1]}' pass
272 272-hostname='{[\\:\\::num\\:fé]}' pass
273 273-hostname='[*\\:1]' pass
274 274-hostname='*\\:1]' pass
275 275-https://foo{{@}}example.com pass
276 276-https://foo{@example.com pass
277 277-data\:text/javascript,letx=100/:tens?5; pass
278 278-pathname='/:id/:id' pass
279 279-pathname='/foo',baseURL='' pass
280 280-/foo pass
281 281-pathname='/foo' pass
282 282-pathname=':name*' pass
283 283-pathname=':name+' pass
284 284-pathname=':name' pass
285 285-protocol=':name*' pass
286 286-protocol=':name+' pass
287 287-protocol=':name' pass
288 288-hostname='badhostname' pass
289 289-hostname='bad#hostname' pass
290 290-hostname='bad%hostname' pass
291 291-hostname='bad/hostname' pass
292 292-hostname='bad\\:hostname' pass
293 293-hostname='bad<hostname' pass
294 294-hostname='bad>hostname' pass
295 295-hostname='bad?hostname' pass
296 296-hostname='bad@hostname' pass
297 297-hostname='bad[hostname' pass
298 298-hostname='bad]hostname' pass
299 299-hostname='bad\\\\hostname' pass
300 300-hostname='bad^hostname' pass
301 301-hostname='bad\|hostname' pass
302 302-hostname='bad\nhostname' pass
303 303-hostname='bad\rhostname' pass
304 304-hostname='bad\thostname' pass
305 305- pass
306 306-<no-pattern> pass
307 307-<no-pattern> pass
308 308-<no-pattern> pass
309 309-pathname='(foo)(.*)' pass
310 310-pathname='{(foo)bar}(.*)' pass
311 311-pathname='(foo)?(.*)' pass
312 312-pathname='{:foo}(.*)' pass
313 313-pathname='{:foo}(barbaz)' pass
314 314-pathname='{:foo}{(.*)}' pass
315 315-pathname='{:foo}{(.*)bar}' pass
316 316-pathname='{:foo}{bar(.*)}' pass
317 317-pathname='{:foo}:bar(.*)' pass
318 318-pathname='{:foo}?(.*)' pass
319 319-pathname='{:foo\\bar}' pass
320 320-pathname='{:foo\\.bar}' pass
321 321-pathname='{:foo(foo)bar}' pass
322 322-pathname='{:foo}bar' pass
323 323-pathname=':foo\\bar' pass
324 324-pathname=':foo{}(.*)' pass
325 325-pathname=':foo{}bar' pass
326 326-pathname=':foo{}?bar' pass
327 327-pathname='*{}**?' pass
328 328-pathname=':foo(baz)(.*)' pass
329 329-pathname=':foo(baz)bar' pass
330 330-pathname='*/*' pass
331 331-pathname='*\\/*' pass
332 332-pathname='*/{*}' pass
333 333-pathname='*//*' pass
334 334-pathname='/:foo.' pass
335 335-pathname='/:foo..' pass
336 336-pathname='./foo' pass
337 337-pathname='../foo' pass
338 338-pathname=':foo./' pass
339 339-pathname=':foo../' pass
340 340-pathname='/:foo\\bar' pass
341 341-pathname='/foo/bar' pass
342 342-ignoreCase=True pass
343 343-https://example.com:8080/foo?bar#baz pass
344 344-/foo?bar#baz pass
345 345-/foo?bar#baz pass
346 346-search='foo',baseURL='https://example.com/a/+/b' pass
347 347-hash='foo',baseURL='https://example.com/?q=*&v=?&hmm={}&umm=()' pass
348 348-#foo pass
349 349-pathname='/([[a-z]--a])' pass
350 350-pathname='/([[a-z]--a])' pass
351 351-pathname='/([\\d&&[0-1]])' pass
352 352-pathname='/([\\d&&[0-1]])' pass
353 353-protocol='http',hostname='example.com/ignoredpath' pass
354 354-protocol='http',hostname='example.com\\?ignoredsearch' pass
355 355-protocol='http',hostname='example.com#ignoredhash' pass
356 356-https://www.example.com/* pass
357 357-https://www.example.com/* pass
358 358-https://www.example.com/* pass
359 359-https://www.example.com/* pass
360 360-https://www.example.com/* pass
361 361-hostname=':domain(.*)' pass
362 362-((?R)): pass
363 363-(\H): pass
364 364-pathname='/:foo((?<x>a))' pass
365 365-pathname='/foo/(bar(?<x>baz))' pass

urlpattern-constructor.any.js

Runner: urlpattern-constructor.any.js

4 cases — 4 pass
# Case Status Detail
0 unclosed_token_paren pass
1 unclosed_token_double_paren pass
2 unclosed_escape pass
3 constructor_with_undefined pass

urlpattern-hasregexpgroups.any.js

Runner: urlpattern-hasregexpgroups.any.js · Data: urlpattern-hasregexpgroups-tests.js

55 cases — 55 pass
# Case Status Detail
0 empty-init-has-no-regex-groups pass
1 wildcard-protocol pass
2 segment-protocol pass
3 optional-segment-protocol pass
4 named-regex-protocol pass
5 anon-regex-protocol pass
6 wildcard-username pass
7 segment-username pass
8 optional-segment-username pass
9 named-regex-username pass
10 anon-regex-username pass
11 wildcard-password pass
12 segment-password pass
13 optional-segment-password pass
14 named-regex-password pass
15 anon-regex-password pass
16 wildcard-hostname pass
17 segment-hostname pass
18 optional-segment-hostname pass
19 named-regex-hostname pass
20 anon-regex-hostname pass
21 wildcard-port pass
22 segment-port pass
23 optional-segment-port pass
24 named-regex-port pass
25 anon-regex-port pass
26 wildcard-pathname pass
27 segment-pathname pass
28 optional-segment-pathname pass
29 named-regex-pathname pass
30 anon-regex-pathname pass
31 wildcard-search pass
32 segment-search pass
33 optional-segment-search pass
34 named-regex-search pass
35 anon-regex-search pass
36 wildcard-hash pass
37 segment-hash pass
38 optional-segment-hash pass
39 named-regex-hash pass
40 anon-regex-hash pass
41 mixed-wildcard-username pass
42 mixed-regex-username pass
43 mixed-wildcard-password pass
44 mixed-regex-password pass
45 mixed-wildcard-hostname pass
46 mixed-regex-hostname pass
47 mixed-wildcard-pathname pass
48 mixed-regex-pathname pass
49 mixed-wildcard-search pass
50 mixed-regex-search pass
51 mixed-wildcard-hash pass
52 mixed-regex-hash pass
53 complex-pathname-no-regex pass
54 complex-pathname-with-regex pass

urlpattern-compare.tentative.any.js

Runner: urlpattern-compare.tentative.any.js · Data: urlpattern-compare-test-data.json

25 cases — 25 pass
# Case Status Detail
0 000-pathname pass
1 001-pathname pass
2 002-pathname pass
3 003-pathname pass
4 004-pathname pass
5 005-pathname pass
6 006-pathname pass
7 007-pathname pass
8 008-pathname pass
9 009-pathname pass
10 010-pathname pass
11 011-pathname pass
12 012-port pass
13 013-pathname pass
14 014-pathname pass
15 015-pathname pass
16 016-pathname pass
17 017-pathname pass
18 018-pathname pass
19 019-protocol pass
20 020-username pass
21 021-password pass
22 022-hostname pass
23 023-search pass
24 024-hash pass

urlpattern-generate.tentative.any.js

Runner: urlpattern-generate.tentative.any.js · Data: urlpattern-generate-test-data.json

19 cases — 19 pass
# Case Status Detail
0 000-invalid pass
1 001-pathname pass
2 002-pathname pass
3 003-pathname pass
4 004-hostname pass
5 005-pathname pass
6 006-pathname pass
7 007-pathname pass
8 008-pathname pass
9 009-pathname pass
10 010-pathname pass
11 011-pathname pass
12 012-pathname pass
13 013-pathname pass
14 014-pathname pass
15 015-pathname pass
16 016-pathname pass
17 017-pathname pass
18 018-port pass