summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/column_drag.zig37
-rw-r--r--test/web-snapshots/touch.mjs6
2 files changed, 40 insertions, 3 deletions
diff --git a/test/column_drag.zig b/test/column_drag.zig
index 341c8b70..1c9a344e 100644
--- a/test/column_drag.zig
+++ b/test/column_drag.zig
@@ -169,3 +169,40 @@ test "column grip is separate from compact text and the resize seam" {
try std.testing.expect(p.drag == .border_v);
p.update(.{ .mouse = .{ .button = .left, .kind = .release, .col = seam, .row = body_row } });
}
+
+test "column grips stay blank and muted across focus hover and drag" {
+ const p = try Pardes.init(std.testing.allocator, .{ .tty_only = true, .cols = 80, .rows = 20 });
+ defer p.deinit();
+ _ = try p.setTestFile("left\n");
+ p.presentation.enabled = false;
+ p.settings.column_tags = true;
+ p.row_metrics = .{ .body_w = 10, .body_h = 20, .tagline_w = 5, .tagline_h = 10 };
+ try std.testing.expect(p.executeBuiltinLine(0, "New"));
+ try std.testing.expect(layout.splitColumn(p, p.active, p.active, false));
+ var frame = std.heap.ArenaAllocator.init(p.gpa);
+ defer frame.deinit();
+ for ([_]bool{ false, true }) |focus_tint| {
+ p.settings.focus_tint = focus_tint;
+ for (0..p.ncol) |active_column| {
+ p.active = p.col_panes[active_column][0];
+ const x = p.col_x[active_column];
+ p.update(.{ .mouse = .{ .button = .none, .kind = .motion, .col = x, .row = pardes.TOPBAR_H } });
+ for ([_]bool{ false, true }) |dragging| {
+ if (dragging) mouse(p, .press, x);
+ _ = frame.reset(.retain_capacity);
+ const surface = try p.render(frame.allocator());
+ const muted: pardes.Color = .{ .rgb = p.chromeTheme().column_box_dim };
+ for (0..p.ncol) |column| {
+ for (0..config.GUTTER) |offset| {
+ const cell = surface.at(p.col_x[column] + @as(u16, @intCast(offset)), pardes.TOPBAR_H);
+ try std.testing.expectEqualStrings(" ", cell.grapheme());
+ try std.testing.expectEqual(muted, cell.style.bg);
+ try std.testing.expectEqual(pardes.FontRole.tagline, cell.style.font_role);
+ }
+ try std.testing.expectEqual(p.col_x[column] + config.GUTTER, (try tagLayer(p, column)).viewport.x);
+ }
+ if (dragging) mouse(p, .release, x);
+ }
+ }
+ }
+}
diff --git a/test/web-snapshots/touch.mjs b/test/web-snapshots/touch.mjs
index 3820117e..b78cbdc0 100644
--- a/test/web-snapshots/touch.mjs
+++ b/test/web-snapshots/touch.mjs
@@ -100,7 +100,7 @@ export default async function ({ grid, touch, wait, stable, delay, evaluate, mou
renderer.render();
const columnGrip=renderer.tagRoot.querySelector('[data-tag-grip]');
const marks=node=>[...node.children].map(mark=>[parseFloat(mark.style.left),parseFloat(mark.style.top),parseFloat(mark.style.width)]);
- result.columnMarks=marks(columnGrip);
+ result.columnMarks=columnGrip ? marks(columnGrip) : [];
tagValues[1]=2;tagValues[5]=1;bytes[40]=32;data.setUint32(48,0x778899,true);
renderer.render();
result.paneMarks=marks(renderer.tagRoot.querySelector('[data-tag-grip]'));
@@ -119,8 +119,8 @@ export default async function ({ grid, touch, wait, stable, delay, evaluate, mou
gripVisible:"",covered:"hidden",background:"rgb(51, 68, 85)",cached:true,bgInvalidates:true},
"tag text uses its own columns after a fixed body-width grip, with cursor and cached base background");
- assert.deepEqual(compactGeometry.columnMarks,[[7,13,6],[7,16,6]]);
- assert.deepEqual(compactGeometry.paneMarks,[[7,33,6],[7,36,6]],"pane and column handles share physical horizontal mark geometry");
+ assert.deepEqual(compactGeometry.columnMarks,[],"column handles have no mark");
+ assert.deepEqual(compactGeometry.paneMarks,[[7,33,6],[7,36,6]],"pane handles keep their physical mark geometry");
let frame = await grid();
assert.equal(tags(frame).length, 1);