diff options
Diffstat (limited to 'src/testing.zig')
| -rw-r--r-- | src/testing.zig | 32 |
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; + }); +} |
