| | |
| | | "schemaVersion", |
| | | "quickSwitch.showMinimizedWindows", |
| | | "quickSwitch.showFullscreenWindows", |
| | | "quickSwitch.waterfallViewMode", |
| | | "appearance.theme", |
| | | "appearance.language", |
| | | "spaces.displayStrategy" |
| | |
| | | } |
| | | |
| | | func testDefaultPreferencesMatchRound0Decisions() { |
| | | XCTAssertEqual(PreferenceSchema.version, 1) |
| | | XCTAssertEqual(PreferenceSchema.version, 2) |
| | | XCTAssertEqual(PreferenceSchema.defaults.showMinimizedWindows, true) |
| | | XCTAssertEqual(PreferenceSchema.defaults.showFullscreenWindows, true) |
| | | XCTAssertEqual(PreferenceSchema.defaults.quickSwitchWaterfallViewMode, .verticalColumns) |
| | | XCTAssertEqual(PreferenceSchema.defaults.theme, .system) |
| | | XCTAssertEqual(PreferenceSchema.defaults.language, .system) |
| | | XCTAssertEqual(PreferenceSchema.defaults.spaceDisplayStrategy, .includeVisibleAndFullscreen) |
| | |
| | | let preferences = AlignerPreferences( |
| | | showMinimizedWindows: false, |
| | | showFullscreenWindows: false, |
| | | quickSwitchWaterfallViewMode: .horizontalMasonry, |
| | | theme: .dark, |
| | | language: .simplifiedChinese, |
| | | spaceDisplayStrategy: .currentSpaceOnly |
| | |
| | | userDefaults.set("not-a-theme", forKey: PreferenceKey.theme.storageKey) |
| | | userDefaults.set("not-a-language", forKey: PreferenceKey.language.storageKey) |
| | | userDefaults.set("not-a-space-strategy", forKey: PreferenceKey.spaceDisplayStrategy.storageKey) |
| | | userDefaults.set("not-a-waterfall-mode", forKey: PreferenceKey.quickSwitchWaterfallViewMode.storageKey) |
| | | |
| | | let preferences = UserDefaultsPreferenceStore(userDefaults: userDefaults).read() |
| | | |
| | | XCTAssertEqual(preferences.theme, PreferenceSchema.defaults.theme) |
| | | XCTAssertEqual(preferences.language, PreferenceSchema.defaults.language) |
| | | XCTAssertEqual(preferences.spaceDisplayStrategy, PreferenceSchema.defaults.spaceDisplayStrategy) |
| | | XCTAssertEqual(preferences.quickSwitchWaterfallViewMode, PreferenceSchema.defaults.quickSwitchWaterfallViewMode) |
| | | } |
| | | |
| | | @MainActor |
| | |
| | | XCTAssertNil(QuickSwitchSpaceFilterPolicy.singleFullscreenSelection(inSpaceID: 12, viewModel: viewModel)) |
| | | } |
| | | |
| | | func testQuickSwitchViewModelOrdersSplitViewAppNamesByWindowFrame() { |
| | | let leftApp = AlignerApp(bundleIdentifier: "com.example.Left", name: "Left App", category: .generic) |
| | | let rightApp = AlignerApp(bundleIdentifier: "com.example.Right", name: "Right App", category: .generic) |
| | | let displayUUID = "display-a" |
| | | let snapshot = QuickSwitchSnapshotBuilder.snapshot( |
| | | displays: [ |
| | | AlignerDisplay( |
| | | uuid: displayUUID, |
| | | physical: true, |
| | | spaces: [ |
| | | AlignerSpace(id: 20, type: .fullscreen, displayUUID: displayUUID, index: 1) |
| | | ] |
| | | ) |
| | | ], |
| | | windows: [ |
| | | AlignerWindow( |
| | | id: 2, |
| | | app: rightApp, |
| | | title: "Right", |
| | | isFullscreen: true, |
| | | frame: CGRect(x: 960, y: 0, width: 960, height: 1080), |
| | | spaceIDs: [20] |
| | | ), |
| | | AlignerWindow( |
| | | id: 1, |
| | | app: leftApp, |
| | | title: "Left", |
| | | isFullscreen: true, |
| | | frame: CGRect(x: 0, y: 0, width: 960, height: 1080), |
| | | spaceIDs: [20] |
| | | ) |
| | | ] |
| | | ) |
| | | |
| | | let viewModel = QuickSwitchViewModelBuilder.viewModel(from: snapshot) |
| | | let space = viewModel.displays.single?.spaces.single |
| | | |
| | | XCTAssertEqual(space?.splitViewAppNames, ["Left App", "Right App"]) |
| | | XCTAssertEqual(space?.appNames, ["Left App", "Right App"]) |
| | | } |
| | | |
| | | func testQuickSwitchViewModelKeepsDuplicateAppNamesForSameAppSplitView() { |
| | | let finder = AlignerApp(bundleIdentifier: "com.apple.finder", name: "访达", category: .finder) |
| | | let displayUUID = "display-a" |
| | | let snapshot = QuickSwitchSnapshotBuilder.snapshot( |
| | | displays: [ |
| | | AlignerDisplay( |
| | | uuid: displayUUID, |
| | | physical: true, |
| | | spaces: [ |
| | | AlignerSpace(id: 21, type: .fullscreen, displayUUID: displayUUID, index: 1) |
| | | ] |
| | | ) |
| | | ], |
| | | windows: [ |
| | | AlignerWindow( |
| | | id: 12, |
| | | app: finder, |
| | | title: "右侧访达", |
| | | isFullscreen: true, |
| | | frame: CGRect(x: 900, y: 0, width: 900, height: 1000), |
| | | spaceIDs: [21] |
| | | ), |
| | | AlignerWindow( |
| | | id: 11, |
| | | app: finder, |
| | | title: "左侧访达", |
| | | isFullscreen: true, |
| | | frame: CGRect(x: 0, y: 0, width: 900, height: 1000), |
| | | spaceIDs: [21] |
| | | ) |
| | | ] |
| | | ) |
| | | |
| | | let viewModel = QuickSwitchViewModelBuilder.viewModel(from: snapshot) |
| | | let space = viewModel.displays.single?.spaces.single |
| | | |
| | | XCTAssertEqual(space?.splitViewAppNames, ["访达", "访达"]) |
| | | XCTAssertEqual(space?.appNames, ["访达"]) |
| | | } |
| | | |
| | | func testQuickSwitchFocusPolicySelectsFirstStableWindowInitially() { |
| | | let app = makeApp() |
| | | let snapshot = QuickSwitchSnapshotBuilder.snapshot( |