summaryrefslogtreecommitdiff
path: root/test/panes.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-15 15:33:30 -0300
committerGabriel Schneider <[email protected]>2026-09-15 17:24:42 -0300
commit8ac4a48a2e8e66a9e72bcbc61c114be8db9215fd (patch)
tree4c48ecd42a800b12daed0712a4620639d1631f7e /test/panes.zig
parentc1787ff868ee723629c1d500098d36dc419f77c3 (diff)
downloadpardes-8ac4a48a2e8e66a9e72bcbc61c114be8db9215fd.tar.gz
pardes-8ac4a48a2e8e66a9e72bcbc61c114be8db9215fd.zip
Separate discontinuous pinned source context with thin borders
Diffstat (limited to 'test/panes.zig')
-rw-r--r--test/panes.zig30
1 files changed, 30 insertions, 0 deletions
diff --git a/test/panes.zig b/test/panes.zig
index 8c140001..bf8a98a2 100644
--- a/test/panes.zig
+++ b/test/panes.zig
@@ -267,6 +267,36 @@ const TreeContextTests = struct {
return pane;
}
+ test "TreeContext separators mark source gaps without splitting multiline signatures" {
+ if (!syntax.enabled) return error.SkipZigTest;
+ const p = try Pardes.init(std.testing.allocator, .{ .tty_only = true, .cols = 64, .rows = 18 });
+ defer p.deinit();
+ const pane = try setZigFile(p, "const Box = struct {\n\n // omitted member comment\n\n pub fn work(\n value: usize,\n ) void {\n" ++ " // body\n" ** 30 ++ " }\n};\n");
+ p.row_metrics = .{ .body_w = 10, .body_h = 20, .tagline_w = 8, .tagline_h = 10 };
+ try std.testing.expect(p.executeBuiltinLine(0, "TreeContext"));
+ pane.scrollBy(10);
+ var frame = std.heap.ArenaAllocator.init(p.gpa);
+ defer frame.deinit();
+ _ = try p.render(frame.allocator());
+ const layer = &p.surface.body_layers[0];
+ try std.testing.expectEqual(@as(u16, 4), layer.context_rows);
+ for ([_]i32{ 0, 4, 5, 6 }, 0..) |source_row, index| {
+ const row: u16 = @intCast(index);
+ try std.testing.expectEqual(source_row, pane.wrapAt(row).line);
+ try std.testing.expectEqual(index == 0 or index == 3, layer.hasContextBorderAfter(row));
+ const y = layer.rowTop(row, 20, 10) + 9.5;
+ const x = @as(f32, @floatFromInt(layer.viewport.x)) * 10 + 5;
+ // A one-pixel separator remains inside its existing header row.
+ try std.testing.expectEqual(row, layer.hitAt(x, y, 10, 20, 8, 10).?.row);
+ }
+ pane.scrollBy(-5);
+ _ = try p.render(frame.allocator());
+ try std.testing.expectEqual(@as(u16, 2), layer.context_rows);
+ try std.testing.expect(layer.hasContextBorderAfter(0));
+ try std.testing.expect(layer.hasContextBorderAfter(1));
+ for (2..layer.rows) |row| try std.testing.expect(!layer.hasContextBorderAfter(@intCast(row)));
+ }
+
test "TreeContext Look to an open file discards the old viewport extent" {
for ([_]bool{ false, true }) |context| {
if (context and !syntax.enabled) continue;