import Testing import CoreGraphics import Foundation @testable import OnyxNotch // Wie weit die Auslösefläche über die Notch hinausreicht, ist Geschmackssache // und hängt an der Hand: manche zielen genau, andere fahren nur grob nach oben. // Feste Werte im Code sind dafür die falsche Antwort. @Suite("Auslösefläche") struct TriggerAreaTests { private let notch = CGRect(x: 790, y: 1131, width: 220, height: 38) private let screen = CGRect(x: 0, y: 0, width: 1800, height: 1169) @Test("Ohne Zugabe ist die Fläche die Notch selbst") func zeroMeansNotchOnly() { let area = TriggerArea(extraWidth: 0, extraHeight: 0) #expect(area.rect(notch: notch, screen: screen) == notch) } @Test("Die Breite wächst nach beiden Seiten") func widthGrowsBothWays() { // Sonst säße die Fläche außermittig, und man träfe sie links anders // als rechts. let rect = TriggerArea(extraWidth: 30, extraHeight: 0) .rect(notch: notch, screen: screen) #expect(rect.minX == notch.minX - 30) #expect(rect.maxX == notch.maxX + 30) } @Test("Die Höhe wächst nur nach unten") func heightGrowsDownwards() { // Nach oben ist der Bildschirmrand — dort kommt niemand her. let rect = TriggerArea(extraWidth: 0, extraHeight: 25) .rect(notch: notch, screen: screen) #expect(rect.maxY == notch.maxY) #expect(rect.minY == notch.minY - 25) } @Test("Die Fläche bleibt auf dem Bildschirm") func staysOnScreen() { let rect = TriggerArea(extraWidth: 5000, extraHeight: 5000) .rect(notch: notch, screen: screen) #expect(rect.minX >= screen.minX) #expect(rect.maxX <= screen.maxX) #expect(rect.minY >= screen.minY) } @Test("Werte außerhalb des Erlaubten werden eingefangen") func valuesAreClamped() { #expect(TriggerArea(extraWidth: -50, extraHeight: -50).extraWidth == 0) #expect(TriggerArea(extraWidth: 9999, extraHeight: 0).extraWidth == TriggerArea.maximumExtraWidth) #expect(TriggerArea(extraWidth: 0, extraHeight: 9999).extraHeight == TriggerArea.maximumExtraHeight) } @Test("Die Voreinstellung ist die, mit der bisher gearbeitet wurde") func defaultMatchesPreviousBehaviour() { // Wer nichts einstellt, soll nichts merken. #expect(TriggerArea.standard.extraWidth == 16) #expect(TriggerArea.standard.extraHeight == 14) } @Test("Gespeichert und gelesen ergibt dasselbe") func roundTrips() throws { let area = TriggerArea(extraWidth: 42, extraHeight: 7) let data = try JSONEncoder().encode(area) #expect(try JSONDecoder().decode(TriggerArea.self, from: data) == area) } }