From 201ad4d8506f3e750c57c85fe5b47d5ff05710ff Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Wed, 6 Mar 2024 14:01:24 -0800 Subject: [PATCH] terminal2: more selectLine tests --- src/terminal/Screen.zig | 2 + src/terminal2/Screen.zig | 103 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) diff --git a/src/terminal/Screen.zig b/src/terminal/Screen.zig index b13b5b249..4132c9539 100644 --- a/src/terminal/Screen.zig +++ b/src/terminal/Screen.zig @@ -4606,6 +4606,7 @@ test "Screen: selectLine semantic prompt boundary" { } } +// X test "Screen: selectLine across soft-wrap ignores blank lines" { const testing = std.testing; const alloc = testing.allocator; @@ -4642,6 +4643,7 @@ test "Screen: selectLine across soft-wrap ignores blank lines" { } } +// X test "Screen: selectLine with scrollback" { const testing = std.testing; const alloc = testing.allocator; diff --git a/src/terminal2/Screen.zig b/src/terminal2/Screen.zig index af8bec5fc..37b6dee45 100644 --- a/src/terminal2/Screen.zig +++ b/src/terminal2/Screen.zig @@ -3729,6 +3729,66 @@ test "Screen: selectLine across soft-wrap" { } } +test "Screen: selectLine across soft-wrap ignores blank lines" { + const testing = std.testing; + const alloc = testing.allocator; + + var s = try init(alloc, 5, 10, 0); + defer s.deinit(); + try s.testWriteString(" 12 34012 \n 123"); + + // Going forward + { + var sel = s.selectLine(s.pages.pin(.{ .active = .{ + .x = 1, + .y = 0, + } }).?).?; + defer sel.deinit(&s); + try testing.expectEqual(point.Point{ .screen = .{ + .x = 1, + .y = 0, + } }, s.pages.pointFromPin(.screen, sel.start().*).?); + try testing.expectEqual(point.Point{ .screen = .{ + .x = 3, + .y = 1, + } }, s.pages.pointFromPin(.screen, sel.end().*).?); + } + + // Going backward + { + var sel = s.selectLine(s.pages.pin(.{ .active = .{ + .x = 1, + .y = 1, + } }).?).?; + defer sel.deinit(&s); + try testing.expectEqual(point.Point{ .screen = .{ + .x = 1, + .y = 0, + } }, s.pages.pointFromPin(.screen, sel.start().*).?); + try testing.expectEqual(point.Point{ .screen = .{ + .x = 3, + .y = 1, + } }, s.pages.pointFromPin(.screen, sel.end().*).?); + } + + // Going forward and backward + { + var sel = s.selectLine(s.pages.pin(.{ .active = .{ + .x = 3, + .y = 0, + } }).?).?; + defer sel.deinit(&s); + try testing.expectEqual(point.Point{ .screen = .{ + .x = 1, + .y = 0, + } }, s.pages.pointFromPin(.screen, sel.start().*).?); + try testing.expectEqual(point.Point{ .screen = .{ + .x = 3, + .y = 1, + } }, s.pages.pointFromPin(.screen, sel.end().*).?); + } +} + test "Screen: selectAll" { const testing = std.testing; const alloc = testing.allocator; @@ -3764,3 +3824,46 @@ test "Screen: selectAll" { } }, s.pages.pointFromPin(.screen, sel.end().*).?); } } + +test "Screen: selectLine with scrollback" { + const testing = std.testing; + const alloc = testing.allocator; + + var s = try init(alloc, 2, 3, 5); + defer s.deinit(); + try s.testWriteString("1A\n2B\n3C\n4D\n5E"); + + // Selecting first line + { + var sel = s.selectLine(s.pages.pin(.{ .active = .{ + .x = 0, + .y = 0, + } }).?).?; + defer sel.deinit(&s); + try testing.expectEqual(point.Point{ .active = .{ + .x = 0, + .y = 0, + } }, s.pages.pointFromPin(.active, sel.start().*).?); + try testing.expectEqual(point.Point{ .active = .{ + .x = 1, + .y = 0, + } }, s.pages.pointFromPin(.active, sel.end().*).?); + } + + // Selecting last line + { + var sel = s.selectLine(s.pages.pin(.{ .active = .{ + .x = 0, + .y = 2, + } }).?).?; + defer sel.deinit(&s); + try testing.expectEqual(point.Point{ .active = .{ + .x = 0, + .y = 2, + } }, s.pages.pointFromPin(.active, sel.start().*).?); + try testing.expectEqual(point.Point{ .active = .{ + .x = 1, + .y = 2, + } }, s.pages.pointFromPin(.active, sel.end().*).?); + } +}