diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-15 15:33:30 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-09-15 17:24:42 -0300 |
| commit | 8ac4a48a2e8e66a9e72bcbc61c114be8db9215fd (patch) | |
| tree | 4c48ecd42a800b12daed0712a4620639d1631f7e /test/panes.zig | |
| parent | c1787ff868ee723629c1d500098d36dc419f77c3 (diff) | |
| download | pardes-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.zig | 30 |
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; |
