class_name MusicPlayerTest extends GdUnitTestSuite func test_play_or_pause_toggles_play_state(): var music_player = MusicPlayer.new() var mock_audio = mock(AudioStreamPlayer) var mock_play_button = mock(TextureButton) music_player.audio_player = mock_audio music_player.play_button = mock_play_button music_player.play_icon = load("res://icons/play_icon_light.svg") music_player.pause_icon = load("res://icons/pause_icon_light.svg") # Initial state - paused mock_audio.stream_paused = true music_player.song_finished = false # First call should play music_player.play_or_pause() assert_false(mock_audio.stream_paused) assert_eq(mock_play_button.texture_normal, music_player.pause_icon) # Second call should pause music_player.play_or_pause() assert_true(mock_audio.stream_paused) assert_eq(mock_play_button.texture_normal, music_player.play_icon) func test_restart_resets_playback(): var music_player = MusicPlayer.new() var mock_audio = mock(AudioStreamPlayer) var mock_slider = mock(HSlider) music_player.audio_player = mock_audio music_player.progress_slider = mock_slider mock_audio.stream_paused = false mock_slider.value = 50.0 music_player.song_finished = true music_player.restart() assert_true(mock_audio.stop.was_called()) assert_false(mock_audio.stream_paused) assert_false(music_player.song_finished) assert_eq(mock_slider.value, 0) assert_true(mock_audio.play.was_called()) func test_pause_sets_correct_state(): var music_player = MusicPlayer.new() var mock_audio = mock(AudioStreamPlayer) var mock_play_button = mock(TextureButton) music_player.audio_player = mock_audio music_player.play_button = mock_play_button music_player.play_icon = load("res://icons/play_icon_light.svg") mock_audio.stream_paused = false music_player.pause() assert_true(mock_audio.stream_paused) assert_eq(mock_play_button.texture_normal, music_player.play_icon) func test_format_time_correctly_formats_seconds(): var music_player = MusicPlayer.new() assert_eq(music_player.format_time(65.0), "01:05") assert_eq(music_player.format_time(0.0), "00:00") assert_eq(music_player.format_time(3661.0), "61:01") func test_format_text_hides_info_when_configured(): var music_player = MusicPlayer.new() # Test with hide_beginning and hide_length Settings.hide_beginning = true Settings.hide_length = true Settings.hide_for_seconds = 5.0 assert_eq(music_player.format_text(3.0, 100.0), "??:?? / ??:??") Settings.hide_beginning = false Settings.hide_length = true assert_eq(music_player.format_text(10.0, 100.0), "00:10 / ??:??") Settings.hide_beginning = true Settings.hide_length = false assert_eq(music_player.format_text(3.0, 100.0), "??:?? / 01:40") Settings.hide_beginning = false Settings.hide_length = false assert_eq(music_player.format_text(10.0, 100.0), "00:10 / 01:40") # Reset Settings.hide_beginning = false Settings.hide_length = false func test_on_drag_started_sets_is_changing(): var music_player = MusicPlayer.new() assert_false(music_player.is_changing) music_player._on_drag_started() assert_true(music_player.is_changing) func test_on_drag_ended_updates_position(): var music_player = MusicPlayer.new() var mock_audio = mock(AudioStreamPlayer) var mock_slider = mock(HSlider) music_player.audio_player = mock_audio music_player.progress_slider = mock_slider mock_slider.value = 30.0 music_player.is_changing = true music_player._on_drag_ended(true) assert_false(music_player.is_changing) assert_true(mock_audio.seek.was_called_with([30.0])) assert_eq(music_player.playback_position, 30.0) func test_seek_updates_slider_and_position(): var music_player = MusicPlayer.new() var mock_audio = mock(AudioStreamPlayer) var mock_slider = mock(HSlider) music_player.audio_player = mock_audio music_player.progress_slider = mock_slider mock_slider.value = 10.0 music_player.seek(5.0) assert_eq(mock_slider.value, 15.0) assert_true(mock_audio.seek.was_called_with([15.0])) assert_eq(music_player.playback_position, 15.0) func test_change_volume_updates_slider(): var music_player = MusicPlayer.new() var mock_slider = mock(HSlider) music_player.volume_slider = mock_slider mock_slider.value = 0.5 music_player.change_volume(0.1) assert_eq(mock_slider.value, 0.6) assert_true(mock_slider.change_volume.was_called_with([0.6]))