// 5.7.0 (Durchsicht F10): Der Disc-Typ aus dem Dateisystem — BDMV/index.bdmv // mit „INDX0300" ist UHD (am Akira-UHD-Abbild gemessen), „0200"/„0100" eine // Blu-ray, VIDEO_TS eine DVD. Der Windows-Steuercode antwortet bei manchen // USB-Brücken nicht, und die Größe allein machte aus einer 4K-Disc mit // 48 GB Daten „bluray". import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it } from 'vitest' import { typAusIndexKopf } from '../src/kern/metadaten/discmerkmale' let wegwerf: string[] = [] afterEach(() => { for (const o of wegwerf.splice(0)) rmSync(o, { recursive: true, force: true }) }) describe('typAusIndexKopf', () => { it('INDX0300 ist UHD, INDX0200/0100 Blu-ray, alles andere nichts', () => { expect(typAusIndexKopf(Buffer.from('INDX0300\0\0\0N', 'latin1'))).toBe('uhd') expect(typAusIndexKopf(Buffer.from('INDX0200xxxx', 'latin1'))).toBe('bluray') expect(typAusIndexKopf(Buffer.from('INDX0100xxxx', 'latin1'))).toBe('bluray') expect(typAusIndexKopf(Buffer.from('MOBJ0200', 'latin1'))).toBe(null) expect(typAusIndexKopf(Buffer.from('IND', 'latin1'))).toBe(null) }) }) describe('typAusDateisystem an einem nachgebauten Laufzeit-Ordner', () => { // discWurzel() rechnet aus \\.\G: den Buchstaben — das geht nur unter // Windows an einem echten Laufwerk. Hier wird deshalb die Kopf-Funktion // über eine echte Datei geprüft, so wie typAusDateisystem sie liest. it('liest die ersten acht Bytes einer echten index.bdmv', () => { const wurzel = mkdtempSync(join(tmpdir(), 'rippy-bdmv-')) wegwerf.push(wurzel) mkdirSync(join(wurzel, 'BDMV'), { recursive: true }) const index = join(wurzel, 'BDMV', 'index.bdmv') writeFileSync(index, Buffer.concat([Buffer.from('INDX0300', 'latin1'), Buffer.alloc(64)])) const { openSync, readSync, closeSync } = require('node:fs') as typeof import('node:fs') const fd = openSync(index, 'r') const kopf = Buffer.alloc(8) readSync(fd, kopf, 0, 8, 0) closeSync(fd) expect(typAusIndexKopf(kopf)).toBe('uhd') }) })