dom: implement lwc_string

and unit tests for document.GetElementByClassName
This commit is contained in:
Pierre Tachoire
2023-11-19 08:48:10 +01:00
parent 9acf3fb209
commit 47e52b8217
3 changed files with 25 additions and 3 deletions

View File

@@ -96,6 +96,16 @@ pub fn testExecFn(
}; };
try checkCases(js_env, &getElementsByTagName); try checkCases(js_env, &getElementsByTagName);
var getElementsByClassName = [_]Case{
.{ .src = "let ok = document.getElementsByClassName('ok')", .ex = "undefined" },
.{ .src = "ok.length", .ex = "2" },
.{ .src = "let empty = document.getElementsByClassName('empty')", .ex = "undefined" },
.{ .src = "empty.length", .ex = "1" },
.{ .src = "let emptyok = document.getElementsByClassName('empty ok')", .ex = "undefined" },
.{ .src = "emptyok.length", .ex = "1" },
};
try checkCases(js_env, &getElementsByClassName);
const tags = comptime parser.Tag.all(); const tags = comptime parser.Tag.all();
comptime var createElements: [(tags.len) * 2]Case = undefined; comptime var createElements: [(tags.len) * 2]Case = undefined;
inline for (tags, 0..) |tag, i| { inline for (tags, 0..) |tag, i| {

View File

@@ -65,6 +65,18 @@ inline fn stringFromData(data: []const u8) *String {
return s.?; return s.?;
} }
const LWCString = c.lwc_string;
// TODO implement lwcStringToData
// inline fn lwcStringToData(s: *LWCString) []const u8 {
// }
inline fn lwcStringFromData(data: []const u8) *LWCString {
var s: ?*LWCString = undefined;
_ = c.lwc_intern_string(data.ptr, data.len, &s);
return s.?;
}
// Tag // Tag
pub const Tag = enum(u8) { pub const Tag = enum(u8) {
@@ -628,7 +640,7 @@ pub fn elementGetAttribute(elem: *Element, name: []const u8) ?[]const u8 {
pub fn elementHasClass(elem: *Element, class: []const u8) bool { pub fn elementHasClass(elem: *Element, class: []const u8) bool {
var res: bool = undefined; var res: bool = undefined;
_ = elementVtable(elem).dom_element_has_class.?(elem, stringFromData(class), &res); _ = elementVtable(elem).dom_element_has_class.?(elem, lwcStringFromData(class), &res);
return res; return res;
} }

View File

@@ -1,6 +1,6 @@
<div id='content'> <div id='content'>
<a id='link' href='foo'>OK</a> <a id='link' href='foo' class='ok'>OK</a>
<p id='para-empty'> <p id='para-empty' class='ok empty'>
<span id='para-empty-child'></span> <span id='para-empty-child'></span>
</p> </p>
<p id='para'> And</p> <p id='para'> And</p>