LibURL/Pattern: Implement 'compute protocol matches a special scheme'

This commit is contained in:
Shannon Booth 2025-03-18 20:25:06 +13:00 committed by Tim Flynn
parent 6b1fa3ecd0
commit e54504ad93
Notes: github-actions[bot] 2025-04-06 12:26:59 +00:00
2 changed files with 17 additions and 8 deletions

View file

@ -381,7 +381,16 @@ String ConstructorStringParser::make_a_component_string() const
// https://urlpattern.spec.whatwg.org/#compute-protocol-matches-a-special-scheme-flag
PatternErrorOr<void> ConstructorStringParser::compute_protocol_matches_a_special_scheme_flag()
{
// FIXME: Implement this.
// 1. Let protocol string be the result of running make a component string given parser.
auto protocol_string = make_a_component_string();
// 2. Let protocol component be the result of compiling a component given protocol string, canonicalize a protocol, and default options.
auto protocol_component = TRY(Component::compile(protocol_string.code_points(), canonicalize_a_protocol, Options::default_()));
// 3. If the result of running protocol component matches a special scheme given protocol component is true, then set parsers protocol matches a special scheme flag to true.
if (protocol_component_matches_a_special_scheme(protocol_component))
m_protocol_matches_a_special_scheme = true;
return {};
}

View file

@ -2,8 +2,8 @@ Harness status: OK
Found 350 tests
155 Pass
195 Fail
160 Pass
190 Fail
Pass Loading data...
Fail Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/ba"}]
@ -218,10 +218,10 @@ Fail Pattern: ["/foo?bar#baz","https://example.com:8080"] Inputs: [{"pathname":"
Pass Pattern: ["/foo"] Inputs: undefined
Pass Pattern: ["example.com/foo"] Inputs: undefined
Pass Pattern: ["http{s}?://{*.}?example.com/:product/:endpoint"] Inputs: ["https://sub.example.com/foo/bar"]
Fail Pattern: ["https://example.com?foo"] Inputs: ["https://example.com/?foo"]
Fail Pattern: ["https://example.com#foo"] Inputs: ["https://example.com/#foo"]
Fail Pattern: ["https://example.com:8080?foo"] Inputs: ["https://example.com:8080/?foo"]
Fail Pattern: ["https://example.com:8080#foo"] Inputs: ["https://example.com:8080/#foo"]
Pass Pattern: ["https://example.com?foo"] Inputs: ["https://example.com/?foo"]
Pass Pattern: ["https://example.com#foo"] Inputs: ["https://example.com/#foo"]
Pass Pattern: ["https://example.com:8080?foo"] Inputs: ["https://example.com:8080/?foo"]
Pass Pattern: ["https://example.com:8080#foo"] Inputs: ["https://example.com:8080/#foo"]
Pass Pattern: ["https://example.com/?foo"] Inputs: ["https://example.com/?foo"]
Pass Pattern: ["https://example.com/#foo"] Inputs: ["https://example.com/#foo"]
Fail Pattern: ["https://example.com/*?foo"] Inputs: ["https://example.com/?foo"]
@ -259,7 +259,7 @@ Pass Pattern: ["https://foo\\:bar@example.com"] Inputs: ["https://foo:bar@exampl
Pass Pattern: ["https://foo@example.com"] Inputs: ["https://foo@example.com"]
Pass Pattern: ["https://\\:bar@example.com"] Inputs: ["https://:bar@example.com"]
Pass Pattern: ["https://:user::pass@example.com"] Inputs: ["https://foo:bar@example.com"]
Fail Pattern: ["https\\:foo\\:bar@example.com"] Inputs: ["https:foo:bar@example.com"]
Pass Pattern: ["https\\:foo\\:bar@example.com"] Inputs: ["https:foo:bar@example.com"]
Fail Pattern: ["data\\:foo\\:bar@example.com"] Inputs: ["data:foo:bar@example.com"]
Pass Pattern: ["https://foo{\\:}bar@example.com"] Inputs: ["https://foo:bar@example.com"]
Pass Pattern: ["data{\\:}channel.html","https://example.com"] Inputs: ["https://example.com/data:channel.html"]