4 Commits

Author SHA1 Message Date
Halil Durak
8d4cf400ce bring back invalidUrl test with error expectation 2025-10-22 15:03:06 +03:00
Halil Durak
c6a0368c61 add a searchParamsSetHref test according to href setter change 2025-10-22 15:02:48 +03:00
Halil Durak
033eb82ae5 reinitialize search_params too when href set 2025-10-22 15:01:27 +03:00
Halil Durak
2d14452dda remove stale todo comments 2025-10-22 13:40:44 +03:00
3 changed files with 26 additions and 10 deletions

View File

@@ -272,14 +272,12 @@ pub const HTMLAnchorElement = struct {
return error.NotProvided; return error.NotProvided;
} }
// TODO return a disposable string
pub fn get_origin(self: *parser.Anchor, page: *Page) ![]const u8 { pub fn get_origin(self: *parser.Anchor, page: *Page) ![]const u8 {
var u = try url(self, page); var u = try url(self, page);
defer u.destructor(); defer u.destructor();
return u.get_origin(page); return u.get_origin(page);
} }
// TODO return a disposable string
pub fn get_protocol(self: *parser.Anchor, page: *Page) ![]const u8 { pub fn get_protocol(self: *parser.Anchor, page: *Page) ![]const u8 {
var u = try url(self, page); var u = try url(self, page);
defer u.destructor(); defer u.destructor();
@@ -296,7 +294,6 @@ pub const HTMLAnchorElement = struct {
return parser.anchorSetHref(self, href); return parser.anchorSetHref(self, href);
} }
// TODO return a disposable string
pub fn get_host(self: *parser.Anchor, page: *Page) ![]const u8 { pub fn get_host(self: *parser.Anchor, page: *Page) ![]const u8 {
var u = url(self, page) catch return ""; var u = url(self, page) catch return "";
defer u.destructor(); defer u.destructor();
@@ -328,7 +325,6 @@ pub const HTMLAnchorElement = struct {
return parser.anchorSetHref(self, href); return parser.anchorSetHref(self, href);
} }
// TODO return a disposable string
pub fn get_port(self: *parser.Anchor, page: *Page) ![]const u8 { pub fn get_port(self: *parser.Anchor, page: *Page) ![]const u8 {
var u = url(self, page) catch return ""; var u = url(self, page) catch return "";
defer u.destructor(); defer u.destructor();
@@ -349,7 +345,6 @@ pub const HTMLAnchorElement = struct {
return parser.anchorSetHref(self, href); return parser.anchorSetHref(self, href);
} }
// TODO return a disposable string
pub fn get_username(self: *parser.Anchor, page: *Page) ![]const u8 { pub fn get_username(self: *parser.Anchor, page: *Page) ![]const u8 {
var u = url(self, page) catch return ""; var u = url(self, page) catch return "";
defer u.destructor(); defer u.destructor();
@@ -373,7 +368,6 @@ pub const HTMLAnchorElement = struct {
return parser.anchorSetHref(self, href); return parser.anchorSetHref(self, href);
} }
// TODO return a disposable string
pub fn get_password(self: *parser.Anchor, page: *Page) ![]const u8 { pub fn get_password(self: *parser.Anchor, page: *Page) ![]const u8 {
var u = url(self, page) catch return ""; var u = url(self, page) catch return "";
defer u.destructor(); defer u.destructor();
@@ -392,7 +386,6 @@ pub const HTMLAnchorElement = struct {
return parser.anchorSetHref(self, href); return parser.anchorSetHref(self, href);
} }
// TODO return a disposable string
pub fn get_pathname(self: *parser.Anchor, page: *Page) ![]const u8 { pub fn get_pathname(self: *parser.Anchor, page: *Page) ![]const u8 {
var u = url(self, page) catch return ""; var u = url(self, page) catch return "";
defer u.destructor(); defer u.destructor();
@@ -426,7 +419,6 @@ pub const HTMLAnchorElement = struct {
return parser.anchorSetHref(self, href); return parser.anchorSetHref(self, href);
} }
// TODO return a disposable string
pub fn get_hash(self: *parser.Anchor, page: *Page) ![]const u8 { pub fn get_hash(self: *parser.Anchor, page: *Page) ![]const u8 {
var u = url(self, page) catch return ""; var u = url(self, page) catch return "";
defer u.destructor(); defer u.destructor();

View File

@@ -281,10 +281,11 @@ pub const URL = struct {
/// `Internal` error for failing cases. /// `Internal` error for failing cases.
const SetterError = error{Internal}; const SetterError = error{Internal};
// FIXME: reinit search_params? pub fn set_href(self: *URL, input: []const u8, page: *Page) !void {
pub fn set_href(self: *const URL, input: []const u8) SetterError!void {
_ = ada.setHref(self.internal, input); _ = ada.setHref(self.internal, input);
if (!ada.isValid(self.internal)) return error.Internal; if (!ada.isValid(self.internal)) return error.Internal;
// Can't call `get_search` here since it uses `search_params`.
self.search_params = try prepareSearchParams(page.arena, self.internal);
} }
pub fn set_host(self: *const URL, input: []const u8) SetterError!void { pub fn set_host(self: *const URL, input: []const u8) SetterError!void {

View File

@@ -64,6 +64,23 @@
testing.expectEqual(null, url.searchParams.get('a')); testing.expectEqual(null, url.searchParams.get('a'));
</script> </script>
<script id=searchParamsSetHref>
url = new URL("https://foo.bar");
const searchParams = url.searchParams;
// SearchParams should be empty.
testing.expectEqual(0, searchParams.size);
url.href = "https://lightpanda.io?over=9000&light=panda";
// It won't hurt to check href and host too.
testing.expectEqual("https://lightpanda.io/?over=9000&light=panda", url.href);
testing.expectEqual("lightpanda.io", url.host);
// SearchParams should be updated too when URL is set.
testing.expectEqual(2, searchParams.size);
testing.expectEqual("9000", searchParams.get("over"));
testing.expectEqual("panda", searchParams.get("light"));
</script>
<script id=base> <script id=base>
url = new URL('over?9000', 'https://lightpanda.io'); url = new URL('over?9000', 'https://lightpanda.io');
testing.expectEqual("https://lightpanda.io/over?9000", url.href); testing.expectEqual("https://lightpanda.io/over?9000", url.href);
@@ -76,3 +93,9 @@
testing.expectEqual("", sk.hostname); testing.expectEqual("", sk.hostname);
testing.expectEqual("sveltekit-internal://", sk.href); testing.expectEqual("sveltekit-internal://", sk.href);
</script> </script>
<script id=invalidUrl>
testing.expectError("Error: Invalid", () => {
_ = new URL("://foo.bar/path?query#fragment");
});
</script>