import Testing import SwiftUI @testable import OnyxDesign @Suite("Werkstoffe") @MainActor struct NotchMaterialTests { @Test("Stein ist deckend — sonst hätte er an der Hardware-Notch eine Kante") func stoneIsOpaque() { #expect(NotchMaterial.stone.fillOpacity == 1.0) // Und braucht deshalb keine Weichzeichnung darunter. #expect(!NotchMaterial.stone.showsVibrancy) } @Test("Je durchlässiger, desto weniger Deckkraft") func opacityDecreasesWithTranslucency() { #expect(NotchMaterial.stone.fillOpacity > NotchMaterial.blur.fillOpacity) #expect(NotchMaterial.blur.fillOpacity > NotchMaterial.glass.fillOpacity) } @Test("Je durchlässiger, desto mehr Glanz") func sheenGrowsWithTranslucency() { // Auf deckendem Schwarz genügt ein Hauch; auf Glas ist der Glanz das, // was die Fläche überhaupt als Körper lesbar macht. #expect(NotchMaterial.stone.sheen < NotchMaterial.blur.sheen) #expect(NotchMaterial.blur.sheen < NotchMaterial.glass.sheen) } @Test("Alle durchscheinenden Werkstoffe brauchen die Vibrancy-Ebene") func translucentMaterialsNeedVibrancy() { #expect(NotchMaterial.blur.showsVibrancy) #expect(NotchMaterial.glass.showsVibrancy) } @Test("Kein Werkstoff ist unsichtbar") func nothingIsFullyTransparent() { // Eine Fläche mit Deckkraft null wäre kein Werkstoff, sondern ein // fehlendes Panel — und niemand fände die Einstellung zurück. for material in NotchMaterial.allCases { #expect(material.fillOpacity > 0.3) } } @Test("Jeder Werkstoff überlebt das Speichern") func roundTripsThroughDefaults() { for material in NotchMaterial.allCases { #expect(NotchMaterial(rawValue: material.rawValue) == material) } } @Test("Ein unbekannter Name fällt auf Stein zurück, nicht ins Nichts") func unknownNameFallsBack() { let defaults = UserDefaults(suiteName: "onyx.test.material")! defaults.removePersistentDomain(forName: "onyx.test.material") defaults.set("liquidUnobtainium", forKey: "onyx.theme.material") #expect(OnyxTheme(defaults: defaults).material == .stone) } }