Files
tmux/regress/image-resize-height.sh
2026-10-16 17:26:41 +01:00

56 lines
2.0 KiB
Bash

#!/bin/sh
# Height reduction discards image rows without leaving spans behind.
PATH=/bin:/usr/bin
TERM=screen
export TERM
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
command -v python3 >/dev/null || exit 101
python3 -B - "$TEST_TMUX" <<'PY'
import sys
from image_test import image_test, kitty, sixel
from image_terminal import Terminal
def snapshot(test, client, expected, sy):
"""Check image pixels after a full redraw at the current height."""
test.redraw()
terminal = Terminal(sy=sy)
terminal.feed(client.data)
terminal.check(expected)
red, green = (255, 0, 0), (0, 255, 0)
for protocol in ('kitty', 'sixel'):
if protocol == 'kitty':
image = kitty('a=T,f=32,s=1,v=1,c=2,r=5,C=1', bytes((*red, 255)))
lower = kitty('a=T,f=32,s=1,v=1,c=2,r=1,C=1', bytes((*green, 255)))
else:
image = sixel(16, 80, [(100, 0, 0)], [0] * (16 * 80))
lower = sixel(16, 16, [(0, 100, 0)], [0] * (16 * 16))
for alternate in (False, True):
with image_test(sys.argv[1]) as test:
client = test.attach()
if alternate:
test.emit(b'\033[?1049h')
test.emit(b'\033[9;3H' + image + b'\033[14;3H' + lower +
b'\033[H')
expected = {(x, y): red for y in range(8 * 16, 13 * 16)
for x in range(16, 32)}
expected.update({(x, y): green for y in range(13 * 16, 14 * 16)
for x in range(16, 32)})
snapshot(test, client, expected, 16)
# One placement is clipped and the other is discarded entirely.
test.resize(client, 40, 10)
snapshot(test, client, {(x, y): red for y in range(8 * 16, 10 * 16)
for x in range(16, 32)}, 10)
# Discarded rows must not keep the remaining placement fixed.
test.emit(b'\033[8;10r\033[S\033[r')
snapshot(test, client, {(x, y): red for y in range(7 * 16, 9 * 16)
for x in range(16, 32)}, 10)
PY