# test_bgm_jukebox_parity.gd —— 40250 客户端 BGM 点唱机与地图音乐配置回归测试 extends SceneTree const SystemClass = preload("res://bgm_jukebox_system.gd") var _passed: int = 0 var _failed: int = 0 func _assert(cond: bool, msg: String) -> void: if cond: _passed += 1 print(" [PASS] %s" % msg) else: _failed += 1 printerr(" [FAIL] %s" % msg) func _init() -> void: print("\n=== Running test_bgm_jukebox_parity (Batch 28 Direction 4) ===") _test_playback_controls() _test_volume_clamping() _test_map_default_transitions() _test_custom_jukebox_overrides() print("\n=== Result: %d Passed, %d Failed ===" % [_passed, _failed]) if _failed == 0: print("ALL TESTS PASSED!\n") else: printerr("SOME TESTS FAILED!\n") quit(0 if _failed == 0 else 1) func _test_playback_controls() -> void: print("\n--- Test 1: BGM Playback Controls & Track Registry ---") var juke = SystemClass.new() # 1. Play canonical track var p_ok = juke.play_bgm("open_the_gate.mp3", true) _assert(p_ok == true, "Play canonical track open_the_gate.mp3") _assert(juke.is_playing == true, "Player is playing") _assert(juke.current_track == "open_the_gate.mp3", "Current track matches") _assert(juke.loop_enabled == true, "Loop is enabled") # 2. Reject non-canonical track var p_fail = juke.play_bgm("unknown_external_audio.mp3") _assert(p_fail == false, "Reject unregistered track") # 3. Stop playback juke.stop_bgm() _assert(juke.is_playing == false, "Playback stopped") _assert(juke.current_track == "", "Current track cleared") func _test_volume_clamping() -> void: print("\n--- Test 2: Volume Range Clamping (0.0 to 1.0) ---") var juke = SystemClass.new() juke.set_volume(-0.5) _assert(juke.volume == 0.0, "Volume clamped at 0.0") juke.set_volume(1.8) _assert(juke.volume == 1.0, "Volume clamped at 1.0") juke.set_volume(0.65) _assert(is_equal_approx(juke.volume, 0.65), "Volume set to 0.65 (65%)") func _test_map_default_transitions() -> void: print("\n--- Test 3: Map Default BGM Transitions ---") var juke = SystemClass.new() # Enter Login Screen -> enter_the_east.mp3 var t_login = juke.on_enter_map("intro_login") _assert(t_login == "enter_the_east.mp3", "Login screen plays enter_the_east.mp3") _assert(juke.current_track == "enter_the_east.mp3", "Current track updated to login theme") # Enter Yongbi Desert -> desert.mp3 var t_desert = juke.on_enter_map("metin2_map_n_desert_01") _assert(t_desert == "desert.mp3", "Desert map plays desert.mp3") _assert(juke.current_track == "desert.mp3", "Current track updated to desert") func _test_custom_jukebox_overrides() -> void: print("\n--- Test 4: Jukebox Custom Map Overrides & Restoration ---") var juke = SystemClass.new() # Default for a1 is open_the_gate.mp3 _assert(juke.get_effective_map_bgm("metin2_map_a1") == "open_the_gate.mp3", "Default a1 track is open_the_gate.mp3") # Custom override: change a1 to save_the_world.mp3 var o_ok = juke.set_custom_map_bgm("metin2_map_a1", "save_the_world.mp3") _assert(o_ok == true, "Overrode a1 BGM to save_the_world.mp3") _assert(juke.get_effective_map_bgm("metin2_map_a1") == "save_the_world.mp3", "Effective BGM is now custom track") # Reset override juke.reset_custom_map_bgm("metin2_map_a1") _assert(juke.get_effective_map_bgm("metin2_map_a1") == "open_the_gate.mp3", "Restored to default track on reset")