summaryrefslogtreecommitdiff
path: root/src/detached/client.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/detached/client.zig')
-rw-r--r--src/detached/client.zig26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/detached/client.zig b/src/detached/client.zig
index 9481cd54..a027c0bb 100644
--- a/src/detached/client.zig
+++ b/src/detached/client.zig
@@ -1266,8 +1266,32 @@ test "detached session: a frontend that stops reading is dropped, not waited for
// for, which is the whole claim: one slow peer costs its own slot.
try testing.expect(h.session.clients[0].attached);
try testing.expect(!h.core.quit);
+ // A message is a tagline band now, not a grid run, so "still being drawn
+ // for" is checked on the layers the frontend decoded rather than on nruns.
try good.send(.{ .event = .{ .command = "Msg still here" } });
- try testing.expect((try h.pumpUntilChange(&good)).nruns > 0);
+ try testing.expect(try pumpUntilNotice(&h, &good, "still here"));
+}
+
+/// Pump until this client has a notice band carrying `want`.
+fn pumpUntilNotice(h: *Harness, c: *Client, want: []const u8) !bool {
+ var line: [256]u8 = undefined;
+ for (0..Harness.rounds) |_| {
+ try h.pump();
+ try c.wait(5);
+ while (try c.next()) |_| {}
+ for (&c.tag_layers) |*layer| {
+ if (layer.cols == 0 or layer.kind != .notice) continue;
+ var n: usize = 0;
+ for (layer.cells[0..layer.cols]) |cell| {
+ const g = cell.grapheme();
+ if (n + g.len > line.len) break;
+ @memcpy(line[n..][0..g.len], g);
+ n += g.len;
+ }
+ if (std.mem.indexOf(u8, line[0..n], want) != null) return true;
+ }
+ }
+ return false;
}
/// A connected socket with nothing said on it yet, for the tests whose peer is