diff --git a/bios/DOS/DOSBox/DOSBOX.SF2 b/bios/Other/GeneralUser GS/GeneralUser-GS.sf2 similarity index 100% rename from bios/DOS/DOSBox/DOSBOX.SF2 rename to bios/Other/GeneralUser GS/GeneralUser-GS.sf2 diff --git a/emulators/dosbox-pure-unleashed.yml b/emulators/dosbox-pure-unleashed.yml index c03763bd..43b68e98 100644 --- a/emulators/dosbox-pure-unleashed.yml +++ b/emulators/dosbox-pure-unleashed.yml @@ -238,6 +238,7 @@ files: - name: "DOSBOX.SF2" description: "General MIDI SoundFont (any .sf2/.sf3 accepted)" + aliases: ["GeneralUser-GS.sf2"] required: false hle_fallback: true source_ref: "dosbox_pure_libretro.cpp:1407,2805" diff --git a/emulators/dosbox_pure.yml b/emulators/dosbox_pure.yml index 66f67d2b..70943b1b 100644 --- a/emulators/dosbox_pure.yml +++ b/emulators/dosbox_pure.yml @@ -202,6 +202,7 @@ files: - name: "DOSBOX.SF2" description: "General MIDI SoundFont (any .sf2/.sf3 accepted)" + aliases: ["GeneralUser-GS.sf2"] required: false hle_fallback: true source_ref: "dosbox_pure_libretro.cpp:1405 (scan classifies .SF* as a SoundFont), dosbox_pure_libretro.cpp:2495-2499 (path taken from the system directory), dosbox_pure_libretro.cpp:2806-2813 (auto-detected on the mounted C: drive)" diff --git a/tests/test_audit_regressions.py b/tests/test_audit_regressions.py index d79ddaea..34367c2b 100644 --- a/tests/test_audit_regressions.py +++ b/tests/test_audit_regressions.py @@ -2745,5 +2745,28 @@ class AnUnreadableArchiveIsSaidOutLoud(unittest.TestCase): common.resolve_local_file(entry, db) self.assertIn(f"unreadable archive {broken}", stderr.getvalue()) + +class GeneralUserGSReachesEveryCoreThatNamesIt(unittest.TestCase): + """The SoundFont was held as dosbox_pure's DOSBOX.SF2 alone: dosbox-staging + and dosbox-x, which name it GeneralUser-GS.sf2 and GeneralUser_GS.sf2, + shipped no General MIDI bank.""" + + def test_each_name_resolves_to_the_one_file(self): + import common # noqa: PLC0415 + + if not (ROOT / "database.json").exists(): + self.skipTest("database.json is not generated") + db = json.loads((ROOT / "database.json").read_text()) + profiles = common.load_emulator_profiles(str(ROOT / "emulators")) + held = "bios/Other/GeneralUser GS/GeneralUser-GS.sf2" + for emulator, name in (("dosbox_pure", "DOSBOX.SF2"), + ("dosbox-staging", "GeneralUser-GS.sf2"), + ("dosbox-x", "GeneralUser_GS.sf2")): + with self.subTest(emulator=emulator): + entry = next(f for f in profiles[emulator]["files"] if f["name"] == name) + path, _status = common.resolve_local_file( + {**entry, "source_profile": emulator}, db, dest_hint=entry.get("path", "")) + self.assertEqual(path, held) + if __name__ == "__main__": unittest.main()