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:
@@ -174,6 +174,90 @@ pub const Border = packed struct {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
test "all sides" {
|
||||
const event = @import("event.zig");
|
||||
const testing = @import("testing.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"));
|
||||
}
|
||||
|
||||
test "vertical sides" {
|
||||
const event = @import("event.zig");
|
||||
const testing = @import("testing.zig");
|
||||
|
||||
var container: Container(event.SystemEvent) = try .init(std.testing.allocator, .{
|
||||
.border = .{
|
||||
.color = .green,
|
||||
.sides = .vertical,
|
||||
},
|
||||
}, .{});
|
||||
defer container.deinit();
|
||||
|
||||
try testing.expectContainerScreen(.{
|
||||
.rows = 20,
|
||||
.cols = 30,
|
||||
}, &container, @import("test/container/border.vertical.zon"));
|
||||
}
|
||||
|
||||
test "horizontal sides" {
|
||||
const event = @import("event.zig");
|
||||
const testing = @import("testing.zig");
|
||||
|
||||
var container: Container(event.SystemEvent) = try .init(std.testing.allocator, .{
|
||||
.border = .{
|
||||
.color = .blue,
|
||||
.sides = .horizontal,
|
||||
},
|
||||
}, .{});
|
||||
defer container.deinit();
|
||||
|
||||
try testing.expectContainerScreen(.{
|
||||
.rows = 20,
|
||||
.cols = 30,
|
||||
}, &container, @import("test/container/border.horizontal.zon"));
|
||||
}
|
||||
|
||||
// NOTE: this test serves as a template for further test creations. It should not run for testing.
|
||||
// test "create container zon file" {
|
||||
// const event = @import("event.zig");
|
||||
// const testing = @import("testing.zig");
|
||||
|
||||
// var container: Container(event.SystemEvent) = try .init(std.testing.allocator, .{
|
||||
// .border = .{
|
||||
// .color = .green,
|
||||
// .sides = .horizontal,
|
||||
// },
|
||||
// }, .{});
|
||||
// defer container.deinit();
|
||||
|
||||
// const size: Size = .{
|
||||
// .rows = 20,
|
||||
// .cols = 30,
|
||||
// };
|
||||
|
||||
// const file = try std.fs.cwd().createFile("src/test/container/border.horizontal.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());
|
||||
// }
|
||||
};
|
||||
|
||||
/// Rectangle configuration struct
|
||||
|
||||
1
src/test/container/border.all.zon
Normal file
1
src/test/container/border.all.zon
Normal file
File diff suppressed because one or more lines are too long
1
src/test/container/border.horizontal.zon
Normal file
1
src/test/container/border.horizontal.zon
Normal file
File diff suppressed because one or more lines are too long
1
src/test/container/border.vertical.zon
Normal file
1
src/test/container/border.vertical.zon
Normal file
File diff suppressed because one or more lines are too long
@@ -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