mirror of
https://github.com/tmux/tmux.git
synced 2026-10-15 07:44:24 +00:00
Image regress tests.
This commit is contained in:
74
regress/image-lifecycle.sh
Executable file
74
regress/image-lifecycle.sh
Executable file
@@ -0,0 +1,74 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Stress placement cleanup and copied references, restore image rows after
|
||||
# height changes, and switch between graphical and fallback output.
|
||||
|
||||
PATH=/bin:/usr/bin
|
||||
TERM=screen
|
||||
export TERM
|
||||
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
||||
|
||||
python3 -B - "$TEST_TMUX" <<'PY'
|
||||
import sys
|
||||
from image_test import image_test, sixel, check_image
|
||||
from image_terminal import Terminal
|
||||
|
||||
palette = [(100, 0, 0), (0, 100, 0)]
|
||||
rgb = [(255, 0, 0), (0, 255, 0)]
|
||||
wire = sixel(16, 32, palette,
|
||||
[y >= 16 for y in range(32) for x in range(16)])
|
||||
expected = [rgb[y >= 16] for y in range(32) for x in range(16)]
|
||||
|
||||
with image_test(sys.argv[1], sy=6) as test:
|
||||
client = test.attach()
|
||||
test.emit(wire)
|
||||
test.resize(client, 40, 2)
|
||||
test.redraw()
|
||||
images = client.images()
|
||||
assert len(images) == 1, [im[:2] for im in images]
|
||||
check_image(images[0], 16, 16, [rgb[1]] * (16 * 16))
|
||||
test.resize(client, 40, 6)
|
||||
test.redraw()
|
||||
assert len(client.images()) == 1
|
||||
check_image(client.images()[0], 16, 32, expected)
|
||||
|
||||
# Changing pixel size can change the selected backend without reattaching.
|
||||
with image_test(sys.argv[1]) as test:
|
||||
client = test.attach()
|
||||
test.emit(wire)
|
||||
for _ in range(3):
|
||||
test.resize(client, 40, 16, cw=0, ch=0)
|
||||
test.redraw()
|
||||
assert not client.images(), 'SIXEL backend retained without pixel size'
|
||||
terminal = Terminal()
|
||||
terminal.feed(client.data)
|
||||
assert terminal.cells[0, 0][0] == '\u2584', terminal.cells[0, 0]
|
||||
test.resize(client, 40, 16)
|
||||
test.redraw()
|
||||
assert len(client.images()) == 1, 'SIXEL backend not restored'
|
||||
check_image(client.images()[0], 16, 32, expected)
|
||||
|
||||
# Keep one server alive through many overlapping placements, split spans,
|
||||
# scrolling and clears, with copy-mode snapshots and resizes between batches.
|
||||
with image_test(sys.argv[1]) as test:
|
||||
client = test.attach()
|
||||
overlay = sixel(16, 32, palette,
|
||||
[None if x % 2 else 1 for y in range(32) for x in range(16)])
|
||||
cycle = (b'\033[2J\033[H' + wire + b'\033[H' + overlay +
|
||||
b'\033[1;2H\033[@\033[P\033[X\033[2;1H\033[L\033[M\033[2S')
|
||||
for _ in range(10):
|
||||
test.emit(cycle * 8 + b'\033[2J\033[H' + wire)
|
||||
test.run('copy-mode')
|
||||
test.run('send-keys', '-X', 'cancel')
|
||||
test.resize(client, 1, 16)
|
||||
test.resize(client, 40, 16)
|
||||
test.redraw()
|
||||
terminal = Terminal()
|
||||
terminal.feed(client.data)
|
||||
terminal.check({(x, y): expected[y * 16 + x]
|
||||
for y in range(32) for x in range(16)})
|
||||
test.run('clear-history')
|
||||
test.emit(b'\033[2J')
|
||||
test.redraw()
|
||||
assert not client.images(), 'images survived the final clear'
|
||||
PY
|
||||
Reference in New Issue
Block a user