diff --git a/src/terminal/Terminal.zig b/src/terminal/Terminal.zig index 8a8f2f415..a7a277921 100644 --- a/src/terminal/Terminal.zig +++ b/src/terminal/Terminal.zig @@ -6063,6 +6063,60 @@ test "Terminal: eraseChars protected attributes ignored with dec set" { } } +test "Terminal: eraseChars wide char boundary conditions" { + const alloc = testing.allocator; + var t = try init(alloc, .{ .rows = 1, .cols = 8 }); + defer t.deinit(alloc); + + try t.printString("πŸ˜€aπŸ˜€bπŸ˜€"); + { + const str = try t.plainString(alloc); + defer testing.allocator.free(str); + try testing.expectEqualStrings("πŸ˜€aπŸ˜€bπŸ˜€", str); + } + + t.setCursorPos(1, 2); + t.eraseChars(3); + t.screen.cursor.page_pin.page.data.assertIntegrity(); + + { + const str = try t.plainString(alloc); + defer testing.allocator.free(str); + try testing.expectEqualStrings(" bπŸ˜€", str); + } +} + +test "Terminal: eraseChars wide char wrap boundary conditions" { + const alloc = testing.allocator; + var t = try init(alloc, .{ .rows = 3, .cols = 8 }); + defer t.deinit(alloc); + + try t.printString(".......πŸ˜€abcdeπŸ˜€......"); + { + const str = try t.plainString(alloc); + defer testing.allocator.free(str); + try testing.expectEqualStrings(".......\nπŸ˜€abcde\nπŸ˜€......", str); + + const unwrapped = try t.plainStringUnwrapped(alloc); + defer testing.allocator.free(unwrapped); + try testing.expectEqualStrings(".......πŸ˜€abcdeπŸ˜€......", unwrapped); + } + + t.setCursorPos(2, 2); + t.eraseChars(3); + t.screen.cursor.page_pin.page.data.assertIntegrity(); + + { + const str = try t.plainString(alloc); + defer testing.allocator.free(str); + try testing.expectEqualStrings(".......\n cde\nπŸ˜€......", str); + + const unwrapped = try t.plainStringUnwrapped(alloc); + defer testing.allocator.free(unwrapped); + try testing.expectEqualStrings(".......\n cde\nπŸ˜€......", unwrapped); + } +} + test "Terminal: reverseIndex" { const alloc = testing.allocator; var t = try init(alloc, .{ .cols = 2, .rows = 5 });