// AUSWURF-MESSUNG an echter Hardware — der W-1-Beweis „Auswerfen wirkt // (nachgemessen, nicht geglaubt)". Läuft NUR auf ausdrückliches Verlangen: // // RIPPY_MESSUNG_AUSWURF=1 npx vitest run test/messung.auswurf.test.ts // // ⚠ Wirft die Disc im ersten optischen Laufwerk WIRKLICH aus. Der BU40N // kann die Schublade nicht selbst einziehen (LOAD_MEDIA → // ERROR_INVALID_FUNCTION, windows.py 28.08.2026) — nach dem Lauf bleibt // der Tray offen. Deshalb getrennt von messung.laufwerk (nur lesend). import { describe, expect, it } from 'vitest' const messen = process.env.RIPPY_MESSUNG_AUSWURF === '1' && process.platform === 'win32' describe.skipIf(!messen)('Auswurf am echten Laufwerk — Zustand davor und danach', () => { it('entriegelt, wirft aus und SIEHT NACH', async () => { const { win32Api } = await import('../src/kern/laufwerk/win32') const { auswerfenMitGrund, geraeteInfo, listOptischeLaufwerke } = await import('../src/kern/laufwerk/disc') const api = win32Api() const geraete = listOptischeLaufwerke(api) expect(geraete.length).toBeGreaterThan(0) const geraet = geraete[0] const davor = geraeteInfo(api, geraet) console.log(`MESSUNG davor: status=${davor.status} typ=${davor.typ}`) expect(davor.status).toBe('ready') // ohne Disc misst dieser Lauf nichts const start = Date.now() const { grund, fehler } = await auswerfenMitGrund(api, geraet) const dauerMs = Date.now() - start console.log(`MESSUNG auswurf: grund=${grund} fehler=${fehler ?? '-'} dauer=${dauerMs}ms`) const danach = geraeteInfo(api, geraet) console.log(`MESSUNG danach: status=${danach.status}`) // Der eigentliche Beweis ist der ZUSTAND davor/danach — nicht der // Rückgabewert des Steuercodes (windows.py: 4 → 1 am echten Gerät). expect(grund).toBe('ok') expect(danach.status).toBe('empty') }) }) describe.skipIf(messen)('Auswurf-Messung übersprungen', () => { it('läuft nur mit RIPPY_MESSUNG_AUSWURF=1 unter Windows', () => { expect(true).toBe(true) }) })