Files
onyx/Packages/OnyxKit/Tests/OnyxNotchTests/NotchBandTests.swift
T
ScarriffleandClaude Opus 5 c05ccb8ae1 Die Notch wird zur Insel, wo es keine Hardware gibt
Die Silhouette bestand aus zwei überlappenden Teilpfaden. Gefüllt stimmte die
Vereinigung, aber die Kontur zeichnete jeden Teilpfad vollständig nach — auch
dort, wo er innen lag. Dazu kippte die Form ab einer Breite in einen anderen
Zweig, und die beiden Zweige waren nicht dieselbe Geometrie. Zusammen war das
das Flackern an den Rundungen. Jetzt ein durchgehender Umriss, dessen Zweige
ineinander übergehen statt zu springen.

Neu ist die Wahl zwischen verschmolzen und schwebend. Eine echte Notch **muss**
an der Kante kleben und oben eckig sein, sonst klafft ein Spalt zum Gehäuse;
eine Insel **muss** Abstand halten und rundum gerundet sein, sonst sieht sie aus
wie ein abgeschnittenes Rechteck. Beides zu mischen geht nicht, deshalb eine
Wahl und keine zwei Schalter.

Ihre Höhe rät Onyx nicht mehr, sondern misst die Menüleiste: 24 Punkte minus
Luft oben und unten. Vorher hing ein festes Maß unten heraus.

Dazu „nur der Hauptbildschirm" als dritte Anzeigewahl — gemeint ist der mit der
Menüleiste, nicht `NSScreen.main`, das mit dem aktiven Fenster mitwandert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 21:05:13 +02:00

66 lines
2.6 KiB
Swift

import Testing
import CoreGraphics
@testable import OnyxNotch
@Suite("Band neben der Notch")
struct NotchBandTests {
// Die nachgemessenen Werte des Zielgeräts: 1800 Punkte breiter Bildschirm,
// Notch 220 breit, bei fünf Kacheln ein 972 Punkte breites Panel.
private let notchWidth: CGFloat = 220
private let panelWidth: CGFloat = 972
@Test("Bei fünf Kacheln bleiben je 376 Punkte")
func referenceMachine() {
let band = NotchBandLayout.resolve(panelWidth: panelWidth, notchWidth: notchWidth)
#expect(band.leading == 376)
#expect(band.trailing == 376)
#expect(!band.isEmpty)
}
@Test("Der gezeichnete Streifen ist wieder so breit wie das Panel")
func totalMatchesPanel() {
let band = NotchBandLayout.resolve(panelWidth: panelWidth, notchWidth: notchWidth)
#expect(band.totalWidth(notchWidth: notchWidth) == panelWidth)
}
/// Zusammengezogen ist das Panel genau die Notch. Dann gibt es keine Arme —
/// und erst recht keine negativen.
@Test("Ist das Panel so breit wie die Notch, gibt es kein Band")
func collapsedHasNoBand() {
let band = NotchBandLayout.resolve(panelWidth: notchWidth, notchWidth: notchWidth)
#expect(band == .none)
#expect(band.isEmpty)
}
/// Kommt auf sehr schmalen Bildschirmen vor, wenn das Panel geklemmt wird.
/// Eine negative Breite wäre in einer `frame`-Angabe ein Absturz.
@Test("Ein Panel schmaler als die Notch ergibt keine negative Breite")
func narrowerThanNotchStaysZero() {
let band = NotchBandLayout.resolve(panelWidth: 120, notchWidth: notchWidth)
#expect(band == .none)
}
@Test("Knapp unter dem Mindestmaß bleibt der Streifen leer")
func belowMinimumIsEmpty() {
let width = notchWidth + 2 * (NotchBandLayout.minimumUsableWidth - 1)
#expect(NotchBandLayout.resolve(panelWidth: width, notchWidth: notchWidth) == .none)
}
@Test("Genau am Mindestmaß trägt er")
func atMinimumIsUsed() {
let width = notchWidth + 2 * NotchBandLayout.minimumUsableWidth
let band = NotchBandLayout.resolve(panelWidth: width, notchWidth: notchWidth)
#expect(band.leading == NotchBandLayout.minimumUsableWidth)
}
/// Ein Arm links ohne Gegenstück rechts liest sich als verrutschtes Panel.
@Test("Beide Seiten sind immer gleich breit")
func bothSidesMatch() {
for width in stride(from: CGFloat(200), through: 2000, by: 37) {
let band = NotchBandLayout.resolve(panelWidth: width, notchWidth: notchWidth)
#expect(band.leading == band.trailing)
}
}
}