diff --git a/bdpl/analyze/__init__.py b/bdpl/analyze/__init__.py index b90bcc0..dabdd34 100644 --- a/bdpl/analyze/__init__.py +++ b/bdpl/analyze/__init__.py @@ -85,6 +85,7 @@ def _parse_disc_hints(bdmv_path: Path, clips: dict[str, ClipInfo] | None = None) # Build title → playlist mapping via index titles → movie objects obj_playlists: dict[int, list[int]] = {} obj_play_marks: dict[int, list[tuple[int, int]]] = {} + obj_jump_titles: dict[int, list[int]] = {} for obj in mo.objects: if obj.referenced_playlists: obj_playlists[obj.object_id] = obj.referenced_playlists @@ -96,10 +97,14 @@ def _parse_disc_hints(bdmv_path: Path, clips: dict[str, ClipInfo] | None = None) ] if marks: obj_play_marks[obj.object_id] = marks + jts = obj.referenced_titles + if jts: + obj_jump_titles[obj.object_id] = jts hints["movie_objects"] = { "count": len(mo.objects), "obj_playlists": obj_playlists, "obj_play_marks": obj_play_marks, + "obj_jump_titles": obj_jump_titles, } except Exception: log.debug("Failed to parse MovieObject.bdmv", exc_info=True) @@ -289,6 +294,16 @@ def _detect_special_features( # All buttons on this page target the same title — this is # either the main-play page or a chapter-selection page. chapter_selection_jt.update(jts) + continue + # A page where every button targets an episode playlist is an + # episode-selection page (e.g. per-episode CHAPTER menu). + all_episode = all( + title_to_mpls.get(jt_val - 1) in ep_playlists + for jt_val in jts + if title_to_mpls.get(jt_val - 1) is not None + ) + if all_episode: + chapter_selection_jt.update(jts) # --- Walk IG hints and build features ----------------------------------- seen: set[tuple[str, int | None]] = set() @@ -373,9 +388,12 @@ def _detect_special_features( # Supplement with title-hint specials not already covered by IG buttons. title_hint_entries = _title_hint_non_episode_entries(hints, classifications, episodes) existing_keys = {(feature.playlist, feature.chapter_start) for feature in features} + nav_playlists = _nav_playlists_from_hints(hints) for mpls, chapter_starts in title_hint_entries: if mpls in variant_mpls: continue + if mpls in nav_playlists: + continue pl = pl_by_name.get(mpls) if pl is None: continue @@ -477,15 +495,35 @@ def _nav_playlists_from_hints(hints: dict) -> set[str]: These are navigation playlists (disc intro, menu background) and should not be treated as special features. + + Follows one level of JumpTitle indirection: if the first_playback MO + jumps to a title whose MO plays a playlist, that playlist is included. """ index_hints = hints.get("index", {}) - obj_pl = hints.get("movie_objects", {}).get("obj_playlists", {}) + mo_hints = hints.get("movie_objects", {}) + obj_pl = mo_hints.get("obj_playlists", {}) + obj_jt = mo_hints.get("obj_jump_titles", {}) nav: set[str] = set() + + # Build title → movie_object map for JumpTitle resolution. + title_to_obj: dict[int, int] = { + entry["title"]: entry["movie_object"] for entry in index_hints.get("titles", []) + } + for key in ("first_playback_obj", "top_menu_obj"): obj_id = index_hints.get(key) - if obj_id is not None: - for pl_num in obj_pl.get(obj_id, []): - nav.add(f"{pl_num:05d}.mpls") + if obj_id is None: + continue + # Direct PlayPl commands. + for pl_num in obj_pl.get(obj_id, []): + nav.add(f"{pl_num:05d}.mpls") + # Follow JumpTitle → title → MO → PlayPl (one level). + for jt_num in obj_jt.get(obj_id, []): + title_idx = jt_num - 1 # JumpTitle operand is 1-based + target_obj = title_to_obj.get(title_idx) + if target_obj is not None: + for pl_num in obj_pl.get(target_obj, []): + nav.add(f"{pl_num:05d}.mpls") return nav diff --git a/tests/conftest.py b/tests/conftest.py index 49b1e06..39fea66 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -340,6 +340,54 @@ def disc25_analysis(disc25_path): return _analyze_fixture(disc25_path) +@pytest.fixture(scope="session") +def disc26_path() -> Path: + """Return path to bundled disc26 fixture.""" + return _fixture_path("disc26") + + +@pytest.fixture(scope="session") +def disc26_analysis(disc26_path): + """Run and cache full analysis for the bundled disc26 fixture.""" + return _analyze_fixture(disc26_path) + + +@pytest.fixture(scope="session") +def disc27_path() -> Path: + """Return path to bundled disc27 fixture.""" + return _fixture_path("disc27") + + +@pytest.fixture(scope="session") +def disc27_analysis(disc27_path): + """Run and cache full analysis for the bundled disc27 fixture.""" + return _analyze_fixture(disc27_path) + + +@pytest.fixture(scope="session") +def disc28_path() -> Path: + """Return path to bundled disc28 fixture.""" + return _fixture_path("disc28") + + +@pytest.fixture(scope="session") +def disc28_analysis(disc28_path): + """Run and cache full analysis for the bundled disc28 fixture.""" + return _analyze_fixture(disc28_path) + + +@pytest.fixture(scope="session") +def disc29_path() -> Path: + """Return path to bundled disc29 fixture.""" + return _fixture_path("disc29") + + +@pytest.fixture(scope="session") +def disc29_analysis(disc29_path): + """Run and cache full analysis for the bundled disc29 fixture.""" + return _analyze_fixture(disc29_path) + + @pytest.fixture def cli_runner() -> Callable[..., subprocess.CompletedProcess[str]]: """Return helper to invoke `python -m bdpl.cli` consistently in tests.""" diff --git a/tests/fixtures/disc26/CLIPINF/00000.clpi b/tests/fixtures/disc26/CLIPINF/00000.clpi new file mode 100644 index 0000000..6b0e656 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00000.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00001.clpi b/tests/fixtures/disc26/CLIPINF/00001.clpi new file mode 100644 index 0000000..0134763 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00001.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00002.clpi b/tests/fixtures/disc26/CLIPINF/00002.clpi new file mode 100644 index 0000000..850fc27 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00002.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00003.clpi b/tests/fixtures/disc26/CLIPINF/00003.clpi new file mode 100644 index 0000000..1c7d8f6 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00003.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00004.clpi b/tests/fixtures/disc26/CLIPINF/00004.clpi new file mode 100644 index 0000000..21b1bcf Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00004.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00005.clpi b/tests/fixtures/disc26/CLIPINF/00005.clpi new file mode 100644 index 0000000..9521eb9 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00005.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00006.clpi b/tests/fixtures/disc26/CLIPINF/00006.clpi new file mode 100644 index 0000000..1f61d66 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00006.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00007.clpi b/tests/fixtures/disc26/CLIPINF/00007.clpi new file mode 100644 index 0000000..7d718ce Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00007.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00008.clpi b/tests/fixtures/disc26/CLIPINF/00008.clpi new file mode 100644 index 0000000..2ac20c0 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00008.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00009.clpi b/tests/fixtures/disc26/CLIPINF/00009.clpi new file mode 100644 index 0000000..0fc2e8f Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00009.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00010.clpi b/tests/fixtures/disc26/CLIPINF/00010.clpi new file mode 100644 index 0000000..30095da Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00010.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00011.clpi b/tests/fixtures/disc26/CLIPINF/00011.clpi new file mode 100644 index 0000000..e81da94 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00011.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00012.clpi b/tests/fixtures/disc26/CLIPINF/00012.clpi new file mode 100644 index 0000000..80cd7e7 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00012.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00013.clpi b/tests/fixtures/disc26/CLIPINF/00013.clpi new file mode 100644 index 0000000..65e1135 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00013.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00014.clpi b/tests/fixtures/disc26/CLIPINF/00014.clpi new file mode 100644 index 0000000..5a95770 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00014.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00015.clpi b/tests/fixtures/disc26/CLIPINF/00015.clpi new file mode 100644 index 0000000..73baa33 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00015.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00016.clpi b/tests/fixtures/disc26/CLIPINF/00016.clpi new file mode 100644 index 0000000..9a9e83b Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00016.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00017.clpi b/tests/fixtures/disc26/CLIPINF/00017.clpi new file mode 100644 index 0000000..f453407 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00017.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00018.clpi b/tests/fixtures/disc26/CLIPINF/00018.clpi new file mode 100644 index 0000000..345ec93 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00018.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00019.clpi b/tests/fixtures/disc26/CLIPINF/00019.clpi new file mode 100644 index 0000000..5cb266d Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00019.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00020.clpi b/tests/fixtures/disc26/CLIPINF/00020.clpi new file mode 100644 index 0000000..4f93f5c Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00020.clpi differ diff --git a/tests/fixtures/disc26/CLIPINF/00021.clpi b/tests/fixtures/disc26/CLIPINF/00021.clpi new file mode 100644 index 0000000..10a34d9 Binary files /dev/null and b/tests/fixtures/disc26/CLIPINF/00021.clpi differ diff --git a/tests/fixtures/disc26/META/DL/bdmt_eng.xml b/tests/fixtures/disc26/META/DL/bdmt_eng.xml new file mode 100644 index 0000000..44b1cbd --- /dev/null +++ b/tests/fixtures/disc26/META/DL/bdmt_eng.xml @@ -0,0 +1,6 @@ + + + +TEST DISC 26 + + diff --git a/tests/fixtures/disc26/MovieObject.bdmv b/tests/fixtures/disc26/MovieObject.bdmv new file mode 100644 index 0000000..2f19a15 Binary files /dev/null and b/tests/fixtures/disc26/MovieObject.bdmv differ diff --git a/tests/fixtures/disc26/PLAYLIST/00000.mpls b/tests/fixtures/disc26/PLAYLIST/00000.mpls new file mode 100644 index 0000000..4c9199e Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00000.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00001.mpls b/tests/fixtures/disc26/PLAYLIST/00001.mpls new file mode 100644 index 0000000..5174a54 Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00001.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00002.mpls b/tests/fixtures/disc26/PLAYLIST/00002.mpls new file mode 100644 index 0000000..821cff9 Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00002.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00003.mpls b/tests/fixtures/disc26/PLAYLIST/00003.mpls new file mode 100644 index 0000000..a0d062e Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00003.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00004.mpls b/tests/fixtures/disc26/PLAYLIST/00004.mpls new file mode 100644 index 0000000..17edc51 Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00004.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00005.mpls b/tests/fixtures/disc26/PLAYLIST/00005.mpls new file mode 100644 index 0000000..0fcf9d0 Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00005.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00006.mpls b/tests/fixtures/disc26/PLAYLIST/00006.mpls new file mode 100644 index 0000000..b1f4d73 Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00006.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00007.mpls b/tests/fixtures/disc26/PLAYLIST/00007.mpls new file mode 100644 index 0000000..1806c1b Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00007.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00008.mpls b/tests/fixtures/disc26/PLAYLIST/00008.mpls new file mode 100644 index 0000000..efdcc56 Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00008.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00009.mpls b/tests/fixtures/disc26/PLAYLIST/00009.mpls new file mode 100644 index 0000000..0afe7c6 Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00009.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00010.mpls b/tests/fixtures/disc26/PLAYLIST/00010.mpls new file mode 100644 index 0000000..17e83b1 Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00010.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00011.mpls b/tests/fixtures/disc26/PLAYLIST/00011.mpls new file mode 100644 index 0000000..4d4e0a1 Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00011.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00012.mpls b/tests/fixtures/disc26/PLAYLIST/00012.mpls new file mode 100644 index 0000000..bf42dab Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00012.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00013.mpls b/tests/fixtures/disc26/PLAYLIST/00013.mpls new file mode 100644 index 0000000..8e1f744 Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00013.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00014.mpls b/tests/fixtures/disc26/PLAYLIST/00014.mpls new file mode 100644 index 0000000..b319c5e Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00014.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00015.mpls b/tests/fixtures/disc26/PLAYLIST/00015.mpls new file mode 100644 index 0000000..673f60e Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00015.mpls differ diff --git a/tests/fixtures/disc26/PLAYLIST/00016.mpls b/tests/fixtures/disc26/PLAYLIST/00016.mpls new file mode 100644 index 0000000..12de839 Binary files /dev/null and b/tests/fixtures/disc26/PLAYLIST/00016.mpls differ diff --git a/tests/fixtures/disc26/ics_menu.bin b/tests/fixtures/disc26/ics_menu.bin new file mode 100644 index 0000000..9ef685b Binary files /dev/null and b/tests/fixtures/disc26/ics_menu.bin differ diff --git a/tests/fixtures/disc26/index.bdmv b/tests/fixtures/disc26/index.bdmv new file mode 100644 index 0000000..392fde8 Binary files /dev/null and b/tests/fixtures/disc26/index.bdmv differ diff --git a/tests/fixtures/disc27/CLIPINF/00000.clpi b/tests/fixtures/disc27/CLIPINF/00000.clpi new file mode 100644 index 0000000..6b0e656 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00000.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00001.clpi b/tests/fixtures/disc27/CLIPINF/00001.clpi new file mode 100644 index 0000000..9e025ef Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00001.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00002.clpi b/tests/fixtures/disc27/CLIPINF/00002.clpi new file mode 100644 index 0000000..850fc27 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00002.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00003.clpi b/tests/fixtures/disc27/CLIPINF/00003.clpi new file mode 100644 index 0000000..1c7d8f6 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00003.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00004.clpi b/tests/fixtures/disc27/CLIPINF/00004.clpi new file mode 100644 index 0000000..6fad777 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00004.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00005.clpi b/tests/fixtures/disc27/CLIPINF/00005.clpi new file mode 100644 index 0000000..bcb45a6 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00005.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00006.clpi b/tests/fixtures/disc27/CLIPINF/00006.clpi new file mode 100644 index 0000000..51c3219 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00006.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00007.clpi b/tests/fixtures/disc27/CLIPINF/00007.clpi new file mode 100644 index 0000000..1798245 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00007.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00008.clpi b/tests/fixtures/disc27/CLIPINF/00008.clpi new file mode 100644 index 0000000..2ac20c0 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00008.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00009.clpi b/tests/fixtures/disc27/CLIPINF/00009.clpi new file mode 100644 index 0000000..0fc2e8f Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00009.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00010.clpi b/tests/fixtures/disc27/CLIPINF/00010.clpi new file mode 100644 index 0000000..7e136fc Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00010.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00011.clpi b/tests/fixtures/disc27/CLIPINF/00011.clpi new file mode 100644 index 0000000..d316e43 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00011.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00012.clpi b/tests/fixtures/disc27/CLIPINF/00012.clpi new file mode 100644 index 0000000..7c4fcda Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00012.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00013.clpi b/tests/fixtures/disc27/CLIPINF/00013.clpi new file mode 100644 index 0000000..6b624a8 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00013.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00014.clpi b/tests/fixtures/disc27/CLIPINF/00014.clpi new file mode 100644 index 0000000..87ab022 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00014.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00015.clpi b/tests/fixtures/disc27/CLIPINF/00015.clpi new file mode 100644 index 0000000..f440a70 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00015.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00016.clpi b/tests/fixtures/disc27/CLIPINF/00016.clpi new file mode 100644 index 0000000..8f4dedd Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00016.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00017.clpi b/tests/fixtures/disc27/CLIPINF/00017.clpi new file mode 100644 index 0000000..d5fc082 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00017.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00018.clpi b/tests/fixtures/disc27/CLIPINF/00018.clpi new file mode 100644 index 0000000..3128c53 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00018.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00019.clpi b/tests/fixtures/disc27/CLIPINF/00019.clpi new file mode 100644 index 0000000..421bdc7 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00019.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00020.clpi b/tests/fixtures/disc27/CLIPINF/00020.clpi new file mode 100644 index 0000000..0d364e9 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00020.clpi differ diff --git a/tests/fixtures/disc27/CLIPINF/00021.clpi b/tests/fixtures/disc27/CLIPINF/00021.clpi new file mode 100644 index 0000000..603c4f1 Binary files /dev/null and b/tests/fixtures/disc27/CLIPINF/00021.clpi differ diff --git a/tests/fixtures/disc27/META/DL/bdmt_eng.xml b/tests/fixtures/disc27/META/DL/bdmt_eng.xml new file mode 100644 index 0000000..07cbebd --- /dev/null +++ b/tests/fixtures/disc27/META/DL/bdmt_eng.xml @@ -0,0 +1,6 @@ + + + +TEST DISC 27 + + diff --git a/tests/fixtures/disc27/MovieObject.bdmv b/tests/fixtures/disc27/MovieObject.bdmv new file mode 100644 index 0000000..b285a37 Binary files /dev/null and b/tests/fixtures/disc27/MovieObject.bdmv differ diff --git a/tests/fixtures/disc27/PLAYLIST/00000.mpls b/tests/fixtures/disc27/PLAYLIST/00000.mpls new file mode 100644 index 0000000..4c9199e Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00000.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00001.mpls b/tests/fixtures/disc27/PLAYLIST/00001.mpls new file mode 100644 index 0000000..5174a54 Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00001.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00002.mpls b/tests/fixtures/disc27/PLAYLIST/00002.mpls new file mode 100644 index 0000000..68a270c Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00002.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00003.mpls b/tests/fixtures/disc27/PLAYLIST/00003.mpls new file mode 100644 index 0000000..feeb628 Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00003.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00004.mpls b/tests/fixtures/disc27/PLAYLIST/00004.mpls new file mode 100644 index 0000000..bd609b0 Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00004.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00005.mpls b/tests/fixtures/disc27/PLAYLIST/00005.mpls new file mode 100644 index 0000000..c2cda22 Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00005.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00006.mpls b/tests/fixtures/disc27/PLAYLIST/00006.mpls new file mode 100644 index 0000000..8f907da Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00006.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00007.mpls b/tests/fixtures/disc27/PLAYLIST/00007.mpls new file mode 100644 index 0000000..9b9582a Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00007.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00008.mpls b/tests/fixtures/disc27/PLAYLIST/00008.mpls new file mode 100644 index 0000000..ef207dd Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00008.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00009.mpls b/tests/fixtures/disc27/PLAYLIST/00009.mpls new file mode 100644 index 0000000..3210072 Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00009.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00010.mpls b/tests/fixtures/disc27/PLAYLIST/00010.mpls new file mode 100644 index 0000000..029fcc5 Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00010.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00011.mpls b/tests/fixtures/disc27/PLAYLIST/00011.mpls new file mode 100644 index 0000000..0a7f5f5 Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00011.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00012.mpls b/tests/fixtures/disc27/PLAYLIST/00012.mpls new file mode 100644 index 0000000..626f7f8 Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00012.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00013.mpls b/tests/fixtures/disc27/PLAYLIST/00013.mpls new file mode 100644 index 0000000..0673eda Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00013.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00014.mpls b/tests/fixtures/disc27/PLAYLIST/00014.mpls new file mode 100644 index 0000000..e789b86 Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00014.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00015.mpls b/tests/fixtures/disc27/PLAYLIST/00015.mpls new file mode 100644 index 0000000..f36124c Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00015.mpls differ diff --git a/tests/fixtures/disc27/PLAYLIST/00016.mpls b/tests/fixtures/disc27/PLAYLIST/00016.mpls new file mode 100644 index 0000000..45f32a6 Binary files /dev/null and b/tests/fixtures/disc27/PLAYLIST/00016.mpls differ diff --git a/tests/fixtures/disc27/ics_menu.bin b/tests/fixtures/disc27/ics_menu.bin new file mode 100644 index 0000000..9ac2fdb Binary files /dev/null and b/tests/fixtures/disc27/ics_menu.bin differ diff --git a/tests/fixtures/disc27/index.bdmv b/tests/fixtures/disc27/index.bdmv new file mode 100644 index 0000000..392fde8 Binary files /dev/null and b/tests/fixtures/disc27/index.bdmv differ diff --git a/tests/fixtures/disc28/CLIPINF/00000.clpi b/tests/fixtures/disc28/CLIPINF/00000.clpi new file mode 100644 index 0000000..d3508d6 Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00000.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00001.clpi b/tests/fixtures/disc28/CLIPINF/00001.clpi new file mode 100644 index 0000000..f2000df Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00001.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00002.clpi b/tests/fixtures/disc28/CLIPINF/00002.clpi new file mode 100644 index 0000000..3a29180 Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00002.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00003.clpi b/tests/fixtures/disc28/CLIPINF/00003.clpi new file mode 100644 index 0000000..6116922 Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00003.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00004.clpi b/tests/fixtures/disc28/CLIPINF/00004.clpi new file mode 100644 index 0000000..b64f185 Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00004.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00005.clpi b/tests/fixtures/disc28/CLIPINF/00005.clpi new file mode 100644 index 0000000..a680a06 Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00005.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00006.clpi b/tests/fixtures/disc28/CLIPINF/00006.clpi new file mode 100644 index 0000000..9341afd Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00006.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00007.clpi b/tests/fixtures/disc28/CLIPINF/00007.clpi new file mode 100644 index 0000000..f10e96f Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00007.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00008.clpi b/tests/fixtures/disc28/CLIPINF/00008.clpi new file mode 100644 index 0000000..0796705 Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00008.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00009.clpi b/tests/fixtures/disc28/CLIPINF/00009.clpi new file mode 100644 index 0000000..31500ba Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00009.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00010.clpi b/tests/fixtures/disc28/CLIPINF/00010.clpi new file mode 100644 index 0000000..0d510aa Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00010.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00011.clpi b/tests/fixtures/disc28/CLIPINF/00011.clpi new file mode 100644 index 0000000..1cc618b Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00011.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00012.clpi b/tests/fixtures/disc28/CLIPINF/00012.clpi new file mode 100644 index 0000000..aaa56e9 Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00012.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00013.clpi b/tests/fixtures/disc28/CLIPINF/00013.clpi new file mode 100644 index 0000000..b04da12 Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00013.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00014.clpi b/tests/fixtures/disc28/CLIPINF/00014.clpi new file mode 100644 index 0000000..03500c4 Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00014.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00015.clpi b/tests/fixtures/disc28/CLIPINF/00015.clpi new file mode 100644 index 0000000..216f1cb Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00015.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00016.clpi b/tests/fixtures/disc28/CLIPINF/00016.clpi new file mode 100644 index 0000000..32feaeb Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00016.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00017.clpi b/tests/fixtures/disc28/CLIPINF/00017.clpi new file mode 100644 index 0000000..760fcd6 Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00017.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00018.clpi b/tests/fixtures/disc28/CLIPINF/00018.clpi new file mode 100644 index 0000000..c089a06 Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00018.clpi differ diff --git a/tests/fixtures/disc28/CLIPINF/00019.clpi b/tests/fixtures/disc28/CLIPINF/00019.clpi new file mode 100644 index 0000000..7252dfc Binary files /dev/null and b/tests/fixtures/disc28/CLIPINF/00019.clpi differ diff --git a/tests/fixtures/disc28/META/DL/bdmt_eng.xml b/tests/fixtures/disc28/META/DL/bdmt_eng.xml new file mode 100644 index 0000000..0a83ea8 --- /dev/null +++ b/tests/fixtures/disc28/META/DL/bdmt_eng.xml @@ -0,0 +1,6 @@ + + + +TEST DISC 28 + + diff --git a/tests/fixtures/disc28/MovieObject.bdmv b/tests/fixtures/disc28/MovieObject.bdmv new file mode 100644 index 0000000..2d0f5c8 Binary files /dev/null and b/tests/fixtures/disc28/MovieObject.bdmv differ diff --git a/tests/fixtures/disc28/PLAYLIST/00000.mpls b/tests/fixtures/disc28/PLAYLIST/00000.mpls new file mode 100644 index 0000000..708c217 Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00000.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00001.mpls b/tests/fixtures/disc28/PLAYLIST/00001.mpls new file mode 100644 index 0000000..4da3789 Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00001.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00002.mpls b/tests/fixtures/disc28/PLAYLIST/00002.mpls new file mode 100644 index 0000000..36eb190 Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00002.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00003.mpls b/tests/fixtures/disc28/PLAYLIST/00003.mpls new file mode 100644 index 0000000..bec8948 Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00003.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00004.mpls b/tests/fixtures/disc28/PLAYLIST/00004.mpls new file mode 100644 index 0000000..78f3f27 Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00004.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00005.mpls b/tests/fixtures/disc28/PLAYLIST/00005.mpls new file mode 100644 index 0000000..cdb6709 Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00005.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00006.mpls b/tests/fixtures/disc28/PLAYLIST/00006.mpls new file mode 100644 index 0000000..95f27e6 Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00006.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00007.mpls b/tests/fixtures/disc28/PLAYLIST/00007.mpls new file mode 100644 index 0000000..ed41571 Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00007.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00008.mpls b/tests/fixtures/disc28/PLAYLIST/00008.mpls new file mode 100644 index 0000000..9b11c91 Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00008.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00009.mpls b/tests/fixtures/disc28/PLAYLIST/00009.mpls new file mode 100644 index 0000000..e775bb2 Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00009.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00010.mpls b/tests/fixtures/disc28/PLAYLIST/00010.mpls new file mode 100644 index 0000000..6b84c1f Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00010.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00011.mpls b/tests/fixtures/disc28/PLAYLIST/00011.mpls new file mode 100644 index 0000000..ddbb948 Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00011.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00012.mpls b/tests/fixtures/disc28/PLAYLIST/00012.mpls new file mode 100644 index 0000000..d9873e8 Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00012.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00013.mpls b/tests/fixtures/disc28/PLAYLIST/00013.mpls new file mode 100644 index 0000000..b293737 Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00013.mpls differ diff --git a/tests/fixtures/disc28/PLAYLIST/00014.mpls b/tests/fixtures/disc28/PLAYLIST/00014.mpls new file mode 100644 index 0000000..28224cb Binary files /dev/null and b/tests/fixtures/disc28/PLAYLIST/00014.mpls differ diff --git a/tests/fixtures/disc28/ics_menu.bin b/tests/fixtures/disc28/ics_menu.bin new file mode 100644 index 0000000..d0ef234 Binary files /dev/null and b/tests/fixtures/disc28/ics_menu.bin differ diff --git a/tests/fixtures/disc28/index.bdmv b/tests/fixtures/disc28/index.bdmv new file mode 100644 index 0000000..8da7d4b Binary files /dev/null and b/tests/fixtures/disc28/index.bdmv differ diff --git a/tests/fixtures/disc29/CLIPINF/00000.clpi b/tests/fixtures/disc29/CLIPINF/00000.clpi new file mode 100644 index 0000000..12b474d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00000.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00001.clpi b/tests/fixtures/disc29/CLIPINF/00001.clpi new file mode 100644 index 0000000..a90358d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00001.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00002.clpi b/tests/fixtures/disc29/CLIPINF/00002.clpi new file mode 100644 index 0000000..e411d8f Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00002.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00003.clpi b/tests/fixtures/disc29/CLIPINF/00003.clpi new file mode 100644 index 0000000..f0c7d58 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00003.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00004.clpi b/tests/fixtures/disc29/CLIPINF/00004.clpi new file mode 100644 index 0000000..1898dda Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00004.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00005.clpi b/tests/fixtures/disc29/CLIPINF/00005.clpi new file mode 100644 index 0000000..50041ef Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00005.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00006.clpi b/tests/fixtures/disc29/CLIPINF/00006.clpi new file mode 100644 index 0000000..6d63c68 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00006.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00007.clpi b/tests/fixtures/disc29/CLIPINF/00007.clpi new file mode 100644 index 0000000..d3dc0a4 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00007.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00008.clpi b/tests/fixtures/disc29/CLIPINF/00008.clpi new file mode 100644 index 0000000..5418fa7 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00008.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00009.clpi b/tests/fixtures/disc29/CLIPINF/00009.clpi new file mode 100644 index 0000000..d49899f Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00009.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00010.clpi b/tests/fixtures/disc29/CLIPINF/00010.clpi new file mode 100644 index 0000000..902cb8e Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00010.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00011.clpi b/tests/fixtures/disc29/CLIPINF/00011.clpi new file mode 100644 index 0000000..3310360 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00011.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00012.clpi b/tests/fixtures/disc29/CLIPINF/00012.clpi new file mode 100644 index 0000000..c9e9ddf Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00012.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00013.clpi b/tests/fixtures/disc29/CLIPINF/00013.clpi new file mode 100644 index 0000000..cbfb318 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00013.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00014.clpi b/tests/fixtures/disc29/CLIPINF/00014.clpi new file mode 100644 index 0000000..6b033b3 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00014.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00015.clpi b/tests/fixtures/disc29/CLIPINF/00015.clpi new file mode 100644 index 0000000..d130141 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00015.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00016.clpi b/tests/fixtures/disc29/CLIPINF/00016.clpi new file mode 100644 index 0000000..3310360 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00016.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00017.clpi b/tests/fixtures/disc29/CLIPINF/00017.clpi new file mode 100644 index 0000000..d49899f Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00017.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00018.clpi b/tests/fixtures/disc29/CLIPINF/00018.clpi new file mode 100644 index 0000000..ef74f30 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00018.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00019.clpi b/tests/fixtures/disc29/CLIPINF/00019.clpi new file mode 100644 index 0000000..111ade7 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00019.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00020.clpi b/tests/fixtures/disc29/CLIPINF/00020.clpi new file mode 100644 index 0000000..d3dc0a4 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00020.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00021.clpi b/tests/fixtures/disc29/CLIPINF/00021.clpi new file mode 100644 index 0000000..807ab6d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00021.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00022.clpi b/tests/fixtures/disc29/CLIPINF/00022.clpi new file mode 100644 index 0000000..cda1227 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00022.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00023.clpi b/tests/fixtures/disc29/CLIPINF/00023.clpi new file mode 100644 index 0000000..d49899f Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00023.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00024.clpi b/tests/fixtures/disc29/CLIPINF/00024.clpi new file mode 100644 index 0000000..111ade7 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00024.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00025.clpi b/tests/fixtures/disc29/CLIPINF/00025.clpi new file mode 100644 index 0000000..cbfb318 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00025.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00026.clpi b/tests/fixtures/disc29/CLIPINF/00026.clpi new file mode 100644 index 0000000..cbfb318 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00026.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00027.clpi b/tests/fixtures/disc29/CLIPINF/00027.clpi new file mode 100644 index 0000000..d130141 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00027.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00028.clpi b/tests/fixtures/disc29/CLIPINF/00028.clpi new file mode 100644 index 0000000..111ade7 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00028.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00029.clpi b/tests/fixtures/disc29/CLIPINF/00029.clpi new file mode 100644 index 0000000..97c72c1 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00029.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00030.clpi b/tests/fixtures/disc29/CLIPINF/00030.clpi new file mode 100644 index 0000000..26b0c36 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00030.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00031.clpi b/tests/fixtures/disc29/CLIPINF/00031.clpi new file mode 100644 index 0000000..963d2fd Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00031.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00032.clpi b/tests/fixtures/disc29/CLIPINF/00032.clpi new file mode 100644 index 0000000..cbfb318 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00032.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00033.clpi b/tests/fixtures/disc29/CLIPINF/00033.clpi new file mode 100644 index 0000000..807ab6d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00033.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00034.clpi b/tests/fixtures/disc29/CLIPINF/00034.clpi new file mode 100644 index 0000000..807ab6d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00034.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00035.clpi b/tests/fixtures/disc29/CLIPINF/00035.clpi new file mode 100644 index 0000000..d130141 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00035.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00036.clpi b/tests/fixtures/disc29/CLIPINF/00036.clpi new file mode 100644 index 0000000..3310360 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00036.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00037.clpi b/tests/fixtures/disc29/CLIPINF/00037.clpi new file mode 100644 index 0000000..d3dc0a4 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00037.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00038.clpi b/tests/fixtures/disc29/CLIPINF/00038.clpi new file mode 100644 index 0000000..963d2fd Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00038.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00039.clpi b/tests/fixtures/disc29/CLIPINF/00039.clpi new file mode 100644 index 0000000..c9e9ddf Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00039.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00040.clpi b/tests/fixtures/disc29/CLIPINF/00040.clpi new file mode 100644 index 0000000..b1c4415 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00040.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00041.clpi b/tests/fixtures/disc29/CLIPINF/00041.clpi new file mode 100644 index 0000000..97c72c1 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00041.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00042.clpi b/tests/fixtures/disc29/CLIPINF/00042.clpi new file mode 100644 index 0000000..cbfb318 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00042.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00043.clpi b/tests/fixtures/disc29/CLIPINF/00043.clpi new file mode 100644 index 0000000..26b0c36 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00043.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00044.clpi b/tests/fixtures/disc29/CLIPINF/00044.clpi new file mode 100644 index 0000000..5ef4805 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00044.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00045.clpi b/tests/fixtures/disc29/CLIPINF/00045.clpi new file mode 100644 index 0000000..f36af7c Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00045.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00046.clpi b/tests/fixtures/disc29/CLIPINF/00046.clpi new file mode 100644 index 0000000..d3dc0a4 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00046.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00047.clpi b/tests/fixtures/disc29/CLIPINF/00047.clpi new file mode 100644 index 0000000..5743f2e Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00047.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00048.clpi b/tests/fixtures/disc29/CLIPINF/00048.clpi new file mode 100644 index 0000000..ef74f30 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00048.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00049.clpi b/tests/fixtures/disc29/CLIPINF/00049.clpi new file mode 100644 index 0000000..cda1227 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00049.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00050.clpi b/tests/fixtures/disc29/CLIPINF/00050.clpi new file mode 100644 index 0000000..5ef4805 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00050.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00051.clpi b/tests/fixtures/disc29/CLIPINF/00051.clpi new file mode 100644 index 0000000..3310360 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00051.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00052.clpi b/tests/fixtures/disc29/CLIPINF/00052.clpi new file mode 100644 index 0000000..b1c4415 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00052.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00053.clpi b/tests/fixtures/disc29/CLIPINF/00053.clpi new file mode 100644 index 0000000..d49899f Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00053.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00054.clpi b/tests/fixtures/disc29/CLIPINF/00054.clpi new file mode 100644 index 0000000..902cb8e Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00054.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00055.clpi b/tests/fixtures/disc29/CLIPINF/00055.clpi new file mode 100644 index 0000000..6b033b3 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00055.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00056.clpi b/tests/fixtures/disc29/CLIPINF/00056.clpi new file mode 100644 index 0000000..c9e9ddf Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00056.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00057.clpi b/tests/fixtures/disc29/CLIPINF/00057.clpi new file mode 100644 index 0000000..d2930c3 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00057.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00058.clpi b/tests/fixtures/disc29/CLIPINF/00058.clpi new file mode 100644 index 0000000..d3dc0a4 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00058.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00059.clpi b/tests/fixtures/disc29/CLIPINF/00059.clpi new file mode 100644 index 0000000..5418fa7 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00059.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00060.clpi b/tests/fixtures/disc29/CLIPINF/00060.clpi new file mode 100644 index 0000000..26b0c36 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00060.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00061.clpi b/tests/fixtures/disc29/CLIPINF/00061.clpi new file mode 100644 index 0000000..902cb8e Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00061.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00062.clpi b/tests/fixtures/disc29/CLIPINF/00062.clpi new file mode 100644 index 0000000..807ab6d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00062.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00063.clpi b/tests/fixtures/disc29/CLIPINF/00063.clpi new file mode 100644 index 0000000..807ab6d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00063.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00064.clpi b/tests/fixtures/disc29/CLIPINF/00064.clpi new file mode 100644 index 0000000..4bd594e Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00064.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00065.clpi b/tests/fixtures/disc29/CLIPINF/00065.clpi new file mode 100644 index 0000000..42ada5e Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00065.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00066.clpi b/tests/fixtures/disc29/CLIPINF/00066.clpi new file mode 100644 index 0000000..d49899f Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00066.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00067.clpi b/tests/fixtures/disc29/CLIPINF/00067.clpi new file mode 100644 index 0000000..d130141 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00067.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00068.clpi b/tests/fixtures/disc29/CLIPINF/00068.clpi new file mode 100644 index 0000000..5ef4805 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00068.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00069.clpi b/tests/fixtures/disc29/CLIPINF/00069.clpi new file mode 100644 index 0000000..902cb8e Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00069.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00070.clpi b/tests/fixtures/disc29/CLIPINF/00070.clpi new file mode 100644 index 0000000..c4bf598 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00070.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00071.clpi b/tests/fixtures/disc29/CLIPINF/00071.clpi new file mode 100644 index 0000000..95e0816 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00071.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00072.clpi b/tests/fixtures/disc29/CLIPINF/00072.clpi new file mode 100644 index 0000000..d130141 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00072.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00073.clpi b/tests/fixtures/disc29/CLIPINF/00073.clpi new file mode 100644 index 0000000..3310360 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00073.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00074.clpi b/tests/fixtures/disc29/CLIPINF/00074.clpi new file mode 100644 index 0000000..902cb8e Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00074.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00075.clpi b/tests/fixtures/disc29/CLIPINF/00075.clpi new file mode 100644 index 0000000..4bd594e Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00075.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00076.clpi b/tests/fixtures/disc29/CLIPINF/00076.clpi new file mode 100644 index 0000000..807ab6d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00076.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00077.clpi b/tests/fixtures/disc29/CLIPINF/00077.clpi new file mode 100644 index 0000000..807ab6d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00077.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00078.clpi b/tests/fixtures/disc29/CLIPINF/00078.clpi new file mode 100644 index 0000000..807ab6d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00078.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00079.clpi b/tests/fixtures/disc29/CLIPINF/00079.clpi new file mode 100644 index 0000000..5418fa7 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00079.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00080.clpi b/tests/fixtures/disc29/CLIPINF/00080.clpi new file mode 100644 index 0000000..807ab6d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00080.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00081.clpi b/tests/fixtures/disc29/CLIPINF/00081.clpi new file mode 100644 index 0000000..6b033b3 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00081.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00082.clpi b/tests/fixtures/disc29/CLIPINF/00082.clpi new file mode 100644 index 0000000..6b033b3 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00082.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00083.clpi b/tests/fixtures/disc29/CLIPINF/00083.clpi new file mode 100644 index 0000000..cda1227 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00083.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00084.clpi b/tests/fixtures/disc29/CLIPINF/00084.clpi new file mode 100644 index 0000000..3310360 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00084.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00085.clpi b/tests/fixtures/disc29/CLIPINF/00085.clpi new file mode 100644 index 0000000..5418fa7 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00085.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00086.clpi b/tests/fixtures/disc29/CLIPINF/00086.clpi new file mode 100644 index 0000000..1514c97 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00086.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00087.clpi b/tests/fixtures/disc29/CLIPINF/00087.clpi new file mode 100644 index 0000000..d130141 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00087.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00088.clpi b/tests/fixtures/disc29/CLIPINF/00088.clpi new file mode 100644 index 0000000..97c72c1 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00088.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00089.clpi b/tests/fixtures/disc29/CLIPINF/00089.clpi new file mode 100644 index 0000000..6b033b3 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00089.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00090.clpi b/tests/fixtures/disc29/CLIPINF/00090.clpi new file mode 100644 index 0000000..902cb8e Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00090.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00091.clpi b/tests/fixtures/disc29/CLIPINF/00091.clpi new file mode 100644 index 0000000..b1c4415 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00091.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00092.clpi b/tests/fixtures/disc29/CLIPINF/00092.clpi new file mode 100644 index 0000000..26b0c36 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00092.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00093.clpi b/tests/fixtures/disc29/CLIPINF/00093.clpi new file mode 100644 index 0000000..e2bd391 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00093.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00094.clpi b/tests/fixtures/disc29/CLIPINF/00094.clpi new file mode 100644 index 0000000..6b033b3 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00094.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00095.clpi b/tests/fixtures/disc29/CLIPINF/00095.clpi new file mode 100644 index 0000000..807ab6d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00095.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00096.clpi b/tests/fixtures/disc29/CLIPINF/00096.clpi new file mode 100644 index 0000000..0edfb9f Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00096.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00097.clpi b/tests/fixtures/disc29/CLIPINF/00097.clpi new file mode 100644 index 0000000..111ade7 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00097.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00098.clpi b/tests/fixtures/disc29/CLIPINF/00098.clpi new file mode 100644 index 0000000..b1c4415 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00098.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00099.clpi b/tests/fixtures/disc29/CLIPINF/00099.clpi new file mode 100644 index 0000000..902cb8e Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00099.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00100.clpi b/tests/fixtures/disc29/CLIPINF/00100.clpi new file mode 100644 index 0000000..6b033b3 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00100.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00101.clpi b/tests/fixtures/disc29/CLIPINF/00101.clpi new file mode 100644 index 0000000..6b033b3 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00101.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00102.clpi b/tests/fixtures/disc29/CLIPINF/00102.clpi new file mode 100644 index 0000000..902cb8e Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00102.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00103.clpi b/tests/fixtures/disc29/CLIPINF/00103.clpi new file mode 100644 index 0000000..6b033b3 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00103.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00104.clpi b/tests/fixtures/disc29/CLIPINF/00104.clpi new file mode 100644 index 0000000..807ab6d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00104.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00105.clpi b/tests/fixtures/disc29/CLIPINF/00105.clpi new file mode 100644 index 0000000..24f1096 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00105.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00106.clpi b/tests/fixtures/disc29/CLIPINF/00106.clpi new file mode 100644 index 0000000..e2bd391 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00106.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00107.clpi b/tests/fixtures/disc29/CLIPINF/00107.clpi new file mode 100644 index 0000000..b1c4415 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00107.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00108.clpi b/tests/fixtures/disc29/CLIPINF/00108.clpi new file mode 100644 index 0000000..b1c4415 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00108.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00109.clpi b/tests/fixtures/disc29/CLIPINF/00109.clpi new file mode 100644 index 0000000..d20821d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00109.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00110.clpi b/tests/fixtures/disc29/CLIPINF/00110.clpi new file mode 100644 index 0000000..67792e2 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00110.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00111.clpi b/tests/fixtures/disc29/CLIPINF/00111.clpi new file mode 100644 index 0000000..1514c97 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00111.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00112.clpi b/tests/fixtures/disc29/CLIPINF/00112.clpi new file mode 100644 index 0000000..d20821d Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00112.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00113.clpi b/tests/fixtures/disc29/CLIPINF/00113.clpi new file mode 100644 index 0000000..d130141 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00113.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00114.clpi b/tests/fixtures/disc29/CLIPINF/00114.clpi new file mode 100644 index 0000000..6b033b3 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00114.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00115.clpi b/tests/fixtures/disc29/CLIPINF/00115.clpi new file mode 100644 index 0000000..6b033b3 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00115.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00116.clpi b/tests/fixtures/disc29/CLIPINF/00116.clpi new file mode 100644 index 0000000..cda1227 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00116.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00117.clpi b/tests/fixtures/disc29/CLIPINF/00117.clpi new file mode 100644 index 0000000..3310360 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00117.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00118.clpi b/tests/fixtures/disc29/CLIPINF/00118.clpi new file mode 100644 index 0000000..b1c4415 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00118.clpi differ diff --git a/tests/fixtures/disc29/CLIPINF/00119.clpi b/tests/fixtures/disc29/CLIPINF/00119.clpi new file mode 100644 index 0000000..26b0c36 Binary files /dev/null and b/tests/fixtures/disc29/CLIPINF/00119.clpi differ diff --git a/tests/fixtures/disc29/META/DL/bdmt_eng.xml b/tests/fixtures/disc29/META/DL/bdmt_eng.xml new file mode 100644 index 0000000..e93c9e8 --- /dev/null +++ b/tests/fixtures/disc29/META/DL/bdmt_eng.xml @@ -0,0 +1,6 @@ + + + +TEST DISC 29 + + diff --git a/tests/fixtures/disc29/MovieObject.bdmv b/tests/fixtures/disc29/MovieObject.bdmv new file mode 100644 index 0000000..148164c Binary files /dev/null and b/tests/fixtures/disc29/MovieObject.bdmv differ diff --git a/tests/fixtures/disc29/PLAYLIST/00000.mpls b/tests/fixtures/disc29/PLAYLIST/00000.mpls new file mode 100644 index 0000000..9541ca8 Binary files /dev/null and b/tests/fixtures/disc29/PLAYLIST/00000.mpls differ diff --git a/tests/fixtures/disc29/PLAYLIST/00001.mpls b/tests/fixtures/disc29/PLAYLIST/00001.mpls new file mode 100644 index 0000000..92bc632 Binary files /dev/null and b/tests/fixtures/disc29/PLAYLIST/00001.mpls differ diff --git a/tests/fixtures/disc29/PLAYLIST/00002.mpls b/tests/fixtures/disc29/PLAYLIST/00002.mpls new file mode 100644 index 0000000..aa48c08 Binary files /dev/null and b/tests/fixtures/disc29/PLAYLIST/00002.mpls differ diff --git a/tests/fixtures/disc29/PLAYLIST/00003.mpls b/tests/fixtures/disc29/PLAYLIST/00003.mpls new file mode 100644 index 0000000..cf3540c Binary files /dev/null and b/tests/fixtures/disc29/PLAYLIST/00003.mpls differ diff --git a/tests/fixtures/disc29/PLAYLIST/00004.mpls b/tests/fixtures/disc29/PLAYLIST/00004.mpls new file mode 100644 index 0000000..7f479a5 Binary files /dev/null and b/tests/fixtures/disc29/PLAYLIST/00004.mpls differ diff --git a/tests/fixtures/disc29/PLAYLIST/00005.mpls b/tests/fixtures/disc29/PLAYLIST/00005.mpls new file mode 100644 index 0000000..cc29046 Binary files /dev/null and b/tests/fixtures/disc29/PLAYLIST/00005.mpls differ diff --git a/tests/fixtures/disc29/ics_menu.bin b/tests/fixtures/disc29/ics_menu.bin new file mode 100644 index 0000000..6e6e1e2 Binary files /dev/null and b/tests/fixtures/disc29/ics_menu.bin differ diff --git a/tests/fixtures/disc29/index.bdmv b/tests/fixtures/disc29/index.bdmv new file mode 100644 index 0000000..5796e01 Binary files /dev/null and b/tests/fixtures/disc29/index.bdmv differ diff --git a/tests/test_disc26_scan.py b/tests/test_disc26_scan.py new file mode 100644 index 0000000..b51fcbe --- /dev/null +++ b/tests/test_disc26_scan.py @@ -0,0 +1,49 @@ +"""Integration tests for the disc26 fixture — 3-episode OVA disc with commentary + extras.""" + +from __future__ import annotations + +import pytest + +from bdpl.model import DiscAnalysis + +pytestmark = pytest.mark.integration + + +class TestDisc26Episodes: + def test_episode_count(self, disc26_analysis: DiscAnalysis) -> None: + assert len(disc26_analysis.episodes) == 3 + + def test_episodes_are_ordered(self, disc26_analysis: DiscAnalysis) -> None: + assert [ep.episode for ep in disc26_analysis.episodes] == list(range(1, 4)) + + def test_episode_playlists(self, disc26_analysis: DiscAnalysis) -> None: + assert [ep.playlist for ep in disc26_analysis.episodes] == [ + "00002.mpls", + "00003.mpls", + "00004.mpls", + ] + + def test_episode_durations(self, disc26_analysis: DiscAnalysis) -> None: + for ep in disc26_analysis.episodes: + dur_min = ep.duration_ms / 60000 + assert 25 < dur_min < 30, f"ep{ep.episode} duration {dur_min:.1f}min out of range" + + +class TestDisc26Specials: + def test_special_count(self, disc26_analysis: DiscAnalysis) -> None: + assert len(disc26_analysis.special_features) == 12 + + def test_no_commentary(self, disc26_analysis: DiscAnalysis) -> None: + commentary = [sf for sf in disc26_analysis.special_features if sf.category == "commentary"] + assert len(commentary) == 0 + + def test_has_creditless_ed(self, disc26_analysis: DiscAnalysis) -> None: + creditless = [ + sf for sf in disc26_analysis.special_features if sf.category == "creditless_ed" + ] + assert len(creditless) == 4 + + +class TestDisc26Metadata: + def test_disc_title(self, disc26_analysis: DiscAnalysis) -> None: + assert disc26_analysis.disc_title == "TEST DISC 26" diff --git a/tests/test_disc27_scan.py b/tests/test_disc27_scan.py new file mode 100644 index 0000000..7ec0db4 --- /dev/null +++ b/tests/test_disc27_scan.py @@ -0,0 +1,49 @@ +"""Integration tests for the disc27 fixture — 3-episode OVA disc with commentary + extras.""" + +from __future__ import annotations + +import pytest + +from bdpl.model import DiscAnalysis + +pytestmark = pytest.mark.integration + + +class TestDisc27Episodes: + def test_episode_count(self, disc27_analysis: DiscAnalysis) -> None: + assert len(disc27_analysis.episodes) == 3 + + def test_episodes_are_ordered(self, disc27_analysis: DiscAnalysis) -> None: + assert [ep.episode for ep in disc27_analysis.episodes] == list(range(1, 4)) + + def test_episode_playlists(self, disc27_analysis: DiscAnalysis) -> None: + assert [ep.playlist for ep in disc27_analysis.episodes] == [ + "00002.mpls", + "00003.mpls", + "00004.mpls", + ] + + def test_episode_durations(self, disc27_analysis: DiscAnalysis) -> None: + for ep in disc27_analysis.episodes: + dur_min = ep.duration_ms / 60000 + assert 26 < dur_min < 31, f"ep{ep.episode} duration {dur_min:.1f}min out of range" + + +class TestDisc27Specials: + def test_special_count(self, disc27_analysis: DiscAnalysis) -> None: + assert len(disc27_analysis.special_features) == 12 + + def test_no_commentary(self, disc27_analysis: DiscAnalysis) -> None: + commentary = [sf for sf in disc27_analysis.special_features if sf.category == "commentary"] + assert len(commentary) == 0 + + def test_has_creditless_ed(self, disc27_analysis: DiscAnalysis) -> None: + creditless = [ + sf for sf in disc27_analysis.special_features if sf.category == "creditless_ed" + ] + assert len(creditless) == 6 + + +class TestDisc27Metadata: + def test_disc_title(self, disc27_analysis: DiscAnalysis) -> None: + assert disc27_analysis.disc_title == "TEST DISC 27" diff --git a/tests/test_disc28_scan.py b/tests/test_disc28_scan.py new file mode 100644 index 0000000..eae2719 --- /dev/null +++ b/tests/test_disc28_scan.py @@ -0,0 +1,49 @@ +"""Integration tests for the disc28 fixture — 3-episode OVA disc with creditless + extras.""" + +from __future__ import annotations + +import pytest + +from bdpl.model import DiscAnalysis + +pytestmark = pytest.mark.integration + + +class TestDisc28Episodes: + def test_episode_count(self, disc28_analysis: DiscAnalysis) -> None: + assert len(disc28_analysis.episodes) == 3 + + def test_episodes_are_ordered(self, disc28_analysis: DiscAnalysis) -> None: + assert [ep.episode for ep in disc28_analysis.episodes] == list(range(1, 4)) + + def test_episode_playlists(self, disc28_analysis: DiscAnalysis) -> None: + assert [ep.playlist for ep in disc28_analysis.episodes] == [ + "00002.mpls", + "00003.mpls", + "00004.mpls", + ] + + def test_episode_durations(self, disc28_analysis: DiscAnalysis) -> None: + for ep in disc28_analysis.episodes: + dur_min = ep.duration_ms / 60000 + assert 25 < dur_min < 33, f"ep{ep.episode} duration {dur_min:.1f}min out of range" + + +class TestDisc28Specials: + def test_special_count(self, disc28_analysis: DiscAnalysis) -> None: + assert len(disc28_analysis.special_features) == 10 + + def test_no_commentary(self, disc28_analysis: DiscAnalysis) -> None: + commentary = [sf for sf in disc28_analysis.special_features if sf.category == "commentary"] + assert len(commentary) == 0 + + def test_has_creditless_ed(self, disc28_analysis: DiscAnalysis) -> None: + creditless = [ + sf for sf in disc28_analysis.special_features if sf.category == "creditless_ed" + ] + assert len(creditless) == 7 + + +class TestDisc28Metadata: + def test_disc_title(self, disc28_analysis: DiscAnalysis) -> None: + assert disc28_analysis.disc_title == "TEST DISC 28" diff --git a/tests/test_disc29_scan.py b/tests/test_disc29_scan.py new file mode 100644 index 0000000..b604577 --- /dev/null +++ b/tests/test_disc29_scan.py @@ -0,0 +1,35 @@ +"""Integration tests for the disc29 fixture — special disc with OVA + digital archives.""" + +from __future__ import annotations + +import pytest + +from bdpl.model import DiscAnalysis + +pytestmark = pytest.mark.integration + + +class TestDisc29Episodes: + def test_episode_count(self, disc29_analysis: DiscAnalysis) -> None: + assert len(disc29_analysis.episodes) == 1 + + def test_episode_playlist(self, disc29_analysis: DiscAnalysis) -> None: + assert disc29_analysis.episodes[0].playlist == "00002.mpls" + + def test_episode_duration(self, disc29_analysis: DiscAnalysis) -> None: + dur_min = disc29_analysis.episodes[0].duration_ms / 60000 + assert 43 < dur_min < 45, f"OVA duration {dur_min:.1f}min, expected ~44min" + + +class TestDisc29Specials: + def test_special_feature_count(self, disc29_analysis: DiscAnalysis) -> None: + assert len(disc29_analysis.special_features) == 3 + + def test_all_digital_archives(self, disc29_analysis: DiscAnalysis) -> None: + for sf in disc29_analysis.special_features: + assert sf.category == "digital_archive" + + +class TestDisc29Metadata: + def test_disc_title(self, disc29_analysis: DiscAnalysis) -> None: + assert disc29_analysis.disc_title == "TEST DISC 29" diff --git a/tests/test_disc8_scan.py b/tests/test_disc8_scan.py index 6d0b3c3..cede59e 100644 --- a/tests/test_disc8_scan.py +++ b/tests/test_disc8_scan.py @@ -5,10 +5,12 @@ - Episode 1 (00003.mpls, clip 00006): ~54 min, 4 scenes - Episode 2 (00004.mpls, clips 00007+00010): ~60 min, 4 scenes -Three specials are detected via IG menu analysis: -- 2 commentary tracks (JumpTitle to episode playlists from special feature pages) +One special is detected via IG menu analysis: - 1 lyrics credit ending (00005.mpls, ~5.2 min; 00006.mpls is a stream variant with different audio and is automatically excluded) + +The IG episode-selection page (page 4) targets both episode playlists; +these are correctly identified as navigation buttons, not commentary. """ import pytest @@ -46,27 +48,16 @@ def test_episode_durations_reasonable(self, disc8_analysis: DiscAnalysis) -> Non class TestDisc8Specials: def test_special_count(self, disc8_analysis: DiscAnalysis) -> None: - """Disc8 should have 3 specials (2 commentary + 1 lyrics ending).""" - assert len(disc8_analysis.special_features) == 3 - - def test_commentaries_detected(self, disc8_analysis: DiscAnalysis) -> None: - """Two commentary specials should reference the episode playlists.""" - commentaries = [sf for sf in disc8_analysis.special_features if sf.category == "commentary"] - assert len(commentaries) == 2 - assert {c.playlist for c in commentaries} == {"00003.mpls", "00004.mpls"} + """Disc8 should have 1 special (lyrics ending).""" + assert len(disc8_analysis.special_features) == 1 def test_lyrics_ending_detected(self, disc8_analysis: DiscAnalysis) -> None: - """One non-commentary special (lyrics credit ending) on 00005.mpls.""" - non_commentary = [ - sf for sf in disc8_analysis.special_features if sf.category != "commentary" - ] - assert len(non_commentary) == 1 - assert non_commentary[0].playlist == "00005.mpls" + """One special (lyrics credit ending) on 00005.mpls.""" + assert disc8_analysis.special_features[0].playlist == "00005.mpls" def test_specials_are_short(self, disc8_analysis: DiscAnalysis) -> None: """The lyrics ending special should be ~4–6 min.""" - lyrics = [sf for sf in disc8_analysis.special_features if sf.category != "commentary"] - for sf in lyrics: + for sf in disc8_analysis.special_features: dur_min = sf.duration_ms / 60_000 assert 4 < dur_min < 7, f"Special {sf.playlist} duration {dur_min:.1f}min out of range" diff --git a/tests/test_disc_matrix.py b/tests/test_disc_matrix.py index 3606d2d..eac5a0f 100644 --- a/tests/test_disc_matrix.py +++ b/tests/test_disc_matrix.py @@ -36,6 +36,10 @@ ("disc23_analysis", 5, ["00002.mpls"] * 5), ("disc24_analysis", 3, ["00002.mpls"] * 3), ("disc25_analysis", 1, ["00002.mpls"]), + ("disc26_analysis", 3, ["00002.mpls", "00003.mpls", "00004.mpls"]), + ("disc27_analysis", 3, ["00002.mpls", "00003.mpls", "00004.mpls"]), + ("disc28_analysis", 3, ["00002.mpls", "00003.mpls", "00004.mpls"]), + ("disc29_analysis", 1, ["00002.mpls"]), ], ) def test_disc_episode_expectation_matrix( @@ -60,7 +64,7 @@ def test_disc_episode_expectation_matrix( ("disc5_analysis", 14, 11), # 14 IG-derived, 11 visible content buttons ("disc6_analysis", 3, 3), # 3 title-hint specials ("disc7_analysis", 2, 2), # 2 title-hint specials (stream variants) - ("disc8_analysis", 3, 3), # 2 commentaries + 1 lyrics ending + ("disc8_analysis", 1, 1), # 1 lyrics ending ("disc9_analysis", 1, 1), # alt-audio variant detected as special ("disc10_analysis", 3, 3), # 3 commentaries (play_all-only episodes) ("disc11_analysis", 1, 1), # 1 short extra @@ -77,6 +81,10 @@ def test_disc_episode_expectation_matrix( ("disc23_analysis", 0, 0), # chapter-split disc with no extras ("disc24_analysis", 8, 8), # 1 extra + 3 commentary + 4 creditless ED ("disc25_analysis", 1, 1), # 1 digital archive + ("disc26_analysis", 12, 12), # 4 creditless_ed + 8 extra + ("disc27_analysis", 12, 12), # 6 creditless_ed + 6 extra + ("disc28_analysis", 10, 10), # 7 creditless_ed + 3 extra + ("disc29_analysis", 3, 3), # 3 digital archives ], ) def test_disc_special_visibility_expectation_matrix( @@ -122,6 +130,10 @@ def test_disc_special_visibility_expectation_matrix( "disc23_analysis", "disc24_analysis", "disc25_analysis", + "disc26_analysis", + "disc27_analysis", + "disc28_analysis", + "disc29_analysis", ], ) def test_disc_episode_segment_boundaries_matrix( @@ -171,6 +183,10 @@ def test_disc_episode_segment_boundaries_matrix( "disc23_analysis", "disc24_analysis", "disc25_analysis", + "disc26_analysis", + "disc27_analysis", + "disc28_analysis", + "disc29_analysis", ], ) def test_disc_special_boundary_semantics_matrix( @@ -227,6 +243,10 @@ def test_disc_special_boundary_semantics_matrix( ("disc23_analysis", 0), ("disc24_analysis", 0), ("disc25_analysis", 0), + ("disc26_analysis", 0), + ("disc27_analysis", 0), + ("disc28_analysis", 0), + ("disc29_analysis", 0), ], ) def test_disc_special_chapter_split_expectation_matrix( @@ -266,6 +286,10 @@ def test_disc_special_chapter_split_expectation_matrix( ("disc23_analysis", "TEST DISC 23"), ("disc24_analysis", "TEST DISC 24"), ("disc25_analysis", "TEST DISC 25"), + ("disc26_analysis", "TEST DISC 26"), + ("disc27_analysis", "TEST DISC 27"), + ("disc28_analysis", "TEST DISC 28"), + ("disc29_analysis", "TEST DISC 29"), ], ) def test_disc_title_extraction_matrix(