From 954a6935863f5fb5759fab5f8939c57b4165a443 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Mon, 18 Mar 2024 09:49:12 +0100 Subject: [PATCH] css: add matcher test w/ libdom --- src/css/libdom.zig | 6 +++++- src/css/libdom_test.zig | 44 +++++++++++++++++++++++++++++++++++++++++ src/css/match_test.zig | 1 + src/run_tests.zig | 14 +++++++++---- 4 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 src/css/libdom_test.zig diff --git a/src/css/libdom.zig b/src/css/libdom.zig index 49623286..8fb23aad 100644 --- a/src/css/libdom.zig +++ b/src/css/libdom.zig @@ -13,10 +13,14 @@ pub const Node = struct { return null; } - pub fn nextSibling(n: Node) ?Node { + pub fn nextSibling(n: Node) !?Node { const c = try parser.nodeNextSibling(n.node); if (c) |cc| return .{ .node = cc }; return null; } + + pub fn tag(n: Node) ![]const u8 { + return try parser.nodeName(n.node); + } }; diff --git a/src/css/libdom_test.zig b/src/css/libdom_test.zig new file mode 100644 index 00000000..f143c17b --- /dev/null +++ b/src/css/libdom_test.zig @@ -0,0 +1,44 @@ +const std = @import("std"); +const css = @import("css.zig"); +const Node = @import("libdom.zig").Node; +const parser = @import("../netsurf.zig"); + +const Matcher = struct { + const Nodes = std.ArrayList(Node); + + nodes: Nodes, + + fn init(alloc: std.mem.Allocator) Matcher { + return .{ .nodes = Nodes.init(alloc) }; + } + + fn deinit(m: *Matcher) void { + m.nodes.deinit(); + } + + fn reset(m: *Matcher) void { + m.nodes.clearRetainingCapacity(); + } + + pub fn match(m: *Matcher, n: Node) !void { + try m.nodes.append(n); + } +}; + +test "matchFirst" { + const alloc = std.testing.allocator; + + const s = try css.parse(alloc, "address", .{}); + defer s.deinit(alloc); + + var matcher = Matcher.init(alloc); + defer matcher.deinit(); + + const doc = try parser.documentHTMLParseFromStr("
This address...
"); + defer parser.documentHTMLClose(doc) catch {}; + + const node = Node{ .node = parser.documentHTMLToNode(doc) }; + + _ = try css.matchFirst(s, node, &matcher); + try std.testing.expect(1 == matcher.nodes.items.len); +} diff --git a/src/css/match_test.zig b/src/css/match_test.zig index ab7d725e..90c3cd1a 100644 --- a/src/css/match_test.zig +++ b/src/css/match_test.zig @@ -20,6 +20,7 @@ pub const Node = struct { return n.name; } }; + const Matcher = struct { const Nodes = std.ArrayList(*const Node); diff --git a/src/run_tests.zig b/src/run_tests.zig index 2f5c8d6b..9227a20d 100644 --- a/src/run_tests.zig +++ b/src/run_tests.zig @@ -98,11 +98,17 @@ pub fn main() !void { } test { - const AsyncTest = @import("async/test.zig"); - std.testing.refAllDecls(AsyncTest); + const asyncTest = @import("async/test.zig"); + std.testing.refAllDecls(asyncTest); - const DumpTest = @import("browser/dump.zig"); - std.testing.refAllDecls(DumpTest); + const dumpTest = @import("browser/dump.zig"); + std.testing.refAllDecls(dumpTest); + + const cssMatchTest = @import("css/match_test.zig"); + std.testing.refAllDecls(cssMatchTest); + + const cssLibdomTest = @import("css/libdom_test.zig"); + std.testing.refAllDecls(cssLibdomTest); } fn testJSRuntime() !void {