diff options
Diffstat (limited to 'src/ninep')
| -rw-r--r-- | src/ninep/cols.zig | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/ninep/cols.zig b/src/ninep/cols.zig index a1fe9ecc..7afcfbd8 100644 --- a/src/ninep/cols.zig +++ b/src/ninep/cols.zig @@ -232,6 +232,32 @@ test "New written to a column's exec makes its scratch in the session's director try testing.expectEqualStrings("/project/src/+New", p.panes[p.active].?.file.?.path); } +test "Joincol is refused when the joined column cannot give each pane its tag and 2 rows" { + const p = try pardes.Pardes.init(testing.allocator, .{ .tty_only = true, .cols = 160, .rows = 12 }); + defer p.deinit(); + while (p.nextEffect()) |_| {} + const ctl = @intFromEnum(tree.TopFile.ctl); + const focus = @intFromEnum(tree.TopFile.focus); + // Two panes in the first column, then a second column of two. + const a = try th.newPane(p); + _ = a; + try testing.expectEqual(tree.Status.ok, th.wr(p, ctl, "Newcol\n").reply.status); + const b = try th.newPane(p); + var digits: [16]u8 = undefined; + _ = th.wr(p, focus, try std.fmt.bufPrint(&digits, "{d}\n", .{b})); + _ = try th.newPane(p); + try testing.expectEqual(@as(usize, 2), p.ncol); + try testing.expect(p.col_n[0] >= 2 and p.col_n[1] >= 2); + // Focus in the left column: joined, four panes want 12 rows of 10. + const left = p.panes[p.col_panes[0][0]].?.serial; + _ = th.wr(p, focus, try std.fmt.bufPrint(&digits, "{d}\n", .{left})); + const r = th.wr(p, ctl, "Joincol\n"); + try testing.expectEqual(tree.Status.err, r.reply.status); + try testing.expect(std.mem.indexOf(u8, r.reply.ename, "tag and 2 rows") != null); + try testing.expectEqual(@as(usize, 2), p.ncol); + try testing.expect(pardes.layout.minimaFit(p)); +} + test "pane/new takes rows from a pane in another column before refusing ENOSPC" { const p = try pardes.Pardes.init(testing.allocator, .{ .tty_only = true, .cols = 160, .rows = 16 }); defer p.deinit(); |
