diff --git a/gui/audio.c b/gui/audio.c index 8ce5befd..b7e81f99 100644 --- a/gui/audio.c +++ b/gui/audio.c @@ -71,7 +71,7 @@ void __audio_pause_enabled(GtkToggleButton *enabled, GtkSpinButton *count) audio_pause_after(val); } -void __audio_seek(GtkScrollType type, double value) +void __audio_seek(GtkRange *range, GtkScrollType type, double value, gpointer data) { audio_seek(value); } @@ -80,7 +80,7 @@ static int __audio_timeout(gpointer data) { GtkAdjustment *progress = data; - gtk_adjustment_set_upper(progress, audio_duration()); + gtk_adjustment_set_upper(progress, audio_duration() - GST_SECOND); gtk_adjustment_set_value(progress, audio_position()); __audio_set_time_label("o_position", audio_position() / GST_SECOND); @@ -99,3 +99,10 @@ void gui_audio_init() { g_timeout_add(500, __audio_timeout, gui_builder_object("o_progress")); } + +#ifdef CONFIG_TESTING +void test_gui_audio_timeout() +{ + __audio_timeout(gui_builder_object("o_progress")); +} +#endif /* CONFIG_TESTING */ diff --git a/include/gui/audio.h b/include/gui/audio.h index 44e3f2d4..4a62fbfb 100644 --- a/include/gui/audio.h +++ b/include/gui/audio.h @@ -10,4 +10,7 @@ extern struct audio_ops audio_ops; /* Called to initialize the GUI audio controls. */ void gui_audio_init(); +#ifdef CONFIG_TESTING +void test_gui_audio_timeout(); +#endif /* CONFIG_TESTING */ #endif /* OCARINA_GUI_AUDIO_H */ diff --git a/share/ocarina/ocarina6.glade b/share/ocarina/ocarina6.glade index 3e6a882f..d84d5085 100644 --- a/share/ocarina/ocarina6.glade +++ b/share/ocarina/ocarina6.glade @@ -258,8 +258,8 @@ 3 - + False @@ -286,8 +286,8 @@ 6 - + False @@ -312,8 +312,8 @@ 6 - + False @@ -339,8 +339,8 @@ 3 - + False @@ -367,8 +367,8 @@ 3 - + False @@ -808,7 +808,7 @@ Manager False center o_progress - 1 + 0 False left diff --git a/tests/gui/audio.c b/tests/gui/audio.c index 61f97b79..bd44e2ff 100644 --- a/tests/gui/audio.c +++ b/tests/gui/audio.c @@ -30,6 +30,22 @@ static inline int test_spin_button_value(const gchar *name) return gtk_spin_button_get_value(GTK_SPIN_BUTTON(gui_builder_widget(name))); } +static inline void test_click_button(const gchar *name) +{ + gtk_button_clicked(GTK_BUTTON(gui_builder_widget(name))); +} + +static void test_audio_seek(gint64 pos) +{ + GstState state; + + audio_seek(pos); + state = audio_cur_state(); + + while (state != GST_STATE_PAUSED && state != GST_STATE_PLAYING) + state = audio_cur_state(); +} + static void test_audio() { gchar *album, *artist, *duration; @@ -61,6 +77,7 @@ static void test_audio() test_equal(test_get_label_text("o_title"), track->tr_title); test_equal(test_get_label_text("o_album"), album); test_equal(test_get_label_text("o_artist"), artist); + test_equal(test_get_label_text("o_position"), "0:00"); test_equal(test_get_label_text("o_duration"), duration); test_equal(test_get_toggle_state("o_favorite"), (bool)true); test_equal(test_get_toggle_state("o_hide"), (bool)true); @@ -68,25 +85,44 @@ static void test_audio() g_free(artist); g_free(duration); - audio_play(); + test_click_button("o_play"); test_equal(gtk_widget_is_visible(gui_builder_widget("o_play")), false); test_equal(gtk_widget_is_visible(gui_builder_widget("o_pause")), true); - audio_pause(); + test_click_button("o_pause"); test_equal(gtk_widget_is_visible(gui_builder_widget("o_play")), true); test_equal(gtk_widget_is_visible(gui_builder_widget("o_pause")), false); - audio_pause_after(1); + test_click_button("o_pause_enabled"); + test_equal(test_get_toggle_state("o_pause_enabled"), (bool)true); + audio_eos(); + test_equal(audio_cur_track()->tr_track, 1); + test_equal(test_get_toggle_state("o_pause_enabled"), (bool)false); + + test_click_button("o_next"); + test_equal(audio_cur_track()->tr_track, 2); + + gtk_spin_button_set_value( + GTK_SPIN_BUTTON(gui_builder_widget("o_pause_count")), 1); test_equal(test_get_toggle_state("o_pause_enabled"), (bool)true); test_equal(test_spin_button_value("o_pause_count"), 1); audio_eos(); + test_equal(audio_cur_track()->tr_track, 3); test_equal(test_get_toggle_state("o_pause_enabled"), (bool)true); test_equal(test_spin_button_value("o_pause_count"), 0); audio_eos(); + test_equal(audio_cur_track()->tr_track, 4); test_equal(test_get_toggle_state("o_pause_enabled"), (bool)false); - test_equal(test_spin_button_value("o_pause_count"), 0); + + test_click_button("o_prev"); + test_equal(audio_cur_track()->tr_track, 3); + + test_click_button("o_pause"); + test_audio_seek(71 * GST_SECOND); + test_gui_audio_timeout(); + test_equal(test_get_label_text("o_position"), "1:11"); gui_builder_deinit(); }