From d57d1d2395c9f80ecdb7be4cd58858b299f95c42 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Mon, 2 Dec 2024 09:39:21 -0500 Subject: [PATCH] terminal: failing tracked pin test on fullReset --- src/terminal/PageList.zig | 6 +++++- src/terminal/Terminal.zig | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/terminal/PageList.zig b/src/terminal/PageList.zig index 70f972ebe..3d67278ba 100644 --- a/src/terminal/PageList.zig +++ b/src/terminal/PageList.zig @@ -2356,7 +2356,11 @@ pub fn countTrackedPins(self: *const PageList) usize { /// Checks if a pin is valid for this pagelist. This is a very slow and /// expensive operation since we traverse the entire linked list in the /// worst case. Only for runtime safety/debug. -fn pinIsValid(self: *const PageList, p: Pin) bool { +pub fn pinIsValid(self: *const PageList, p: Pin) bool { + // This is very slow so we want to ensure we only ever + // call this during slow runtime safety builds. + comptime assert(build_config.slow_runtime_safety); + var it = self.pages.first; while (it) |node| : (it = node.next) { if (node != p.node) continue; diff --git a/src/terminal/Terminal.zig b/src/terminal/Terminal.zig index a2cf510b1..0a2914f10 100644 --- a/src/terminal/Terminal.zig +++ b/src/terminal/Terminal.zig @@ -10575,6 +10575,16 @@ test "Terminal: fullReset default modes" { try testing.expect(t.modes.get(.grapheme_cluster)); } +test "Terminal: fullReset tracked pins" { + var t = try init(testing.allocator, .{ .cols = 80, .rows = 80 }); + defer t.deinit(testing.allocator); + + // Create a tracked pin + const p = try t.screen.pages.trackPin(t.screen.cursor.page_pin.*); + t.fullReset(); + try testing.expect(t.screen.pages.pinIsValid(p.*)); +} + // https://github.com/mitchellh/ghostty/issues/272 // This is also tested in depth in screen resize tests but I want to keep // this test around to ensure we don't regress at multiple layers.