/* * Copyright 2015 (c) Anna Schumaker. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include 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_init() { g_assert_cmpstr(gtk_label_get_text(gui_album_tag()), ==, " "); g_assert_cmpstr(gtk_label_get_text(gui_artist_tag()), ==, " "); g_assert_cmpstr(gtk_label_get_text(gui_title_tag()), ==, " "); } static void test_audio_load() { struct track *track = track_get(0); audio_load(track); g_assert_cmpstr(gtk_label_get_text(gui_album_tag()), ==, track->tr_album->al_name); g_assert_cmpstr(gtk_label_get_text(gui_artist_tag()), ==, track->tr_album->al_artist->ar_name); g_assert_cmpstr(gtk_label_get_text(gui_title_tag()), ==, track->tr_title); } static void test_audio() { struct db_entry *dbe, *next; struct track *track; gchar *duration; audio_load(track_get(1)); audio_pause(); g_assert_true(gtk_widget_is_visible(gui_builder_widget("o_play"))); g_assert_false(gtk_widget_is_visible(gui_builder_widget("o_pause"))); g_assert_cmpstr_free(test_get_pause_text(), ==, "(disabled)"); g_assert_false(test_get_toggle_state("favorite_button")); g_assert_false(test_get_toggle_state("hide_button")); db_for_each(dbe, next, track_db_get()) { if (TRACK(dbe)->tr_track == 1) { track = TRACK(dbe); break; } } playlist_add(PL_SYSTEM, "Favorites", track); playlist_add(PL_SYSTEM, "Hidden", track); g_assert_false(playlist_has(PL_SYSTEM, "Collection", track)); audio_load(track); g_assert_cmpuint(audio_cur_track()->tr_track, ==, track->tr_track); duration = string_sec2str(track->tr_length); g_assert_cmpstr(test_get_label_text("o_position"), ==, "0:00"); g_assert_cmpstr(test_get_label_text("o_duration"), ==, duration); g_assert_true(test_get_toggle_state("favorite_button")); g_assert_true(test_get_toggle_state("hide_button")); g_free(duration); test_click_button("o_play"); g_assert_false(gtk_widget_is_visible(gui_builder_widget("o_play"))); g_assert_true(gtk_widget_is_visible(gui_builder_widget("o_pause"))); test_click_button("o_pause"); g_assert_true(gtk_widget_is_visible(gui_builder_widget("o_play"))); g_assert_false(gtk_widget_is_visible(gui_builder_widget("o_pause"))); test_set_pause_after(0); audio_eos(); g_assert_cmpuint(audio_cur_track()->tr_track, ==, 2); g_assert_cmpstr_free(test_get_pause_text(), ==, "(disabled)"); test_click_button("o_next"); g_assert_cmpuint(audio_cur_track()->tr_track, ==, 3); g_assert_false(test_get_toggle_state("favorite_button")); g_assert_false(test_get_toggle_state("hide_button")); test_set_pause_after(1); g_assert_cmpstr_free(test_get_pause_text(), ==, "next track"); audio_eos(); g_assert_cmpuint(audio_cur_track()->tr_track, ==, 4); g_assert_cmpstr_free(test_get_pause_text(), ==, "this track"); audio_eos(); g_assert_cmpuint(audio_cur_track()->tr_track, ==, 5); g_assert_cmpstr_free(test_get_pause_text(), ==, "(disabled)"); test_click_button("o_prev"); g_assert_cmpuint(audio_cur_track()->tr_track, ==, 4); test_click_button("o_pause"); test_audio_seek(71 * GST_SECOND); test_gui_audio_timeout(); g_assert_cmpstr(test_get_label_text("o_position"), ==, "1:11"); g_assert_cmpuint(gtk_adjustment_get_upper(GTK_ADJUSTMENT(gui_builder_object("o_progress"))), ==, audio_cur_track()->tr_length); } int main(int argc, char **argv) { int ret; gtk_init(&argc, NULL); core_init(&argc, &argv, &init_data); gui_builder_init("share/ocarina/ocarina.ui"); gui_model_init(); gui_filter_init(); gui_treeview_init(); gui_sidebar_init(); gui_playlist_init(); gui_audio_init(); gui_pl_library_add("tests/Music/Hyrule Symphony"); while (idle_run_task()) {}; g_test_init(&argc, &argv, NULL); g_test_add_func("/Gui/Audio/Init", test_audio_init); g_test_add_func("/Gui/Audio/Load", test_audio_load); g_test_add_func("/Gui/Audio/Test", test_audio); ret = g_test_run(); core_deinit(); gui_audio_deinit(); gui_filter_deinit(); gui_treeview_deinit(); gui_model_deinit(); gui_window_deinit(); gui_builder_deinit(); return ret; }