#!/bin/sh # Проверка того, что каждый быстрый щелчок по кнопке нижней полосы # доходит до неё. # # Кнопки там — переключатели: щелчок меняет вид полосы. Значит, N щелчков # подряд должны дать N переключений, и снимки с одинаковой чётностью # числа щелчков обязаны совпасть, с разной — разойтись. Раньше второй # щелчок подряд приходил как двойной и пропадал. # # Запуск (редактор уже должен идти на невидимом экране :99): # tests/buttonclicks.sh <окно> # где окно — из `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)"