diff --git a/src/browser/css/parser.zig b/src/browser/css/parser.zig index a64d2ea5..dc0e87c0 100644 --- a/src/browser/css/parser.zig +++ b/src/browser/css/parser.zig @@ -204,7 +204,7 @@ pub const Parser = struct { } const c = p.s[p.i]; - if (!nameStart(c) or c == '\\') { + if (!(nameStart(c) or c == '\\')) { return ParseError.ExpectedSelector; } @@ -950,3 +950,36 @@ test "parser.parseString" { }; } } + +test "parser.parse" { + var arena = std.heap.ArenaAllocator.init(std.testing.allocator); + defer arena.deinit(); + const alloc = arena.allocator(); + + const testcases = [_]struct { + s: []const u8, // given value + exp: Selector, // expected value + err: bool = false, + }{ + .{ .s = "root", .exp = .{ .tag = "root" } }, + .{ .s = ".root", .exp = .{ .class = "root" } }, + .{ .s = ":root", .exp = .{ .pseudo_class = .root } }, + .{ .s = ".\\:bar", .exp = .{ .class = ":bar" } }, + .{ .s = ".foo\\:bar", .exp = .{ .class = "foo:bar" } }, + }; + + for (testcases) |tc| { + var p = Parser{ .s = tc.s, .opts = .{} }; + const sel = p.parse(alloc) catch |e| { + // if error was expected, continue. + if (tc.err) continue; + + std.debug.print("test case {s}\n", .{tc.s}); + return e; + }; + std.testing.expectEqualDeep(tc.exp, sel) catch |e| { + std.debug.print("test case {s} : {}\n", .{ tc.s, sel }); + return e; + }; + } +} diff --git a/src/browser/dom/document.zig b/src/browser/dom/document.zig index 9fe4964d..911c3015 100644 --- a/src/browser/dom/document.zig +++ b/src/browser/dom/document.zig @@ -469,6 +469,9 @@ test "Browser.DOM.Document" { , "1", }, + + .{ "document.querySelectorAll('.\\\\:popover-open').length", "0" }, + .{ "document.querySelectorAll('.foo\\\\:bar').length", "0" }, }, .{}); try runner.testCases(&.{ diff --git a/src/runtime/test_primitive_types.zig b/src/runtime/test_primitive_types.zig index e2a2673c..49db501c 100644 --- a/src/runtime/test_primitive_types.zig +++ b/src/runtime/test_primitive_types.zig @@ -336,4 +336,8 @@ test "JS: primitive types" { .{ "p.returnFloat32()", "1.100000023841858,-200.03500366210938,0.0003000000142492354" }, .{ "p.returnFloat64()", "8881.22284,-4928.3838122,-0.00004" }, }, .{}); + + try runner.testCases(&.{ + .{ "'foo\\\\:bar'", "foo\\:bar" }, + }, .{}); }