aboutsummaryrefslogtreecommitdiff
path: root/src/testing.zig
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2026-04-30 18:25:15 +0200
committerAnhgelus Morhtuuzh <william@herges.fr>2026-04-30 18:25:15 +0200
commita36f5482ad90d6899d56e016666a2ca09240abd6 (patch)
tree662910a41786a7d77cfb55f069236eef1c2a2639 /src/testing.zig
parent3fd5b4a9ad676b722f1f889f523b4ca368f05275 (diff)
feat(): support math block
Diffstat (limited to 'src/testing.zig')
-rw-r--r--src/testing.zig32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/testing.zig b/src/testing.zig
index 21fb4fd..143d6ca 100644
--- a/src/testing.zig
+++ b/src/testing.zig
@@ -4,7 +4,9 @@ const Lexer = @import("lexer/Lexer.zig");
const Element = @import("eval/Element.zig");
const parser = @import("parser.zig");
-pub fn do(comptime parse: fn (Allocator, *Lexer) parser.Error!Element, parent: Allocator, t: []const u8, v: []const u8) !void {
+const ParserFn = fn (Allocator, *Lexer) parser.Error!Element;
+
+pub fn do(comptime parse: ParserFn, parent: Allocator, t: []const u8, v: []const u8) !void {
var arena = std.heap.ArenaAllocator.init(parent);
defer arena.deinit();
var alloc = arena.allocator();
@@ -19,7 +21,7 @@ pub fn do(comptime parse: fn (Allocator, *Lexer) parser.Error!Element, parent: A
};
}
-pub fn doError(comptime parse: fn (Allocator, *Lexer) parser.Error!Element, parent: Allocator, t: []const u8, err: parser.Error) !void {
+pub fn doError(comptime parse: ParserFn, parent: Allocator, t: []const u8, err: parser.Error) !void {
var arena = std.heap.ArenaAllocator.init(parent);
defer arena.deinit();
@@ -32,3 +34,29 @@ pub fn doError(comptime parse: fn (Allocator, *Lexer) parser.Error!Element, pare
};
return error.ExpectingError;
}
+
+pub fn doMath(comptime parse: ParserFn, parent: Allocator, t: []const u8, v: []const u8) !void {
+ if (@import("config").short) return;
+ var arena = std.heap.ArenaAllocator.init(parent);
+ defer arena.deinit();
+ var alloc = arena.allocator();
+
+ var l = try Lexer.init(t);
+ var p = try parse(alloc, &l);
+ const g = try p.renderHTML(alloc);
+ defer alloc.free(g);
+ try std.testing.expect(blk: {
+ var g_iter = std.mem.splitSequence(u8, g, " ");
+ var v_iter = std.mem.splitSequence(u8, v, " ");
+ while (g_iter.next()) |g_it| {
+ const v_it = v_iter.next() orelse break :blk false;
+ if ((std.mem.startsWith(u8, g_it, "xlink:href=") and std.mem.startsWith(u8, g_it, "xlink:href")) or
+ (std.mem.startsWith(u8, g_it, "id=") and std.mem.startsWith(u8, v_it, "id="))) continue;
+ if (!std.mem.eql(u8, g_it, v_it)) {
+ std.debug.print("not the same: {s} vs {s}", .{ g_it, v_it });
+ break :blk false;
+ }
+ }
+ break :blk v_iter.next() == null;
+ });
+}