WAS: `npm run klick` startet das ECHTE Rippy (Electron, Haupt, Kern, Fenster, Datenbank) mit eigenem Profil (--profil, --klick-smoke: ohne Tray, Updater, Toasts), einem nachgebauten Laufwerk (RIPPY_FAKE_LAUFWERK) und nachgebauten Werkzeugen (bau/klick/fake-*.cjs) — und klickt sich durch: Rippen → Dialog → Sprachen je Titel (jpn statt deu) → Rollen auf Folge → Staffel 1, ab Folge 3 → Vorschau → Rip → Warteschlange → Kompression → Ablage als S01E03/S01E04 unter Serien\…\Season 01 → Einstellungen/Roh-Dateien → Roh loeschen → Ereignisse. Bilder liegen in beweise/klick/. Die Naht dafuer (kern/werkzeuge/aufruf.ts): Zeigt ein Werkzeug-Pfad auf ein Node-Skript, laeuft es ueber die eigene Laufzeit (ELECTRON_RUN_AS_NODE) — fuer EXE-Pfade aendert sich nichts. WARUM: Beide Fehler vom 01.09.2026 waren Verkabelung; 261 Unit-Tests sahen keinen. Der Klick-Beweis haette beide gefunden. NEBENBEFUND: Die CSP blockte eingebettete Schrift-Teile (data:-Fonts der fontsource-Pakete) — Konsolenfehler im gebauten Fenster, jetzt font-src. Dazu test/messung.spuren.test.ts: HandBrake-Scan einer echten Roh-Datei auf Verlangen (RIPPY_MESSUNG_MKV). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
32 lines
1.8 KiB
TypeScript
32 lines
1.8 KiB
TypeScript
// MESSUNG an einer ECHTEN Roh-Datei: Welche Ton- und Untertitelspuren hat
|
|
// MakeMKV wirklich in die MKV geschrieben? (5.4.0, Regel D)
|
|
//
|
|
// RIPPY_MESSUNG_MKV="E:\Rippy\roh\bluray-…\title_t00.mkv" npx vitest run test/messung.spuren.test.ts --reporter=verbose
|
|
//
|
|
// Der Anlass: Der Auswahl-Dialog zeigt die Sprachen, die der Info-Lauf an
|
|
// der DISC gemessen hat. Ob sie alle in der Datei landen, entscheidet
|
|
// MakeMKVs Auswahlregel (werkzeuge/spurauswahl.ts). Diese Messung fragt die
|
|
// Datei selbst — über denselben HandBrake-Scan, den die Kompression benutzt
|
|
// (komprimieren/scan.ts). Läuft nur auf Verlangen und nur unter Windows.
|
|
import { describe, expect, it } from 'vitest'
|
|
|
|
const datei = process.env.RIPPY_MESSUNG_MKV ?? ''
|
|
const messen = datei.length > 0 && process.platform === 'win32'
|
|
|
|
describe.skipIf(!messen)('Spuren einer echten Roh-Datei', () => {
|
|
it('HandBrake-Scan liefert Ton- und Untertitelspuren mit Sprachcode', { timeout: 180_000 }, async () => {
|
|
const { finden } = await import('../src/kern/werkzeuge/katalog')
|
|
const { spurenScannen } = await import('../src/kern/komprimieren/scan')
|
|
const handbrake = finden('handbrake', '')
|
|
expect(handbrake.length, 'HandBrakeCLI nicht gefunden').toBeGreaterThan(0)
|
|
const start = Date.now()
|
|
const spuren = await spurenScannen(handbrake, datei)
|
|
console.log(`MESSUNG Scan: ${((Date.now() - start) / 1000).toFixed(1)} s — ${datei}`)
|
|
expect(spuren, 'Scan lieferte nichts').not.toBeNull()
|
|
console.log(`MESSUNG Dauer: ${Math.round(spuren!.dauerS / 60)} min`)
|
|
for (const a of spuren!.audio) console.log(`MESSUNG Ton ${a.nr}: ${a.lang} — ${a.beschreibung}`)
|
|
for (const u of spuren!.untertitel) console.log(`MESSUNG Untertitel ${u.nr}: ${u.lang} — ${u.beschreibung}`)
|
|
expect(spuren!.audio.length).toBeGreaterThan(0)
|
|
})
|
|
})
|