ocarina/tests/gui/audio.c

137 lines
3.9 KiB
C

/*
* Copyright 2015 (c) Anna Schumaker.
*/
#include <core/audio.h>
#include <core/collection.h>
#include <core/core.h>
#include <core/idle.h>
#include <core/playlist.h>
#include <core/string.h>
#include <gui/audio.h>
#include <gui/builder.h>
#include <gui/window.h>
#include <tests/test.h>
struct core_init_data init_data = {
.audio_ops = &audio_ops,
};
static inline const gchar *test_get_label_text(const gchar *name)
{
return gtk_label_get_text(GTK_LABEL(gui_builder_widget(name)));
}
static inline bool test_get_toggle_state(const gchar *name)
{
return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gui_builder_widget(name)));
}
static inline gchar *test_get_pause_text()
{
return gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(gui_builder_widget("o_pause_after")));
}
static inline void test_set_pause_after(unsigned int n)
{
GtkComboBox *combo = GTK_COMBO_BOX(gui_builder_widget("o_pause_after"));
gtk_combo_box_set_active(combo, n + 1);
}
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()
{
struct track *track;
gchar *duration;
int argc = 0;
gtk_init(&argc, NULL);
gui_builder_init("share/ocarina/ocarina6.glade");
test_equal(gtk_widget_is_visible(gui_builder_widget("o_play")), true);
test_equal(gtk_widget_is_visible(gui_builder_widget("o_pause")), false);
test_str_equal(test_get_pause_text(), "(disabled)");
test_equal(test_get_toggle_state("o_favorite"), (bool)false);
test_equal(test_get_toggle_state("o_hide"), (bool)false);
core_init(&argc, NULL, &init_data);
collection_add("tests/Music/Hyrule Symphony");
while (idle_run_task()) {};
track = track_get(0);
playlist_add(PL_FAVORITED, track);
playlist_add(PL_HIDDEN, track);
audio_load(track);
duration = string_sec2str(track->tr_length);
test_equal(test_get_label_text("o_title"), track->tr_title);
test_equal(test_get_label_text("o_album"), track->tr_album->al_name);
test_equal(test_get_label_text("o_artist"), track->tr_artist->ar_name);
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);
g_free(duration);
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);
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);
test_set_pause_after(0);
audio_eos();
test_equal(audio_cur_track()->tr_track, 1);
test_str_equal(test_get_pause_text(), "(disabled)");
test_click_button("o_next");
test_equal(audio_cur_track()->tr_track, 2);
test_equal(test_get_toggle_state("o_favorite"), (bool)false);
test_equal(test_get_toggle_state("o_hide"), (bool)false);
test_set_pause_after(1);
test_str_equal(test_get_pause_text(), "next track");
audio_eos();
test_equal(audio_cur_track()->tr_track, 3);
test_str_equal(test_get_pause_text(), "this track");
audio_eos();
test_equal(audio_cur_track()->tr_track, 4);
test_str_equal(test_get_pause_text(), "(disabled)");
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");
test_equal((guint)gtk_adjustment_get_upper(
GTK_ADJUSTMENT(gui_builder_object("o_progress"))),
audio_cur_track()->tr_length);
gui_window_deinit();
gui_builder_deinit();
}
DECLARE_UNIT_TESTS(
UNIT_TEST("Audio GUI", test_audio),
);