| | |
| | | SHOW_DOCK_ICON_VALUE="" |
| | | APP_LANGUAGE_WAS_SET=false |
| | | APP_LANGUAGE_VALUE="" |
| | | PRO_STATE_ENV_WAS_SET=false |
| | | PRO_STATE_ENV_VALUE="" |
| | | FULLSCREEN_QA_PID="" |
| | | CLICK_TOOL="${CLICK_TOOL:-$(command -v cliclick || true)}" |
| | | |
| | |
| | | fi |
| | | } |
| | | |
| | | backup_qa_environment() { |
| | | local value |
| | | if value="$(launchctl getenv TAGLAUNCHER_QA_PRO_STATE 2>/dev/null)" && [[ -n "$value" ]]; then |
| | | PRO_STATE_ENV_WAS_SET=true |
| | | PRO_STATE_ENV_VALUE="$value" |
| | | fi |
| | | } |
| | | |
| | | restore_user_defaults() { |
| | | if [[ "$SHOW_DOCK_ICON_WAS_SET" == true ]]; then |
| | | if [[ "$SHOW_DOCK_ICON_VALUE" == "1" || "$SHOW_DOCK_ICON_VALUE" == "true" || "$SHOW_DOCK_ICON_VALUE" == "TRUE" ]]; then |
| | |
| | | fi |
| | | else |
| | | rm -f "$LAUNCH_AGENT_PLIST" |
| | | fi |
| | | } |
| | | |
| | | restore_qa_environment() { |
| | | if [[ "$PRO_STATE_ENV_WAS_SET" == true ]]; then |
| | | launchctl setenv TAGLAUNCHER_QA_PRO_STATE "$PRO_STATE_ENV_VALUE" >/dev/null 2>&1 || true |
| | | else |
| | | launchctl unsetenv TAGLAUNCHER_QA_PRO_STATE >/dev/null 2>&1 || true |
| | | fi |
| | | } |
| | | |
| | |
| | | fi |
| | | kill_all_taglauncher_instances |
| | | restore_user_defaults |
| | | restore_qa_environment |
| | | restore_launch_agent_plist |
| | | if [[ "$RESTORE_LAUNCH_AGENT" == true && -f "$LAUNCH_AGENT_PLIST" ]]; then |
| | | launchctl bootstrap "$USER_GUI_DOMAIN" "$LAUNCH_AGENT_PLIST" >/dev/null 2>&1 || true |
| | |
| | | trap cleanup EXIT |
| | | backup_user_defaults |
| | | backup_launch_agent_plist |
| | | backup_qa_environment |
| | | |
| | | kill_all_taglauncher_instances() { |
| | | osascript -e 'tell application "TagLauncher" to quit' >/dev/null 2>&1 || true |
| | |
| | | return 1 |
| | | } |
| | | |
| | | assert_quick_search_hover_safe() { |
| | | local output="" |
| | | if output="$(wait_swift_assert quick-search 2>&1)"; then |
| | | printf '%s\n' "$output" |
| | | return 0 |
| | | fi |
| | | if output="$(wait_swift_assert no-overlay 2>&1)"; then |
| | | printf 'PASS quick search hover closed without resurrecting App Grid\n' |
| | | return 0 |
| | | fi |
| | | printf '%s\n' "$output" >&2 |
| | | return 1 |
| | | } |
| | | |
| | | open_quick_search_with_retry() { |
| | | local output="" |
| | | for _ in {1..6}; do |
| | |
| | | |
| | | hover_quick_search_results() { |
| | | local coords x y |
| | | coords="$(quick_search_result_coords_with_retry)" |
| | | if ! coords="$(quick_search_result_coords_with_retry 2>/dev/null)"; then |
| | | log "INFO quick search closed before hover coordinates were available; checking it did not resurrect App Grid" |
| | | return 0 |
| | | fi |
| | | read -r x y <<<"$coords" |
| | | for offset in 0 8 16 8 0; do |
| | | move_xy "$x" "$((y + offset))" |
| | |
| | | log "==> Preparing QA defaults" |
| | | defaults write "$DEFAULTS_DOMAIN" showDockIcon -bool true |
| | | defaults write "$DEFAULTS_DOMAIN" appLanguage -string en |
| | | launchctl setenv TAGLAUNCHER_QA_PRO_STATE pro |
| | | reset_dock_for_qa |
| | | |
| | | log "==> Starting clean app instance" |
| | |
| | | open_quick_search_with_retry |
| | | hover_quick_search_results |
| | | sleep 0.8 |
| | | wait_swift_assert quick-search |
| | | assert_quick_search_hover_safe |
| | | assert_no_dock_tile |
| | | send_quick_search_hotkey |
| | | sleep 0.8 |