From 1fcf6730652d509e78de4b80888772083f5b124a Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Thu, 18 Jun 2026 22:04:51 +0800
Subject: [PATCH] Refine Quick Switch app hover visuals

---
 C1.source/Tests/AlignerCoreTests/AlignerCoreTests.swift |  215 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 215 insertions(+), 0 deletions(-)

diff --git a/C1.source/Tests/AlignerCoreTests/AlignerCoreTests.swift b/C1.source/Tests/AlignerCoreTests/AlignerCoreTests.swift
index b83efb7..6224f6e 100644
--- a/C1.source/Tests/AlignerCoreTests/AlignerCoreTests.swift
+++ b/C1.source/Tests/AlignerCoreTests/AlignerCoreTests.swift
@@ -377,6 +377,214 @@
         XCTAssertNil(WindowEnumerationPolicy.window(from: tinyRecord))
     }
 
+    func testFinderTabSpaceAttributionInheritsFullscreenHostSpaceForMatchingFrame() {
+        let finderApp = AlignerApp(
+            bundleIdentifier: "com.apple.finder",
+            name: "访达",
+            category: .finder,
+            processIdentifier: 74678
+        )
+        let frame = CGRect(x: 0, y: 0, width: 960, height: 1080)
+        let host = WindowEnumerationRecord(
+            id: 33112,
+            app: finderApp,
+            title: "下载",
+            size: frame.size,
+            frame: frame,
+            subrole: .standard,
+            isFullscreen: true,
+            hasAXBacking: true,
+            spaceIDs: [843]
+        )
+        let inactiveTab = WindowEnumerationRecord(
+            id: 42286,
+            app: finderApp,
+            title: "Appcache",
+            size: frame.size,
+            frame: frame,
+            subrole: .standard,
+            hasAXBacking: false,
+            isOnscreen: false
+        )
+
+        let attributed = FinderTabSpaceAttributionPolicy.attributedRecords([inactiveTab, host])
+
+        XCTAssertEqual(attributed[0].spaceIDs, [843])
+        XCTAssertTrue(attributed[0].isFullscreen)
+    }
+
+    func testFinderTabSpaceAttributionDoesNotGuessNoSpaceWindowsWithoutHostOverlap() {
+        let finderApp = AlignerApp(
+            bundleIdentifier: "com.apple.finder",
+            name: "访达",
+            category: .finder,
+            processIdentifier: 74678
+        )
+        let otherApp = AlignerApp(
+            bundleIdentifier: "com.example.Other",
+            name: "Other",
+            category: .generic,
+            processIdentifier: 74678
+        )
+        let hostFrame = CGRect(x: 0, y: 0, width: 960, height: 1080)
+        let farFrame = CGRect(x: 1200, y: 0, width: 500, height: 600)
+        let host = WindowEnumerationRecord(
+            id: 33112,
+            app: finderApp,
+            title: "下载",
+            size: hostFrame.size,
+            frame: hostFrame,
+            subrole: .standard,
+            isFullscreen: true,
+            hasAXBacking: true,
+            spaceIDs: [843]
+        )
+        let farFinderTab = WindowEnumerationRecord(
+            id: 42286,
+            app: finderApp,
+            title: "Appcache",
+            size: farFrame.size,
+            frame: farFrame,
+            subrole: .standard,
+            hasAXBacking: false,
+            isOnscreen: false
+        )
+        let nonFinderWindow = WindowEnumerationRecord(
+            id: 50222,
+            app: otherApp,
+            title: "Appcache",
+            size: hostFrame.size,
+            frame: hostFrame,
+            subrole: .standard,
+            hasAXBacking: false,
+            isOnscreen: false
+        )
+
+        let attributed = FinderTabSpaceAttributionPolicy.attributedRecords([farFinderTab, nonFinderWindow, host])
+
+        XCTAssertEqual(attributed[0].spaceIDs, [])
+        XCTAssertFalse(attributed[0].isFullscreen)
+        XCTAssertEqual(attributed[1].spaceIDs, [])
+        XCTAssertFalse(attributed[1].isFullscreen)
+    }
+
+    func testFinderTabSpaceAttributionHandlesFinderSplitViewHostsByFrame() {
+        let finderApp = AlignerApp(
+            bundleIdentifier: "com.apple.finder",
+            name: "访达",
+            category: .finder,
+            processIdentifier: 74678
+        )
+        let leftFrame = CGRect(x: 0, y: 0, width: 960, height: 1080)
+        let rightFrame = CGRect(x: 960, y: 0, width: 960, height: 1080)
+        let leftHost = WindowEnumerationRecord(
+            id: 33112,
+            app: finderApp,
+            title: "下载",
+            size: leftFrame.size,
+            frame: leftFrame,
+            subrole: .standard,
+            isFullscreen: true,
+            hasAXBacking: true,
+            spaceIDs: [843]
+        )
+        let rightHost = WindowEnumerationRecord(
+            id: 41557,
+            app: finderApp,
+            title: "应用程序",
+            size: rightFrame.size,
+            frame: rightFrame,
+            subrole: .standard,
+            isFullscreen: true,
+            hasAXBacking: true,
+            spaceIDs: [843]
+        )
+        let leftInactiveTab = WindowEnumerationRecord(
+            id: 42286,
+            app: finderApp,
+            title: "Appcache",
+            size: leftFrame.size,
+            frame: leftFrame,
+            subrole: .standard,
+            hasAXBacking: false,
+            isOnscreen: false
+        )
+        let rightInactiveTab = WindowEnumerationRecord(
+            id: 61385,
+            app: finderApp,
+            title: "build",
+            size: rightFrame.size,
+            frame: rightFrame,
+            subrole: .standard,
+            hasAXBacking: false,
+            isOnscreen: false
+        )
+
+        let attributed = FinderTabSpaceAttributionPolicy.attributedRecords([
+            leftInactiveTab,
+            rightInactiveTab,
+            leftHost,
+            rightHost
+        ])
+
+        XCTAssertEqual(attributed[0].spaceIDs, [843])
+        XCTAssertEqual(attributed[1].spaceIDs, [843])
+        XCTAssertTrue(attributed[0].isFullscreen)
+        XCTAssertTrue(attributed[1].isFullscreen)
+    }
+
+    func testFinderTabSpaceAttributionRejectsContainingHostsWithDifferentSize() {
+        let finderApp = AlignerApp(
+            bundleIdentifier: "com.apple.finder",
+            name: "访达",
+            category: .finder,
+            processIdentifier: 74678
+        )
+        let splitRightFrame = CGRect(x: 960, y: 0, width: 960, height: 1080)
+        let fullDisplayFrame = CGRect(x: 0, y: 0, width: 1920, height: 1080)
+        let splitHost = WindowEnumerationRecord(
+            id: 33112,
+            app: finderApp,
+            title: "下载",
+            size: splitRightFrame.size,
+            frame: splitRightFrame,
+            subrole: .standard,
+            isFullscreen: true,
+            hasAXBacking: true,
+            spaceIDs: [843]
+        )
+        let containingHost = WindowEnumerationRecord(
+            id: 41557,
+            app: finderApp,
+            title: "应用程序",
+            size: fullDisplayFrame.size,
+            frame: fullDisplayFrame,
+            subrole: .standard,
+            isFullscreen: true,
+            hasAXBacking: true,
+            spaceIDs: [1112]
+        )
+        let inactiveTab = WindowEnumerationRecord(
+            id: 42286,
+            app: finderApp,
+            title: "Appcache",
+            size: splitRightFrame.size,
+            frame: splitRightFrame,
+            subrole: .standard,
+            hasAXBacking: false,
+            isOnscreen: false
+        )
+
+        let attributed = FinderTabSpaceAttributionPolicy.attributedRecords([
+            inactiveTab,
+            containingHost,
+            splitHost
+        ])
+
+        XCTAssertEqual(attributed[0].spaceIDs, [843])
+        XCTAssertTrue(attributed[0].isFullscreen)
+    }
+
     func testWindowEnumerationPolicyKeepsMinimizedAndFullscreenCGOnlyOffscreenWindows() {
         let minimized = makeWindowRecord(
             title: "Minimized Document.md",
@@ -499,6 +707,13 @@
         XCTAssertTrue(templates.allSatisfy { $0.contentRows > 0 })
     }
 
+    func testSkeletonThumbnailPaletteStaysQuietForFallbackState() {
+        XCTAssertLessThanOrEqual(SkeletonThumbnailPalette.headerAlpha, 0.10)
+        XCTAssertLessThanOrEqual(SkeletonThumbnailPalette.contentRowAlpha, 0.08)
+        XCTAssertLessThanOrEqual(SkeletonThumbnailPalette.accentStripeAlpha, 0.30)
+        XCTAssertGreaterThanOrEqual(SkeletonThumbnailPalette.titleBandAlpha, 0.80)
+    }
+
     @MainActor
     func testNativeSkeletonThumbnailProviderProducesValidImages() {
         let provider = NativeSkeletonThumbnailProvider()

--
Gitblit v1.9.3