test(container): render Cell slices test against .zon input
Some checks failed
Zig Project Action / Lint, Spell-check and test zig project (push) Failing after 1m0s
Some checks failed
Zig Project Action / Lint, Spell-check and test zig project (push) Failing after 1m0s
This commit is contained in:
@@ -71,10 +71,50 @@ pub const Renderer = struct {
|
||||
|
||||
for (container.elements.items) |*element| try this.render(T, element);
|
||||
}
|
||||
|
||||
pub fn save(this: @This(), writer: anytype) !void {
|
||||
try std.zon.stringify.serialize(this.screen, .{ .whitespace = false }, writer);
|
||||
}
|
||||
};
|
||||
|
||||
/// This function is intended to be used only in tests. Test if a `Container`'s
|
||||
/// rendered contents are equal to the expected `Cell` slice.
|
||||
///
|
||||
/// # Test data creation
|
||||
///
|
||||
/// Create a .zon file containing the expected `Cell` slice using the `zterm.testing.Renderer.save` method:
|
||||
///
|
||||
/// ```zig
|
||||
/// const file = try std.fs.cwd().createFile("test/container/border/all.zon", .{ .truncate = true });
|
||||
/// defer file.close();
|
||||
///
|
||||
/// const allocator = std.testing.allocator;
|
||||
/// var renderer: testing.Renderer = .init(allocator, size);
|
||||
/// defer renderer.deinit();
|
||||
///
|
||||
/// try container.handle(.{ .resize = size });
|
||||
/// try renderer.render(Container(event.SystemEvent), &container);
|
||||
/// try renderer.save(file.writer());
|
||||
/// ```
|
||||
///
|
||||
/// # Testing against created data
|
||||
///
|
||||
/// Then later load that .zon file at compile time and run your test against this `Cell` slice.
|
||||
///
|
||||
/// ```zig
|
||||
/// var container: Container(event.SystemEvent) = try .init(std.testing.allocator, .{
|
||||
/// .border = .{
|
||||
/// .color = .green,
|
||||
/// .sides = .all,
|
||||
/// },
|
||||
/// }, .{});
|
||||
/// defer container.deinit();
|
||||
///
|
||||
/// try testing.expectContainerScreen(.{
|
||||
/// .rows = 20,
|
||||
/// .cols = 30,
|
||||
/// }, &container, @import("test/container/border.all.zon"));
|
||||
/// ```
|
||||
pub fn expectContainerScreen(size: Size, container: *Container(event.SystemEvent), expected: []const Cell) !void {
|
||||
const allocator = std.testing.allocator;
|
||||
var renderer: Renderer = .init(allocator, size);
|
||||
|
||||
Reference in New Issue
Block a user