// Tests des Werkzeug-Katalogs — Suchreihenfolge und die %VAR%-Falle // (Groß/Klein), beides ohne installierte Programme (Prüf-Funktionen // werden eingespritzt, Muster aus test_katalog.py). import { describe, expect, it } from 'vitest' import { entfalten, finden, kandidaten, WERKZEUGE } from '../src/kern/werkzeuge/katalog' describe('entfalten — %VAR% ohne Rücksicht auf Schreibweise', () => { it('die gemessene Falle: PROGRAMFILES(X86) trifft %ProgramFiles(x86)%', () => { // Windows liefert Umgebungsnamen GROSS; das Muster schreibt sie // gemischt. Der strikte Vergleich ließ die bekannten Orte auf einer // echten Maschine NIE greifen (katalog.py, 28.08.2026). expect(entfalten('%ProgramFiles(x86)%\\MakeMKV', { 'PROGRAMFILES(X86)': 'C:\\Program Files (x86)' })).toBe( 'C:\\Program Files (x86)\\MakeMKV', ) }) it('bleibt ein % stehen, ist der Kandidat unbrauchbar', () => { expect(entfalten('%GibtEsNicht%\\X', {})).toBe('') }) }) describe('kandidaten — Reihenfolge: eigener Ordner vor System', () => { it('eigener Ordner zuerst, dann bekannte Orte, 64 Bit zuerst', () => { const liste = kandidaten('makemkv', 'C:\\R\\tools', { 'PROGRAMFILES(X86)': 'C:\\PF86', PROGRAMFILES: 'C:\\PF', }) expect(liste[0]).toBe('C:\\R\\tools\\makemkv\\makemkvcon64.exe') expect(liste).toContain('C:\\PF86\\MakeMKV\\makemkvcon64.exe') expect(liste.indexOf('C:\\R\\tools\\makemkvcon64.exe')).toBeLessThan( liste.indexOf('C:\\PF86\\MakeMKV\\makemkvcon64.exe'), ) }) }) describe('finden', () => { const umgebung = { 'PROGRAMFILES(X86)': 'C:\\PF86', PATH: '' } it('ein eingestellter Pfad gewinnt — und ein falscher wird NICHT ersetzt', () => { const existiert = (p: string): boolean => p === 'D:\\eigen\\makemkvcon64.exe' expect(finden('makemkv', 'D:\\eigen\\makemkvcon64.exe', 'C:\\R', umgebung, existiert, () => '')).toBe( 'D:\\eigen\\makemkvcon64.exe', ) // Tippfehler soll als Fehler sichtbar werden, nicht still anderswo landen. expect(finden('makemkv', 'D:\\tippfehler.exe', 'C:\\R', umgebung, existiert, () => '')).toBe('') }) it('findet über die bekannten Orte', () => { const existiert = (p: string): boolean => p === 'C:\\PF86\\MakeMKV\\makemkvcon64.exe' expect(finden('makemkv', '', 'C:\\R', umgebung, existiert, () => '')).toBe( 'C:\\PF86\\MakeMKV\\makemkvcon64.exe', ) }) it('fällt zuletzt auf die Registry zurück', () => { expect(finden('makemkv', '', 'C:\\R', umgebung, () => false, () => 'C:\\Reg\\makemkvcon64.exe')).toBe( 'C:\\Reg\\makemkvcon64.exe', ) }) it('nichts gefunden ist "", kein Raten', () => { expect(finden('makemkv', '', 'C:\\R', umgebung, () => false, () => '')).toBe('') }) }) describe('WERKZEUGE — die Pflicht-Markierungen', () => { it('nur MakeMKV ist Pflicht; ohne HandBrake/FLAC läuft Rippy eingeschränkt', () => { expect(WERKZEUGE.makemkv.pflicht).toBe(true) expect(WERKZEUGE.handbrake.pflicht).toBe(false) expect(WERKZEUGE.flac.pflicht).toBe(false) }) })