summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-07-28 12:28:27 -0300
committerGabriel Schneider <[email protected]>2026-08-01 15:02:07 -0300
commit2b76b47c8a087b81be139b552d9a41bb2006dcd3 (patch)
treeafadf20ee86877f1125cec171a78fec9c42fac35 /test
parent4b53a39743dc5962e985fcf059a1222538d57b3f (diff)
downloadpardes-2b76b47c8a087b81be139b552d9a41bb2006dcd3.tar.gz
pardes-2b76b47c8a087b81be139b552d9a41bb2006dcd3.zip
fixing some crashes
Diffstat (limited to 'test')
-rw-r--r--test/snapshots/badutf.golden62
-rw-r--r--test/snapshots/badutf.snap16
-rw-r--r--test/snapshots/reflow.golden25
-rw-r--r--test/snapshots/reflow.snap20
-rw-r--r--test/snapshots/tinywin.golden97
-rw-r--r--test/snapshots/tinywin.snap31
-rw-r--r--test/snapshots/yankpaste.golden31
-rw-r--r--test/snapshots/yankpaste.snap9
8 files changed, 291 insertions, 0 deletions
diff --git a/test/snapshots/badutf.golden b/test/snapshots/badutf.golden
new file mode 100644
index 00000000..3873f5e8
--- /dev/null
+++ b/test/snapshots/badutf.golden
@@ -0,0 +1,62 @@
+== snap badbytes grid=100x30 cursor=7,2
+|Kill Newcol Tutor Debug NextColor Dump
+| NOR /tmp/pardes-snap/badutf/cwd/bad.txt Save Del NOR /tmp/pardes-snap/badutf/cwd Del
+| 1 hello �� world
+| 2 latin-1 caf� tail bad.txt wide.txt
+| 3 truncated �� here
+| 4 end
+| 5
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap hscroll-midglyph grid=100x30 cursor=46,2
+|Kill Newcol Tutor Debug NextColor Dump
+| NOR /tmp/pardes-snap/badutf/cwd/wide.txt Save De NOR /tmp/pardes-snap/badutf/cwd Del
+| 1 ��語 日本語 日本語 日本語 tail
+| 2 bad.txt wide.txt
+| 3
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
diff --git a/test/snapshots/badutf.snap b/test/snapshots/badutf.snap
new file mode 100644
index 00000000..db9447b6
--- /dev/null
+++ b/test/snapshots/badutf.snap
@@ -0,0 +1,16 @@
+# Invalid UTF-8 must RENDER, never panic. Two sources, both ordinary use:
+# a file pane holds whatever bytes are on disk (latin-1, a truncated sequence,
+# an ELF opened by mistake), and the byte-column hscroll cuts a multi-byte
+# glyph in half by design. Undecodable bytes come out as U+FFFD, one per byte.
+file bad.txt hello \xff\xfe world\nlatin-1 caf\xe9 tail\ntruncated \xe6\x97 here\nend\n
+file wide.txt \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e tail\nsecond line\n
+start 30 100 bad.txt
+wait 8000 Kill Newcol
+stable 700 20000
+snap badbytes
+start 30 100 wide.txt
+wait 8000 Kill Newcol
+stable 700 20000
+key $
+stable 700 10000
+snap hscroll-midglyph
diff --git a/test/snapshots/reflow.golden b/test/snapshots/reflow.golden
new file mode 100644
index 00000000..e38657cf
--- /dev/null
+++ b/test/snapshots/reflow.golden
@@ -0,0 +1,25 @@
+== snap widened grid=200x24 cursor=4,19
+|Kill Newcol Tutor Debug NextColor Dump
+| TTY /tmp/pardes-snap/reflow/cwd Del
+| $ printf 'y%.0s' $(seq 1 3000); echo do''ne
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+| yyyyyyyyyyyyyyyyyyyyyyyyyyyyyydone
+| $
+|
+|
+|
+|
diff --git a/test/snapshots/reflow.snap b/test/snapshots/reflow.snap
new file mode 100644
index 00000000..0fa4a30d
--- /dev/null
+++ b/test/snapshots/reflow.snap
@@ -0,0 +1,20 @@
+# Widening a window whose scrollback holds WRAPPED lines, with the viewport
+# scrolled into history: ghostty's resizeCols unwraps, then grows rows while
+# the history viewport pin is still short, and its Debug-only PageList
+# integrity check panicked the whole app ("ViewportPinInsufficientRows").
+# build.zig now pins the ghostty dependency at ReleaseSafe so those
+# development-only checks are off — the app's own safety checks are unchanged.
+start 24 40
+wait 8000 $
+text printf 'y%.0s' $(seq 1 3000); echo do''ne
+key enter
+settle 2500
+stable 700 15000
+wheel up 10 10
+wheel up 10 10
+wheel up 10 10
+wheel up 10 10
+stable 500 8000
+resize 24 200
+stable 700 15000
+snap widened
diff --git a/test/snapshots/tinywin.golden b/test/snapshots/tinywin.golden
new file mode 100644
index 00000000..928241b2
--- /dev/null
+++ b/test/snapshots/tinywin.golden
@@ -0,0 +1,97 @@
+== snap stacked grid=100x30 cursor=4,14
+|Kill Newcol Tutor Debug NextColor Dump
+| TTY /tmp/pardes-snap/tinywin/cwd Del
+| $
+| NOR /tmp/pardes-snap/tinywin/cwd Del
+|
+|
+| NOR /tmp/pardes-snap/tinywin/cwd Del
+|
+|
+| NOR /tmp/pardes-snap/tinywin/cwd Del
+|
+|
+| NOR /tmp/pardes-snap/tinywin/cwd Del
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap shrunk grid=60x3 cursor=59,2
+|Kill Newcol Tutor Debug NextColor Dump
+| TTY /tmp/pardes-snap/tinywin/cwd Del
+| NOR /tmp/pardes-snap/tinywin/cwd Del
+== snap columns grid=100x30 cursor=79,3
+|Kill Newcol Tutor Debug NextColor Dump
+| TTY /tmp/pardes-snap/ti NOR /tmp/pardes-snap/ti NOR /tmp/pardes-snap/ti NOR /tmp/pardes-snap/ti
+| $
+| NOR /tmp/pardes-snap/ti
+|
+|
+| NOR /tmp/pardes-snap/ti
+|
+|
+| NOR /tmp/pardes-snap/ti
+|
+|
+| NOR /tmp/pardes-snap/ti
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap narrow grid=4x30 cursor=3,29
+|Kill
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
+|╎
diff --git a/test/snapshots/tinywin.snap b/test/snapshots/tinywin.snap
new file mode 100644
index 00000000..fab7f950
--- /dev/null
+++ b/test/snapshots/tinywin.snap
@@ -0,0 +1,31 @@
+# Shrinking the window past "one row per pane" used to panic: computeGeom gave
+# every pane in a column at least one row, so `y` walked off the bottom and
+# renderPane got a rect outside the surface (assert). Panes that no longer fit
+# now get h = 0 and simply do not render until the window grows back.
+start 30 100
+wait 8000 $
+key a-n
+settle 400
+key a-n
+settle 400
+key a-n
+settle 400
+key a-n
+stable 700 15000
+snap stacked
+resize 3 60
+stable 700 10000
+snap shrunk
+# ...and the same sideways: more columns than the window is wide
+resize 30 100
+stable 700 10000
+key space c n
+settle 600
+key space c n
+settle 600
+key space c n
+stable 700 15000
+snap columns
+resize 30 4
+stable 700 10000
+snap narrow
diff --git a/test/snapshots/yankpaste.golden b/test/snapshots/yankpaste.golden
index 213495dc..3f335d56 100644
--- a/test/snapshots/yankpaste.golden
+++ b/test/snapshots/yankpaste.golden
@@ -91,3 +91,34 @@
|
|
|
+== snap blankline grid=100x30 cursor=7,4
+|Kill Newcol Tutor Debug NextColor Dump
+| NOR /tmp/pardes-snap/yankpaste/cwd/f.txt Save De NOR /tmp/pardes-snap/yankpaste/cwd Del
+| 1 liline 1
+| 2 f.txt
+| 3
+| 4 line 2
+| 5 line 3
+| 6 line 2
+| 7 line 4
+| 8 line 2
+| 9 line 4
+| 10 line 5
+| 11
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
diff --git a/test/snapshots/yankpaste.snap b/test/snapshots/yankpaste.snap
index 38ca6e3b..96082ad6 100644
--- a/test/snapshots/yankpaste.snap
+++ b/test/snapshots/yankpaste.snap
@@ -26,3 +26,12 @@ stable 400 5000
key v l y p
stable 400 5000
snap charwise-inline
+# a BLANK line yanks as a bare "\n": the block is empty, lineCount says 0
+# lines, and every `n - 1` in the linewise paste used to underflow — panic on
+# y then p. It pastes as one empty line.
+key o
+key esc
+settle 700
+key y p
+stable 400 5000
+snap blankline