bd6409038e
Ampel / ampel (push) Successful in 35s
Praxis-Befund mit echter BD-50: reines UDF, der ISO-PVD-Leser griff nicht. Jetzt ECMA-167-Weg (AVDP Sektor 256 -> Main VDS -> PVD Tag-ID 1 -> Volume Identifier als d-string), mit Tests fuer das d-string-Parsing. ROADMAP Etappe 12 aus der ARM-Vollanalyse: was wir uebernehmen (Fingerprint-DB, bdmt_eng.xml, Suchdegradation, Manual Mode, Apprise, Multi-Drive, Backup-Modus) und wo wir ARM schlagen (Serien-Episoden- Matching, Main-Feature per Laufzeitabgleich). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
"""Tests für die puren Pre-Scan-/OMDb-Helfer (Label-Normalisierung, Parsing)."""
|
||
|
||
from clients.omdb import parse_runtime_minutes, parse_year
|
||
from prescan.prescan import normalize_disc_label, parse_udf_dstring
|
||
|
||
|
||
def test_udf_dstring_latin1():
|
||
# d-string: [comp_id=8]["MEIN_FILM"][padding][len=10]
|
||
daten = bytes([8]) + b"MEIN_FILM" + bytes(21) + bytes([10])
|
||
assert parse_udf_dstring(daten) == "MEIN_FILM"
|
||
|
||
|
||
def test_udf_dstring_utf16():
|
||
text = "FILM".encode("utf-16-be")
|
||
daten = bytes([16]) + text + bytes(32 - 2 - len(text)) + bytes([1 + len(text)])
|
||
assert parse_udf_dstring(daten) == "FILM"
|
||
|
||
|
||
def test_udf_dstring_kaputt_gibt_leer():
|
||
assert parse_udf_dstring(b"") == ""
|
||
assert parse_udf_dstring(bytes(32)) == "" # Länge 0
|
||
daten = bytes([8]) + b"X" + bytes(29) + bytes([99]) # Länge > Puffer
|
||
assert parse_udf_dstring(daten) == ""
|
||
|
||
|
||
def test_label_normalisierung():
|
||
# Disc-Labels sind fast immer GROSS_MIT_UNTERSTRICHEN
|
||
assert normalize_disc_label("PULP_FICTION") == "Pulp Fiction"
|
||
assert normalize_disc_label("DIE_HARD_4.0_DE") == "Die Hard 4 0 De"
|
||
assert normalize_disc_label(" doppel raum ") == "doppel raum"
|
||
assert normalize_disc_label("") == ""
|
||
|
||
|
||
def test_label_mit_gemischter_schreibung_bleibt():
|
||
# Wer schon sauber benannt hat, wird nicht plattgewalzt
|
||
assert normalize_disc_label("Inception") == "Inception"
|
||
|
||
|
||
def test_omdb_runtime_parsing():
|
||
assert parse_runtime_minutes("142 min") == 142
|
||
assert parse_runtime_minutes("N/A") == 0
|
||
assert parse_runtime_minutes("") == 0
|
||
|
||
|
||
def test_omdb_jahr_parsing():
|
||
assert parse_year("1999") == 1999
|
||
assert parse_year("2005–2012") == 2005 # Serien-Zeitspanne
|
||
assert parse_year("N/A") is None
|
||
assert parse_year("") is None
|