// Die drei Funde aus dem ersten Commander-Test (30.08.2026, abends) — // jeder als Test festgehalten, mit den LIVE gemessenen Fixtures. import { describe, expect, it } from 'vitest' import { urteilAusAusgabe } from '../src/kern/werkzeuge/schluessel' import { presetEmpfehlung, DEFAULT_HB_PRESET } from '../src/gemeinsam/preset-empfehlung' import { presetFuer } from '../src/kern/komprimieren/presets' describe('Fund 1 — „Key korrekt, aber als ungültig angezeigt"', () => { // Die ECHTE makemkvcon-Ausgabe vom Commander-PC (30.08.2026): Der // aktuelle Forum-Key ist in Ordnung, MakeMKV 1.18.4 ist ZU ALT für ihn // — es meldet 5020 UND 5021 zusammen. const ECHTE_AUSGABE = [ 'MSG:1005,0,1,"MakeMKV v1.18.4 win(x64-release) gestartet","%1 gestartet","MakeMKV v1.18.4 win(x64-release)"', 'MSG:5020,516,0,"Der hinterlegte Aktivierungsschlüssel ist ungültig. …","…"', 'MSG:5021,131332,1,"Diese Programmversion ist zu alt. Bitte laden Sie die aktuelle Version von http://www.makemkv.com/ herunter.","…","http://www.makemkv.com/"', ].join('\n') it('5021 schlägt 5020: Die Ursache ist die Version, nicht der Schlüssel', () => { const urteil = urteilAusAusgabe(ECHTE_AUSGABE) expect(urteil.ok).toBe(false) expect(urteil.code).toBe(5021) expect(urteil.grund).toContain('zu alt') expect(urteil.version).toBe('1.18.4') }) it('ohne Key-Meldungen ist alles gut — und die Version kommt trotzdem mit', () => { const urteil = urteilAusAusgabe( 'MSG:1005,0,1,"MakeMKV v1.18.4 win(x64-release) gestartet","x"\nMSG:5010,0,0,"Das Öffnen der Disk schlug fehl","x"', ) expect(urteil.ok).toBe(true) expect(urteil.pruefbar).toBe(true) expect(urteil.version).toBe('1.18.4') }) it('5020 allein bleibt „Schlüssel wird nicht angenommen"', () => { const urteil = urteilAusAusgabe('MSG:5020,516,0,"…","…"') expect(urteil.code).toBe(5020) expect(urteil.pruefbar).toBe(true) }) // 5.7.0 (Durchsicht 12.09.2026, F5): OHNE angeschlossenes Laufwerk sagt // makemkvcon zur Lizenz gar nichts — gemessen an diesem PC: nur 5042 und // 5010. Das ist kein „angenommen", sondern „nicht angesehen". it('5042 (kein Laufwerk) ohne Lizenzzeile heißt: nicht prüfbar', () => { const urteil = urteilAusAusgabe( [ 'MSG:1005,0,1,"MakeMKV v1.18.4 win(x64-release) gestartet","%1 gestartet","MakeMKV v1.18.4 win(x64-release)"', 'MSG:5042,0,0,"Das Programm konnte keine verwendbaren optischen Laufwerke finden.","…"', 'MSG:5010,0,0,"Das Öffnen der Disk schlug fehl ","…"', ].join('\n'), ) expect(urteil.pruefbar).toBe(false) expect(urteil.code).toBe(5042) expect(urteil.version).toBe('1.18.4') }) it('5051 (Testzeitraum abgelaufen) ist prüfbar und abgelehnt — auch neben 5042', () => { const urteil = urteilAusAusgabe('MSG:5042,0,0,"x","x"\nMSG:5054,0,1,"Evaluierungsversion. Der Testzeitraum lief vor 10 Tagen ab.","x","10"\nMSG:5051,1028,0,"Der Testzeitraum ist abgelaufen.","x"') expect(urteil.ok).toBe(false) expect(urteil.pruefbar).toBe(true) expect(urteil.code).toBe(5051) }) }) describe('Schlüssel aus dem Register lesen (5.7.0)', () => { it('keyAusQuery liest den Wert aus reg query', async () => { const { keyAusQuery } = await import('../src/kern/werkzeuge/schluessel') const ausgabe = '\r\nHKEY_CURRENT_USER\\Software\\MakeMKV\r\n app_Key REG_SZ T-vwvnrmF87JuRPLYYO8HnIrZR_LCAF7JXs9iJEm10moGpjEgkvmPTsf6Ox4BI@N5rPp\r\n\r\n' expect(keyAusQuery(ausgabe)).toBe('T-vwvnrmF87JuRPLYYO8HnIrZR_LCAF7JXs9iJEm10moGpjEgkvmPTsf6Ox4BI@N5rPp') expect(keyAusQuery('FEHLER: Der Registrierungsschlüssel oder -wert wurde nicht gefunden.')).toBe('') }) }) describe('Fund 2 — „Komprimieren auf der CPU statt der GPU"', () => { // Die ECHTE Hardware-Preset-Liste des Commander-HandBrake (30.08.2026) // plus die gemessenen Backends der RX 9070 XT. const PRESETS = [ 'Very Fast 1080p30', 'H.265 MKV 1080p30', 'AV1 QSV 2160p 4K', 'AV1 VCN 2160p 4K', 'H.265 NVENC 2160p 4K', 'H.265 NVENC 1080p', 'H.265 QSV 2160p 4K', 'H.265 QSV 1080p', 'H.265 VCN 2160p 4K', 'H.265 VCN 1080p', ] const BACKENDS = ['cpu-x264', 'cpu-x265', 'cpu-av1', 'vce', 'vce-av1'] it('empfiehlt auf dem Commander-PC VCN, nicht CPU', () => { expect(presetEmpfehlung('bluray', BACKENDS, PRESETS)).toBe('H.265 VCN 1080p') expect(presetEmpfehlung('dvd', BACKENDS, PRESETS)).toBe('H.265 VCN 1080p') expect(presetEmpfehlung('uhd', BACKENDS, PRESETS)).toBe('H.265 VCN 2160p 4K') }) it('NVIDIA-Maschine bekäme NVENC, Intel QSV, reine CPU den Default', () => { expect(presetEmpfehlung('bluray', ['cpu-x265', 'nvenc'], PRESETS)).toBe('H.265 NVENC 1080p') expect(presetEmpfehlung('bluray', ['cpu-x265', 'qsv'], PRESETS)).toBe('H.265 QSV 1080p') expect(presetEmpfehlung('bluray', ['cpu-x264', 'cpu-x265'], PRESETS)).toBe(DEFAULT_HB_PRESET) }) it('empfohlen wird NUR, was die gemessene Liste hergibt', () => { // vce da, aber keine VCN-Presets in der Liste → CPU-Default statt // eines geratenen Namens (die „Invalid preset"-Falle). expect(presetEmpfehlung('bluray', ['vce'], ['Very Fast 1080p30'])).toBe(DEFAULT_HB_PRESET) }) it('die Kette bleibt: eigene Wahl schlägt die Empfehlung', () => { expect(presetFuer('bluray', { transcodePresetBluray: 'Fast 480p30' }, 'H.265 VCN 1080p')).toBe('Fast 480p30') expect(presetFuer('bluray', {}, 'H.265 VCN 1080p')).toBe('H.265 VCN 1080p') expect(presetFuer('bluray', {}, '')).toBe(DEFAULT_HB_PRESET) }) })