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:
parent
fd28d6830c
commit
5e96f40cf8
11
gui/audio.c
11
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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user