| | |
| | | segments = root.get("spaceLaneSegments", []) |
| | | cards = [card for column in columns for card in column.get("cards", [])] |
| | | segment_by_id = {segment.get("spaceID"): segment for segment in segments} |
| | | visible_frames = [column.get("visibleFrame", {}) for column in columns] |
| | | visible_min_x = min(frame.get("x", 0) for frame in visible_frames) |
| | | visible_max_x = max(frame.get("x", 0) + frame.get("width", 0) for frame in visible_frames) |
| | | left_blank_width = max(0, visible_min_x) |
| | | right_blank_width = max(0, root.get("waterfallVisibleWidth", 0) - visible_max_x) |
| | | |
| | | require(report.get("snapshotLoaded") is True, "snapshot must load") |
| | | require(report.get("quickSwitchVisible") is True, "Quick Switch must stay visible after filtering") |
| | |
| | | require(report.get("appShelfNames") == ["Alpha Space App", "Beta Space App"], "App Shelf must only include A1 apps") |
| | | require(root.get("appShelfNames") == ["Alpha Space App", "Beta Space App"], "root App Shelf must only include A1 apps") |
| | | require(root.get("waterfallColumnNames") == ["Alpha Space App", "Beta Space App"], "Waterfall must only include A1 columns") |
| | | require(abs(left_blank_width - right_blank_width) <= 2.0, "filtered Waterfall columns must be centered as one content block") |
| | | require(report.get("windowCount") == 3, "A1 must expose exactly three windows") |
| | | require(len(cards) == 3, "A1 card count must be three") |
| | | require(all(card.get("primarySpaceID") == 1 for card in cards), "every visible card must belong to A1") |
| | |
| | | "lockedBorderWidth": segment_by_id[1].get("borderWidth"), |
| | | "lockedShadowOpacity": segment_by_id[1].get("shadowOpacity"), |
| | | "lockedShadowRadius": segment_by_id[1].get("shadowRadius"), |
| | | "waterfallLeftBlankWidth": left_blank_width, |
| | | "waterfallRightBlankWidth": right_blank_width, |
| | | "fadeOutLayerCount": root.get("projectionTransitionFadeOutLayerCount"), |
| | | "transitionDurationMilliseconds": root.get("projectionTransitionDurationMilliseconds") |
| | | }, indent=2, ensure_ascii=False)) |