import Testing import CoreGraphics @testable import OnyxNotch @Suite("Anzeigen-Auswahl") struct DisplayPolicyTests { static let builtIn = ScreenMetrics( frame: CGRect(x: 0, y: 0, width: 1800, height: 1169), safeAreaTop: 38, auxiliaryTopLeft: CGRect(x: 0, y: 1131, width: 790, height: 38), auxiliaryTopRight: CGRect(x: 1010, y: 1131, width: 790, height: 38), isBuiltIn: true, displayID: 1 ) static let external = ScreenMetrics( frame: CGRect(x: 1800, y: 0, width: 2560, height: 1440), safeAreaTop: 0, auxiliaryTopLeft: nil, auxiliaryTopRight: nil, isBuiltIn: false, displayID: 2 ) static let secondExternal = ScreenMetrics( frame: CGRect(x: -2560, y: 0, width: 2560, height: 1440), safeAreaTop: 0, auxiliaryTopLeft: nil, auxiliaryTopRight: nil, isBuiltIn: false, displayID: 3 ) @Test("Nur intern: externe Displays bekommen kein Panel") func builtInOnlySkipsExternal() { let chosen = DisplayPolicy.builtInOnly.screens(from: [Self.builtIn, Self.external]) #expect(chosen.map(\.displayID) == [1]) } @Test("Alle Displays: jedes bekommt eins") func allDisplaysCoversEverything() { let chosen = DisplayPolicy.allDisplays .screens(from: [Self.builtIn, Self.external, Self.secondExternal]) #expect(Set(chosen.map(\.displayID)) == [1, 2, 3]) } @Test("Nur intern und der Deckel ist zu: Onyx wäre unerreichbar, also fällt es auf extern zurück") func builtInOnlyFallsBackWhenLidClosed() { // Deckel zu am Dock: das eingebaute Display verschwindet aus der Liste. // Ohne Rückfall hätte man gar keinen Zugang mehr zur App. let chosen = DisplayPolicy.builtInOnly.screens(from: [Self.external]) #expect(chosen.map(\.displayID) == [2]) } @Test("Rückfall wählt genau ein Display, nicht alle") func fallbackPicksOnlyOne() { let chosen = DisplayPolicy.builtInOnly.screens(from: [Self.external, Self.secondExternal]) #expect(chosen.count == 1) } @Test("Ohne Displays kein Panel — und kein Absturz") func noScreensIsSafe() { #expect(DisplayPolicy.builtInOnly.screens(from: []).isEmpty) #expect(DisplayPolicy.allDisplays.screens(from: []).isEmpty) } @Test("Mehrere eingebaute Displays gibt es nicht, aber der Code darf daran nicht scheitern") func handlesImplausibleInput() { let chosen = DisplayPolicy.builtInOnly.screens(from: [Self.builtIn, Self.builtIn]) #expect(chosen.count == 2) } }