56 lines
2.7 KiB
Bash
56 lines
2.7 KiB
Bash
|
|
#!/bin/sh
|
|||
|
|
# Проверка того, что каждый быстрый щелчок по кнопке нижней полосы
|
|||
|
|
# доходит до неё.
|
|||
|
|
#
|
|||
|
|
# Кнопки там — переключатели: щелчок меняет вид полосы. Значит, N щелчков
|
|||
|
|
# подряд должны дать N переключений, и снимки с одинаковой чётностью
|
|||
|
|
# числа щелчков обязаны совпасть, с разной — разойтись. Раньше второй
|
|||
|
|
# щелчок подряд приходил как двойной и пропадал.
|
|||
|
|
#
|
|||
|
|
# Запуск (редактор уже должен идти на невидимом экране :99):
|
|||
|
|
# tests/buttonclicks.sh <окно> <x> <y>
|
|||
|
|
# где окно — из `DISPLAY=:99 xdotool search --name nlve`, а x и y —
|
|||
|
|
# точка внутри кнопки.
|
|||
|
|
set -e
|
|||
|
|
cd "$(dirname "$0")/.."
|
|||
|
|
WIN=$1
|
|||
|
|
X=$2
|
|||
|
|
Y=$3
|
|||
|
|
DISP=${DISP:-:99}
|
|||
|
|
SHOT=${SHOT:-test/кадры-кнопок}
|
|||
|
|
rm -rf "$SHOT"; mkdir -p "$SHOT"
|
|||
|
|
|
|||
|
|
# Снимается низ окна: там и полоса сообщений, и сами кнопки.
|
|||
|
|
H=$(DISPLAY=$DISP xwininfo -id "$WIN" | awk '/Height:/ {print $2}')
|
|||
|
|
W=$(DISPLAY=$DISP xwininfo -id "$WIN" | awk '/Width:/ {print $2}')
|
|||
|
|
CROP="${W}x200+0+$((H - 200))"
|
|||
|
|
|
|||
|
|
# Мышь уводится с кнопки перед снимком: под курсором подсказка идёт в
|
|||
|
|
# строку состояния, и её текст сам по себе отличал бы снимки.
|
|||
|
|
snap() {
|
|||
|
|
DISPLAY=$DISP xdotool mousemove $((W / 2)) $((H / 3))
|
|||
|
|
sleep 0.4
|
|||
|
|
DISPLAY=$DISP import -window "$WIN" -crop "$CROP" +repage "$SHOT/$1.png"
|
|||
|
|
}
|
|||
|
|
same() { compare -metric AE "$SHOT/$1.png" "$SHOT/$2.png" null: 2>&1 | cut -d' ' -f1; }
|
|||
|
|
|
|||
|
|
snap base
|
|||
|
|
TOTAL=0
|
|||
|
|
for N in 1 2 3 4 5; do
|
|||
|
|
I=0
|
|||
|
|
while [ $I -lt $N ]; do
|
|||
|
|
DISPLAY=$DISP xdotool mousemove "$X" "$Y" click 1
|
|||
|
|
I=$((I + 1))
|
|||
|
|
sleep 0.12
|
|||
|
|
done
|
|||
|
|
TOTAL=$((TOTAL + N))
|
|||
|
|
sleep 1.2
|
|||
|
|
snap "после$TOTAL"
|
|||
|
|
echo "залпом $N, всего щелчков $TOTAL: отличий от исходной $(same base "после$TOTAL")"
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
# Полоса сообщений прирастает строками сама по себе, поэтому сверяемся не
|
|||
|
|
# с исходной картинкой, а снимками между собой.
|
|||
|
|
echo " 3 и 15 щелчков (оба нечётные, должны совпасть): $(same после3 после15)"
|
|||
|
|
echo " 6 и 10 щелчков (оба чётные, должны совпасть): $(same после6 после10)"
|
|||
|
|
echo " 6 и 15 щелчков (чётное и нечётное, должны разойтись): $(same после6 после15)"
|