Files
crkl/scripts/e2e-workflows.sh
ilia cbed90db21 Ship Circle 1.16.2: overlay assist, brand, and smoke tooling
VIP loop (circle → extract → Translate/Copy/Explain/Share/Vikunja),
lasso branding, ship docs, unit tests, and make smoke / launchd emu helpers.
2026-08-05 12:26:51 -04:00

90 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Smoke Crkl circle flows (integrations need tokens configured separately).
set -euo pipefail
ADB="${ANDROID_HOME:-/opt/homebrew/share/android-commandlinetools}/platform-tools/adb"
export ADB_BIN="$ADB"
SHOTS="$(cd "$(dirname "$0")/.." && pwd)/docs/demo-shots/workflows"
mkdir -p "$SHOTS"
tap() { "$ADB" shell input tap "$1" "$2"; }
swipe() { "$ADB" shell input swipe "$1" "$2" "$3" "$4" "$5"; }
shot() { "$ADB" exec-out screencap -p > "$SHOTS/$1.png"; echo " shot $1"; }
log_clear() { "$ADB" logcat -c || true; }
log_has() { "$ADB" logcat -d 2>/dev/null | grep -E "$1" >/dev/null; }
enable_a11y() {
"$ADB" shell settings put secure enabled_accessibility_services \
com.example.crkl/com.example.crkl.accessibility.CrklAccessibilityService
"$ADB" shell settings put secure accessibility_enabled 1
sleep 2
}
circle() {
python3 - "$1" "$2" "$3" "$4" <<'PY'
import math, subprocess, sys, os, time
ADB=os.environ["ADB_BIN"]
cx,cy,rx,ry=map(float,sys.argv[1:5])
n=36
pts=[(cx+rx*math.cos(2*math.pi*i/n), cy+ry*math.sin(2*math.pi*i/n)) for i in range(n+1)]
def me(a,x,y):
subprocess.check_call([ADB,"shell","input","motionevent",a,str(int(x)),str(int(y))])
me("DOWN",*pts[0]); time.sleep(0.02)
for p in pts[1:]:
me("MOVE",*p); time.sleep(0.01)
me("UP",*pts[-1])
PY
}
pass_n=0; fail_n=0
ok() { echo "PASS $1"; pass_n=$((pass_n+1)); }
bad() { echo "FAIL $1"; fail_n=$((fail_n+1)); }
echo "== prep =="
enable_a11y
"$ADB" shell am start -n com.example.crkl/.MainActivity >/dev/null
sleep 1
shot "00-home"
echo "== email extract =="
log_clear
"$ADB" shell am start -n com.example.crkl/.fixtures.TestFixturesActivity >/dev/null
enable_a11y
swipe 540 1600 540 900 300; sleep 0.4
tap 964 2200; sleep 1
circle 540 1700 400 350
sleep 3
shot "01-email"
log_has "Selection ready|Floating button clicked" && ok "email" || bad "email"
tap 900 1600; sleep 0.3
echo "== audio =="
log_clear
for _ in 1 2; do swipe 540 1900 540 500 300; sleep 0.2; done
tap 964 2200; sleep 1
circle 540 1750 400 280
sleep 6
shot "03-audio"
log_has "MediaAssistPipeline|audio_grocery" && ok "audio" || bad "audio"
echo "== mail inbox fixture =="
log_clear
"$ADB" shell am start -n com.example.crkl/.fixtures.TestFixturesActivity >/dev/null
enable_a11y
sleep 1
# Open mail inbox card if present; otherwise circle fixtures screen
tap 540 900; sleep 0.5
tap 964 2200; sleep 1
circle 540 1100 450 550
sleep 3
shot "05-mail-fixture"
log_has "Selection ready|Floating button clicked" && ok "mail-fixture" || bad "mail-fixture"
echo "== integrations screen =="
"$ADB" shell am start -n com.example.crkl/.IntegrationsActivity >/dev/null
sleep 1
shot "08-integrations"
ok "integrations-ui"
echo
echo "== results: $pass_n passed, $fail_n failed =="
echo "Configure Vikunja token + calendar permission in Integrations for live todo/calendar."
exit 0