update URL-involving tests

This commit is contained in:
Halil Durak
2026-06-11 19:11:14 +03:00
committed by nikneym
parent be6f1c9155
commit 3512f1fb1a
3 changed files with 45 additions and 30 deletions

View File

@@ -860,6 +860,7 @@ test "URL: resolve" {
base: [:0]const u8,
path: [:0]const u8,
expected: [:0]const u8,
expected_error: bool = false,
};
const cases = [_]Case{
@@ -1013,30 +1014,37 @@ test "URL: resolve" {
.path = "./.././.././hello",
.expected = "https://example/hello",
},
// A base must itself be a valid absolute URL; schemeless bases are
// rejected, matching `new URL(path, base)`.
.{
.base = "some/page",
.path = "hello",
.expected = "some/hello",
.expected = "",
.expected_error = true,
},
.{
.base = "some/page/",
.path = "hello",
.expected = "some/page/hello",
.expected = "",
.expected_error = true,
},
.{
.base = "some/page/other",
.path = ".././hello",
.expected = "some/hello",
.expected = "",
.expected_error = true,
},
.{
.base = "https://www.example.com/hello/world",
.path = "//example/about",
.expected = "https://example/about",
},
// "http:" alone is not a valid base (special scheme without a host).
.{
.base = "http:",
.path = "//example.com/over/9000",
.expected = "http://example.com/over/9000",
.expected = "",
.expected_error = true,
},
.{
.base = "https://example.com/",
@@ -1081,8 +1089,13 @@ test "URL: resolve" {
};
for (cases) |case| {
const result = try resolve(testing.arena_allocator, case.base, case.path, .{});
try testing.expectString(case.expected, result);
if (case.expected_error) {
const result = resolve(testing.arena_allocator, case.base, case.path, .{});
try testing.expectError(error.TypeError, result);
} else {
const result = try resolve(testing.arena_allocator, case.base, case.path, .{});
try testing.expectString(case.expected, result);
}
}
}
@@ -1122,15 +1135,13 @@ test "URL: resolve strips tab and newline from input" {
test "URL: resolve validates ASCII punycode (xn--) labels" {
defer testing.reset();
// Valid punycode is left untouched (the needsAscii fast path would skip it,
// so this exercises the xn-- gate going through toAscii and back).
const ok = try resolve(testing.arena_allocator, "", "https://xn--rksmrgs-5wao1o.se/x", .{});
// Valid punycode is left untouched.
const ok = try resolve(testing.arena_allocator, "https://example.com/", "https://xn--rksmrgs-5wao1o.se/x", .{});
try testing.expectString("https://xn--rksmrgs-5wao1o.se/x", ok);
// Malformed punycode must be rejected rather than passed through verbatim.
// (URL.init remaps this error.Idna to TypeError for `new URL`.)
try testing.expectError(error.Idna, resolve(testing.arena_allocator, "", "https://xn--0.pt/x", .{}));
try testing.expectError(error.Idna, resolve(testing.arena_allocator, "", "https://xn--a.pt/x", .{}));
try testing.expectError(error.TypeError, resolve(testing.arena_allocator, "https://example.com/", "https://xn--0.pt/x", .{}));
try testing.expectError(error.TypeError, resolve(testing.arena_allocator, "https://example.com/", "https://xn--a.pt/x", .{}));
}
test "URL: hasAceLabel" {
@@ -1333,11 +1344,11 @@ test "URL: resolve with encoding" {
.path = "path with multiple spaces",
.expected = "https://example.com/path%20with%20%20multiple%20%20%20spaces",
},
// Special characters that need encoding
// Brackets are not in the WHATWG path percent-encode set
.{
.base = "https://example.com/",
.path = "file[1].html",
.expected = "https://example.com/file%5B1%5D.html",
.expected = "https://example.com/file[1].html",
},
.{
.base = "https://example.com/",
@@ -1354,20 +1365,24 @@ test "URL: resolve with encoding" {
.path = "file\"quote\".html",
.expected = "https://example.com/file%22quote%22.html",
},
// Pipe is not in the WHATWG path percent-encode set
.{
.base = "https://example.com/",
.path = "file|pipe.html",
.expected = "https://example.com/file%7Cpipe.html",
.expected = "https://example.com/file|pipe.html",
},
// Backslash is a path separator in special URLs
.{
.base = "https://example.com/",
.path = "file\\backslash.html",
.expected = "https://example.com/file%5Cbackslash.html",
.expected = "https://example.com/file/backslash.html",
},
// Note: the current URL spec percent-encodes '^' in paths, but
// rust-url does not (yet); harmless divergence locked in here.
.{
.base = "https://example.com/",
.path = "file^caret.html",
.expected = "https://example.com/file%5Ecaret.html",
.expected = "https://example.com/file^caret.html",
},
.{
.base = "https://example.com/",
@@ -1822,31 +1837,31 @@ test "URL: resolve path scheme" {
.{
.base = "https://www.example.com/example",
.path = "https://about",
.expected = "https://about",
.expected = "https://about/",
},
//different schemes and path as absolute (without slash)
.{
.base = "https://www.example.com/example",
.path = "http:about",
.expected = "http://about",
.expected = "http://about/",
},
//different schemes and path as absolute (with one slash)
.{
.base = "https://www.example.com/example",
.path = "http:/about",
.expected = "http://about",
.expected = "http://about/",
},
//different schemes and path as absolute (with two slashes)
.{
.base = "https://www.example.com/example",
.path = "http://about",
.expected = "http://about",
.expected = "http://about/",
},
//same schemes and path as absolute (with more slashes)
.{
.base = "https://site/",
.path = "https://path",
.expected = "https://path",
.expected = "https://path/",
},
//path scheme is not special and path as absolute (without additional slashes)
.{
@@ -1858,19 +1873,19 @@ test "URL: resolve path scheme" {
.{
.base = "https://www.example.com/example",
.path = "ws://about",
.expected = "ws://about",
.expected = "ws://about/",
},
//different schemes and path as absolute (path scheme=wss)
.{
.base = "https://www.example.com/example",
.path = "wss://about",
.expected = "wss://about",
.expected = "wss://about/",
},
//different schemes and path as absolute (path scheme=ftp)
.{
.base = "https://www.example.com/example",
.path = "ftp://about",
.expected = "ftp://about",
.expected = "ftp://about/",
},
//different schemes and path as absolute (path scheme=file)
.{

View File

@@ -709,7 +709,7 @@ test "browser.markdown: block link" {
\\### Title
\\
\\Description
\\[https://example.com](https://example.com)
\\[https://example.com/](https://example.com/)
\\
);
}
@@ -725,7 +725,7 @@ test "browser.markdown: block link with aria-label" {
\\### Title
\\
\\Description
\\[Docs](https://example.com)
\\[Docs](https://example.com/)
\\
);
}
@@ -741,7 +741,7 @@ test "browser.markdown: block link with title" {
\\### Title
\\
\\Description
\\[Docs](https://example.com)
\\[Docs](https://example.com/)
\\
);
}
@@ -751,7 +751,7 @@ test "browser.markdown: inline link" {
\\<p>Visit <a href="https://example.com">Example</a>.</p>
,
\\
\\Visit [Example](https://example.com).
\\Visit [Example](https://example.com/).
\\
);
}

View File

@@ -125,7 +125,7 @@
headers: { "Sender": "me", "Target": "you" }
}
);
testing.expectEqual("https://google.com", request2.url);
testing.expectEqual("https://google.com/", request2.url);
testing.expectEqual("POST", request2.method);
testing.expectEqual("omit", request2.credentials);
testing.expectEqual("reload", request2.cache);