From 86f0b4bd20cdec86dfb5bdb7978d1f6ff4af111a Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Fri, 14 Aug 2026 22:41:54 +0800
Subject: [PATCH] [verified] feat: export performance diagnostics
---
C1.source/Tests/AlignerCoreTests/AlignerCoreTests.swift | 328 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 327 insertions(+), 1 deletions(-)
diff --git a/C1.source/Tests/AlignerCoreTests/AlignerCoreTests.swift b/C1.source/Tests/AlignerCoreTests/AlignerCoreTests.swift
index b83efb7..c0197df 100644
--- a/C1.source/Tests/AlignerCoreTests/AlignerCoreTests.swift
+++ b/C1.source/Tests/AlignerCoreTests/AlignerCoreTests.swift
@@ -6,7 +6,91 @@
func testAppIdentity() {
XCTAssertEqual(AlignerAppInfo.name, "Aligner")
XCTAssertEqual(AlignerAppInfo.bundleIdentifier, "com.ar.Aligner")
- XCTAssertEqual(AlignerAppInfo.minimumMacOSVersion, "26.0")
+ XCTAssertEqual(AlignerAppInfo.minimumMacOSVersion, "14.0")
+ }
+
+ func testPerformanceDiagnosticArchiveWriterCreatesInspectableArchive() throws {
+ let fileManager = FileManager.default
+ let rootURL = fileManager.temporaryDirectory.appendingPathComponent(UUID().uuidString, isDirectory: true)
+ let logURL = rootURL.appendingPathComponent("events.log")
+ let archiveURL = rootURL.appendingPathComponent("diagnostics.zip")
+ let extractionURL = rootURL.appendingPathComponent("extracted", isDirectory: true)
+ defer { try? fileManager.removeItem(at: rootURL) }
+
+ try fileManager.createDirectory(at: rootURL, withIntermediateDirectories: true)
+ try "event=quickSwitch.snapshot.success durationMilliseconds=42\n".write(to: logURL, atomically: true, encoding: .utf8)
+ let summary = try JSONSerialization.data(withJSONObject: ["schemaVersion": 1], options: [])
+
+ _ = try PerformanceDiagnosticArchiveWriter.write(
+ to: archiveURL,
+ summaryJSON: summary,
+ eventLogURLs: [logURL]
+ )
+ XCTAssertTrue(fileManager.fileExists(atPath: archiveURL.path))
+
+ let unzipProcess = Process()
+ unzipProcess.executableURL = URL(fileURLWithPath: "/usr/bin/ditto")
+ unzipProcess.arguments = ["-x", "-k", archiveURL.path, extractionURL.path]
+ try unzipProcess.run()
+ unzipProcess.waitUntilExit()
+ XCTAssertEqual(unzipProcess.terminationStatus, 0)
+ let contentsURL = extractionURL.appendingPathComponent("Aligner-Diagnostics", isDirectory: true)
+ XCTAssertTrue(fileManager.fileExists(atPath: contentsURL.appendingPathComponent("summary.json").path))
+ XCTAssertTrue(fileManager.fileExists(atPath: contentsURL.appendingPathComponent("performance-events.log").path))
+ XCTAssertTrue(fileManager.fileExists(atPath: contentsURL.appendingPathComponent("README.txt").path))
+ }
+
+ func testPerformanceDiagnosticArchiveWriterDoesNotOverwriteExistingArchive() throws {
+ let fileManager = FileManager.default
+ let rootURL = fileManager.temporaryDirectory.appendingPathComponent(UUID().uuidString, isDirectory: true)
+ let archiveURL = rootURL.appendingPathComponent("diagnostics.zip")
+ defer { try? fileManager.removeItem(at: rootURL) }
+
+ try fileManager.createDirectory(at: rootURL, withIntermediateDirectories: true)
+ try Data("existing archive".utf8).write(to: archiveURL)
+ let summary = try JSONSerialization.data(withJSONObject: ["schemaVersion": 1], options: [])
+
+ XCTAssertThrowsError(
+ try PerformanceDiagnosticArchiveWriter.write(
+ to: archiveURL,
+ summaryJSON: summary,
+ eventLogURLs: []
+ )
+ )
+ XCTAssertEqual(try Data(contentsOf: archiveURL), Data("existing archive".utf8))
+ }
+
+ func testPerformanceDiagnosticArchiveWriterFiltersSensitiveLogFields() throws {
+ let fileManager = FileManager.default
+ let rootURL = fileManager.temporaryDirectory.appendingPathComponent(UUID().uuidString, isDirectory: true)
+ let sourceLogURL = rootURL.appendingPathComponent("events.log")
+ let archiveURL = rootURL.appendingPathComponent("diagnostics.zip")
+ let extractionURL = rootURL.appendingPathComponent("extracted", isDirectory: true)
+ defer { try? fileManager.removeItem(at: rootURL) }
+
+ try fileManager.createDirectory(at: rootURL, withIntermediateDirectories: true)
+ try "event=quickSwitch.snapshot.success ts=2026-08-14T00:00:00Z durationMilliseconds=42 reportPathBasename=private-notes.txt title=secret\n".write(to: sourceLogURL, atomically: true, encoding: .utf8)
+ let summary = try JSONSerialization.data(withJSONObject: ["schemaVersion": 1], options: [])
+ _ = try PerformanceDiagnosticArchiveWriter.write(
+ to: archiveURL,
+ summaryJSON: summary,
+ eventLogURLs: [sourceLogURL]
+ )
+
+ let unzipProcess = Process()
+ unzipProcess.executableURL = URL(fileURLWithPath: "/usr/bin/ditto")
+ unzipProcess.arguments = ["-x", "-k", archiveURL.path, extractionURL.path]
+ try unzipProcess.run()
+ unzipProcess.waitUntilExit()
+ XCTAssertEqual(unzipProcess.terminationStatus, 0)
+ let exportedLogURL = extractionURL
+ .appendingPathComponent("Aligner-Diagnostics", isDirectory: true)
+ .appendingPathComponent("performance-events.log")
+ let exportedLog = try String(contentsOf: exportedLogURL, encoding: .utf8)
+ XCTAssertTrue(exportedLog.contains("event=quickSwitch.snapshot.success"))
+ XCTAssertTrue(exportedLog.contains("durationMilliseconds=42"))
+ XCTAssertFalse(exportedLog.contains("private-notes.txt"))
+ XCTAssertFalse(exportedLog.contains("title=secret"))
}
func testRound0OnlyDefinesQuickSwitchEntryPoint() {
@@ -171,6 +255,33 @@
subroleDescription: "standard"
)
)
+ }
+
+ func testWindowEnumerationPolicyRejectsLowConfidenceAXOnlyRegularWindows() {
+ XCTAssertFalse(WindowEnumerationPolicy.shouldIncludeAXOnlyRecord(
+ identifierSource: .cgWindow,
+ isMinimized: false,
+ isFullscreen: false,
+ spaceIDs: []
+ ))
+ XCTAssertTrue(WindowEnumerationPolicy.shouldIncludeAXOnlyRecord(
+ identifierSource: .cgWindow,
+ isMinimized: true,
+ isFullscreen: false,
+ spaceIDs: []
+ ))
+ XCTAssertTrue(WindowEnumerationPolicy.shouldIncludeAXOnlyRecord(
+ identifierSource: .cgWindow,
+ isMinimized: false,
+ isFullscreen: true,
+ spaceIDs: [42]
+ ))
+ XCTAssertFalse(WindowEnumerationPolicy.shouldIncludeAXOnlyRecord(
+ identifierSource: .syntheticAX,
+ isMinimized: false,
+ isFullscreen: false,
+ spaceIDs: []
+ ))
}
func testMinimizedWindowFallbackPolicyAvoidsOccupiedSyntheticIDCollisions() {
@@ -377,6 +488,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 +818,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