| | |
| | | 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}" |
| | | WINDOW_WAIT="${ALIGNER_ROUND1_MOUSE_WINDOW_WAIT:-6.0}" |
| | | |
| | | fail() { |
| | | echo "Round01 mouse interaction fixture QA failed: $*" >&2 |
| | |
| | | require(hovered_items[0].get("index") == expected_app_group_index, "hovered window card must link to App Shelf") |
| | | |
| | | hovered_segments = [segment for segment in segments if "hover" in segment.get("visualStates", [])] |
| | | require(len(hovered_segments) == 1, "hovered window card must link to exactly one Space Lane segment") |
| | | require(hovered_segments[0].get("windowCount", 0) > 0, "hovered Space Lane segment must be a real space with windows") |
| | | require(root.get("hoveredSpaceID") == expected_space_id, "root hoveredSpaceID must match clicked card primarySpaceID") |
| | | space_focused_segments = [segment for segment in segments if "spaceFocus" in segment.get("visualStates", [])] |
| | | window_associated_segments = [segment for segment in segments if segment.get("isWindowAssociated") is True] |
| | | require(root.get("hoverTargetKind") == "window", "hovered Waterfall card must report window hover target") |
| | | require(root.get("activeSpaceFocusID") is None, "hovered Waterfall card must not create Space Lane focus") |
| | | require(len(hovered_segments) == 0, "hovered Waterfall card must not mark a Space Lane segment as hovered") |
| | | require(len(space_focused_segments) == 0, "hovered Waterfall card must not mark a Space Lane segment as focused") |
| | | require(root.get("hoveredSpaceID") == expected_space_id, "root hoveredSpaceID may still mirror clicked card primarySpaceID for window context") |
| | | require(root.get("windowHoverAssociatedSpaceID") == expected_space_id, "hovered Waterfall card must expose its Space as windowHoverAssociatedSpaceID") |
| | | require(len(window_associated_segments) == 1, "hovered Waterfall card must highlight exactly one associated Space segment") |
| | | require(window_associated_segments[0].get("spaceID") == expected_space_id, "window-associated Space segment must match hovered card Space") |
| | | require("windowAssociated" in window_associated_segments[0].get("visualStates", []), "window-associated Space segment must expose windowAssociated") |
| | | require("focused" not in window_associated_segments[0].get("visualStates", []), "window-associated Space segment must not expose focused") |
| | | |
| | | frame = selected_cards[0].get("visibleFrame", {}) |
| | | selected_card_visual_overflow_tolerance = 2.5 |
| | | require(frame.get("x", -1) >= 0, "clicked Waterfall card must be horizontally visible") |
| | | require(frame.get("x", 0) + frame.get("width", 0) <= root.get("waterfallVisibleWidth", 0) + 1, "clicked card must fit in visible Waterfall width") |
| | | require( |
| | | frame.get("x", 0) + frame.get("width", 0) |
| | | <= root.get("waterfallVisibleWidth", 0) + selected_card_visual_overflow_tolerance, |
| | | "clicked card must fit in visible Waterfall width" |
| | | ) |
| | | |
| | | print(json.dumps({ |
| | | "quickSwitchVisible": report.get("quickSwitchVisible"), |
| | |
| | | "lastActivationResult": report.get("lastActivationResult"), |
| | | "waterfallScrollOffset": root.get("waterfallScrollOffset"), |
| | | "hoveredSpaceID": root.get("hoveredSpaceID"), |
| | | "hoveredSpaceLabel": hovered_segments[0].get("label") |
| | | "windowHoverAssociatedSpaceID": root.get("windowHoverAssociatedSpaceID"), |
| | | "hoverTargetKind": root.get("hoverTargetKind"), |
| | | "activeSpaceFocusID": root.get("activeSpaceFocusID") |
| | | }, indent=2, ensure_ascii=False)) |
| | | PY |
| | | } |
| | |
| | | "$APP/Contents/MacOS/Aligner" \ |
| | | --round0-skip-permissions \ |
| | | --round01-open-quick-switch \ |
| | | --round01-waterfall-view-mode=vertical \ |
| | | --round01-fixture-app-count="$FIXTURE_APP_COUNT" \ |
| | | --round01-fixture-windows-per-app="$FIXTURE_WINDOWS_PER_APP" \ |
| | | --round01-disable-screenshot-refresh \ |
| | |
| | | "$APP/Contents/MacOS/Aligner" \ |
| | | --round0-skip-permissions \ |
| | | --round01-open-quick-switch \ |
| | | --round01-waterfall-view-mode=vertical \ |
| | | --round01-fixture-app-count="$FIXTURE_APP_COUNT" \ |
| | | --round01-fixture-windows-per-app="$FIXTURE_WINDOWS_PER_APP" \ |
| | | --round01-disable-screenshot-refresh \ |