mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 23:23:28 +00:00
css: allow escaped first char in identifier name
This commit is contained in:
@@ -204,7 +204,7 @@ pub const Parser = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const c = p.s[p.i];
|
const c = p.s[p.i];
|
||||||
if (!nameStart(c) or c == '\\') {
|
if (!nameStart(c) and c != '\\') {
|
||||||
return ParseError.ExpectedSelector;
|
return ParseError.ExpectedSelector;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -949,3 +949,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;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -469,6 +469,9 @@ test "Browser.DOM.Document" {
|
|||||||
,
|
,
|
||||||
"1",
|
"1",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
.{ "document.querySelectorAll('.\\\\:popover-open').length", "0" },
|
||||||
|
.{ "document.querySelectorAll('.foo\\\\:bar').length", "0" },
|
||||||
}, .{});
|
}, .{});
|
||||||
|
|
||||||
try runner.testCases(&.{
|
try runner.testCases(&.{
|
||||||
|
|||||||
@@ -336,4 +336,8 @@ test "JS: primitive types" {
|
|||||||
.{ "p.returnFloat32()", "1.100000023841858,-200.03500366210938,0.0003000000142492354" },
|
.{ "p.returnFloat32()", "1.100000023841858,-200.03500366210938,0.0003000000142492354" },
|
||||||
.{ "p.returnFloat64()", "8881.22284,-4928.3838122,-0.00004" },
|
.{ "p.returnFloat64()", "8881.22284,-4928.3838122,-0.00004" },
|
||||||
}, .{});
|
}, .{});
|
||||||
|
|
||||||
|
try runner.testCases(&.{
|
||||||
|
.{ "'foo\\\\:bar'", "foo\\:bar" },
|
||||||
|
}, .{});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user