gui/audio: Unit test can simulate button presses

This is better than calling audio_*() functions directly, since we can
make sure signals are wired up properly in glade.

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-12-25 17:11:58 -05:00
parent fd28d6830c
commit 5e96f40cf8
4 changed files with 58 additions and 12 deletions

View File

@ -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 */

View File

@ -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 */

View File

@ -258,8 +258,8 @@
<property name="icon_size">3</property>
</object>
</child>
<accelerator key="AudioPrev" signal="clicked"/>
<accelerator key="n" signal="clicked" modifiers="GDK_SHIFT_MASK"/>
<accelerator key="AudioPrev" signal="clicked"/>
</object>
<packing>
<property name="expand">False</property>
@ -286,8 +286,8 @@
<property name="icon_size">6</property>
</object>
</child>
<accelerator key="AudioPlay" signal="clicked"/>
<accelerator key="space" signal="clicked"/>
<accelerator key="AudioPlay" signal="clicked"/>
</object>
<packing>
<property name="expand">False</property>
@ -312,8 +312,8 @@
<property name="icon_size">6</property>
</object>
</child>
<accelerator key="AudioPlay" signal="clicked"/>
<accelerator key="space" signal="clicked"/>
<accelerator key="AudioPlay" signal="clicked"/>
</object>
<packing>
<property name="expand">False</property>
@ -339,8 +339,8 @@
<property name="icon_size">3</property>
</object>
</child>
<accelerator key="space" signal="clicked" modifiers="GDK_MOD1_MASK"/>
<accelerator key="AudioPlay" signal="clicked" modifiers="GDK_MOD1_MASK"/>
<accelerator key="space" signal="clicked" modifiers="GDK_MOD1_MASK"/>
</object>
<packing>
<property name="expand">False</property>
@ -367,8 +367,8 @@
<property name="icon_size">3</property>
</object>
</child>
<accelerator key="AudioNext" signal="clicked"/>
<accelerator key="n" signal="clicked"/>
<accelerator key="AudioNext" signal="clicked"/>
</object>
<packing>
<property name="expand">False</property>
@ -808,7 +808,7 @@ Manager</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="adjustment">o_progress</property>
<property name="round_digits">1</property>
<property name="round_digits">0</property>
<property name="draw_value">False</property>
<property name="value_pos">left</property>
<signal name="change-value" handler="__audio_seek" swapped="no"/>

View File

@ -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();
}