terminal: page tests for full clone

pull/9624/head
Mitchell Hashimoto 2025-11-17 06:10:33 -10:00
parent 9a46397b59
commit 09d41fd4af
No known key found for this signature in database
GPG Key ID: 523D5DC389D273BC
1 changed files with 78 additions and 0 deletions

View File

@ -2233,6 +2233,84 @@ test "Page clone" {
} }
} }
test "Page clone graphemes" {
var page = try Page.init(.{
.cols = 10,
.rows = 10,
.styles = 8,
});
defer page.deinit();
// Append some graphemes
{
const rac = page.getRowAndCell(0, 0);
rac.cell.* = .init(0x09);
try page.appendGrapheme(rac.row, rac.cell, 0x0A);
try page.appendGrapheme(rac.row, rac.cell, 0x0B);
}
// Clone it
var page2 = try page.clone();
defer page2.deinit();
{
const rac = page2.getRowAndCell(0, 0);
try testing.expect(rac.row.grapheme);
try testing.expect(rac.cell.hasGrapheme());
try testing.expectEqualSlices(u21, &.{ 0x0A, 0x0B }, page2.lookupGrapheme(rac.cell).?);
}
}
test "Page clone styles" {
var page = try Page.init(.{
.cols = 10,
.rows = 10,
.styles = 8,
});
defer page.deinit();
// Write with some styles
{
const id = try page.styles.add(page.memory, .{ .flags = .{
.bold = true,
} });
for (0..page.size.cols) |x| {
const rac = page.getRowAndCell(x, 0);
rac.row.styled = true;
rac.cell.* = .{
.content_tag = .codepoint,
.content = .{ .codepoint = @intCast(x + 1) },
.style_id = id,
};
page.styles.use(page.memory, id);
}
}
// Clone it
var page2 = try page.clone();
defer page2.deinit();
{
const id: u16 = style: {
const rac = page2.getRowAndCell(0, 0);
break :style rac.cell.style_id;
};
for (0..page.size.cols) |x| {
const rac = page.getRowAndCell(x, 0);
try testing.expect(rac.row.styled);
try testing.expectEqual(id, rac.cell.style_id);
}
const style = page.styles.get(
page.memory,
id,
);
try testing.expect((Style{ .flags = .{
.bold = true,
} }).eql(style.*));
}
}
test "Page cloneFrom" { test "Page cloneFrom" {
var page = try Page.init(.{ var page = try Page.init(.{
.cols = 10, .cols = 10,