Das Qualitätsblatt hat die App angehalten
Kein Hänger, sondern ein Absturz, der nicht durchkam. Der Stapel des eingefrorenen Prozesses endet in `_assertionFailure` beim Lesen eines `@Environment`-Werts — mitten in `SheetBridge.present`, also während das Blatt aufgebaut wird. Weil der Player in diesem Moment in einem Layoutdurchlauf steckt, erschien nie eine Meldung: das Fenster stand still. `@Environment(PlaybackSettings.self)` ohne Fragezeichen ist keine Bitte, sondern eine Behauptung — fehlt der Gegenstand, hält Swift die Anwendung an. Und ein Blatt hängt an einem eigenen Darstellungsbaum. Auf dem iPad kam die Umgebung des Players dort bisher an, auf dem Mac nicht. Zwei Änderungen, beide nötig: - Der Player reicht `PlaybackSettings` und den Akzent ausdrücklich in seine Blätter hinein, statt sich auf Vererbung zu verlassen. - `QualitySheet` liest die Einstellungen als Optional. Ein Vergessen kostet künftig eine fehlende Zeile im Blatt statt der ganzen App. Dazu ein Test, der genau diesen Weg geht: abspielen, Qualitätsknopf, Blatt da? Er lief schon vor der Korrektur durch — der Unterschied zwischen iPad und Mac ist mit einem Simulator nicht zu fassen. Er hält trotzdem fest, dass der Weg überhaupt gegangen werden kann. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
5dd2daf3ed
commit
8a63f815cd
@@ -0,0 +1,43 @@
|
||||
import XCTest
|
||||
|
||||
/// Die Blätter im Player — Qualität, Tonspur, Untertitel.
|
||||
///
|
||||
/// Dieser Test ist aus einem Fehlerbericht entstanden: der Qualitätsknopf
|
||||
/// ließ die App hängen. Solange niemand darauf tippen konnte, fiel das nicht
|
||||
/// auf — die Knöpfe lagen unter der Fensterleiste des Macs.
|
||||
///
|
||||
/// Braucht die Attrappe: `python3 Tools/JellyfinStub/server.py`.
|
||||
final class PlayerSheets: XCTestCase {
|
||||
func testQualitySheetOpens() {
|
||||
let app = XCUIApplication()
|
||||
app.launchArguments = ["-FlixyStubServer", "http://127.0.0.1:8096"]
|
||||
app.launch()
|
||||
|
||||
XCTAssertTrue(app.staticTexts["Weiterschauen"].waitForExistence(timeout: 30))
|
||||
|
||||
// Der Aufmacher wechselt alle sechs Stunden, und der Knopf heißt je
|
||||
// nach Titel anders: „Abspielen" bei einem unangefasten, bei einem
|
||||
// angefangenen „Weiterschauen". Beide sind derselbe Weg in den
|
||||
// Player — der Test darf sich nicht auf einen von beiden festlegen.
|
||||
let start = app.buttons.matching(
|
||||
NSPredicate(format: "label IN {'Abspielen', 'Weiterschauen'}")
|
||||
).firstMatch
|
||||
XCTAssertTrue(start.waitForExistence(timeout: 10), "Kein Weg in den Player")
|
||||
start.tap()
|
||||
|
||||
var quality = app.buttons["Qualität"].firstMatch
|
||||
if !quality.waitForExistence(timeout: 25) {
|
||||
// Die Bedienelemente blenden sich nach ein paar Sekunden aus.
|
||||
app.tap()
|
||||
quality = app.buttons["Qualität"].firstMatch
|
||||
}
|
||||
XCTAssertTrue(quality.waitForExistence(timeout: 15), "Der Qualitätsknopf ist nicht da")
|
||||
|
||||
quality.tap()
|
||||
|
||||
XCTAssertTrue(
|
||||
app.staticTexts["Alle Stufen"].waitForExistence(timeout: 20),
|
||||
"Das Qualitätsblatt öffnet nicht"
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user