| | |
| | | APP_ONLY_REPORT="$BUILD_REPORT_ROOT/round01-mouse-app-only-fixture-report.json" |
| | | FIXTURE_APP_COUNT="${ALIGNER_ROUND1_MOUSE_FIXTURE_APP_COUNT:-8}" |
| | | FIXTURE_WINDOWS_PER_APP="${ALIGNER_ROUND1_MOUSE_FIXTURE_WINDOWS_PER_APP:-8}" |
| | | MOUSE_SEQUENCE="${ALIGNER_ROUND1_MOUSE_SEQUENCE:-hover-card:1:7,hover-app:5,click-app:7,hover-card:7:0,click-card:7:0}" |
| | | MOUSE_SEQUENCE="${ALIGNER_ROUND1_MOUSE_SEQUENCE:-hover-card:1:7,hover-app:5,hover-card:7:0,click-card:7:0}" |
| | | APP_ONLY_MOUSE_SEQUENCE="${ALIGNER_ROUND1_MOUSE_APP_ONLY_SEQUENCE:-hover-app:5,click-app:7}" |
| | | REPORT_WAIT="${ALIGNER_ROUND1_MOUSE_REPORT_WAIT:-6.0}" |
| | | WINDOW_WAIT="${ALIGNER_ROUND1_MOUSE_WINDOW_WAIT:-3.0}" |
| | |
| | | } |
| | | |
| | | wait_for_committed_hidden_report() { |
| | | /usr/bin/python3 - "$REPORT" "$REPORT_WAIT" <<'PY' |
| | | local report="${1:-$REPORT}" |
| | | /usr/bin/python3 - "$report" "$REPORT_WAIT" <<'PY' |
| | | import json |
| | | import sys |
| | | import time |
| | |
| | | target_app_group_index = int(last_click_parts[1]) |
| | | |
| | | require(report.get("snapshotLoaded") is True, "app-only snapshotLoaded must be true") |
| | | require(report.get("quickSwitchVisible") is True, "hover/click App Shelf must not close Quick Switch") |
| | | require(report.get("lastCommittedWindowID") is None, "hover/click App Shelf must not commit a window") |
| | | require(report.get("quickSwitchVisible") is False, "click App Shelf must close Quick Switch after committing its first window") |
| | | require(root.get("mouseCommandsApplied") == mouse_sequence, "app-only mouse sequence must be applied in order") |
| | | require(0 <= target_app_group_index < fixture_app_count, "click-app target App group must be inside fixture range") |
| | | target_column = columns[target_app_group_index] |
| | | target_first_card = target_column.get("cards", [])[0] |
| | | expected_window_id = target_first_card.get("windowID") |
| | | require(root.get("selectedAppGroupIndex") == target_app_group_index, "click App Shelf must move keyboard selection to target App") |
| | | require(root.get("selectedWindowIndex") == target_first_card.get("windowIndex"), "click App Shelf must select the first target-column window") |
| | | require(root.get("selectedWindowID") == target_first_card.get("windowID"), "click App Shelf must focus the first target-column window") |
| | | require(root.get("lastCommittedWindowID") == expected_window_id, "click App Shelf must commit the first target-column window") |
| | | require(report.get("lastCommittedWindowID") == expected_window_id, "session must surface the App Shelf commit") |
| | | require(root.get("lastCommitSource") == "mouse", "root App Shelf commit source must be mouse") |
| | | require(report.get("lastCommitSource") == "mouse", "session App Shelf commit source must be mouse") |
| | | require(report.get("lastActivationWindowID") == expected_window_id, "App Shelf activation window must be the first target-column window") |
| | | require(report.get("lastActivationResult") == "activated", "debug activation must activate the App Shelf first window") |
| | | require(root.get("lastClickedAppGroupIndex") == target_app_group_index, "click App Shelf must record target App group") |
| | | require(root.get("lastAppShelfClickChangedSelection") is True, "click App Shelf must explicitly report selection moved to target column") |
| | | require(root.get("waterfallScrollOffset", 0) > 0, "clicking far-right App Shelf item must position its Waterfall column") |
| | |
| | | print(json.dumps({ |
| | | "appOnlyQuickSwitchVisible": report.get("quickSwitchVisible"), |
| | | "selectedAppGroupIndex": root.get("selectedAppGroupIndex"), |
| | | "lastCommittedWindowID": root.get("lastCommittedWindowID"), |
| | | "lastActivationResult": report.get("lastActivationResult"), |
| | | "lastClickedAppGroupIndex": root.get("lastClickedAppGroupIndex"), |
| | | "waterfallScrollOffset": root.get("waterfallScrollOffset") |
| | | }, indent=2, ensure_ascii=False)) |
| | |
| | | require(report.get("lastActivationWindowID") == expected_window_id, "session activation window must match clicked card") |
| | | require(report.get("lastActivationResult") == "activated", "debug activation must activate a non-minimized clicked card") |
| | | |
| | | require(root.get("lastClickedAppGroupIndex") == expected_app_group_index, "clicking App Shelf must record target App group") |
| | | require(root.get("lastAppShelfClickChangedSelection") is True, "clicking App Shelf must move keyboard selection before the card click") |
| | | require(root.get("waterfallScrollable") is True, "fixture must make Waterfall horizontally scrollable") |
| | | require(root.get("waterfallScrollOffset", 0) > 0, "clicking far-right App must scroll its Waterfall column into view") |
| | | require(root.get("waterfallScrollOffset", 0) > 0, "clicking far-right card must scroll its Waterfall column into view") |
| | | |
| | | selected_cards = [card for column in columns for card in column.get("cards", []) if card.get("isSelected") is True] |
| | | require(len(selected_cards) == 1, "Waterfall must expose exactly one selected card after click") |
| | |
| | | --round01-fixture-app-count="$FIXTURE_APP_COUNT" \ |
| | | --round01-fixture-windows-per-app="$FIXTURE_WINDOWS_PER_APP" \ |
| | | --round01-disable-screenshot-refresh \ |
| | | --round01-debug-window-activation \ |
| | | --round01-debug-mouse-sequence="$APP_ONLY_MOUSE_SEQUENCE" \ |
| | | --round01-quick-switch-report="$APP_ONLY_REPORT" & |
| | | |
| | |
| | | } |
| | | trap cleanup EXIT |
| | | |
| | | wait_for_visible_loaded_report "$APP_ONLY_REPORT" |
| | | wait_for_committed_hidden_report "$APP_ONLY_REPORT" |
| | | assert_app_only_report |
| | | wait_for_window_logic "$WINDOW_WAIT" --expect-quick-switch >&2 |
| | | wait_for_window_logic "$WINDOW_WAIT" --expect-no-quick-switch >&2 |
| | | kill "$APP_PID" 2>/dev/null || true |
| | | wait "$APP_PID" 2>/dev/null || true |
| | | stop_current_aligner |