/* * Copyright 2016 (c) Anna Schumaker. */ #include #include #include #include #include #include #include static void *test_queue_init(struct queue *queue, void *data) { return gui_queue_alloc(NULL, queue, "Test Queue", GQ_CAN_RANDOM | GQ_CAN_REPEAT | GQ_CAN_DISABLE); } static void test_queue_save(struct queue *queue, unsigned int row) {} static struct queue_ops test_ops = { .qop_init = test_queue_init, .qop_deinit = gui_queue_free, .qop_cleared = gui_queue_model_clear, .qop_added = gui_queue_model_add, .qop_removed = gui_queue_model_remove, .qop_save = test_queue_save, .qop_updated = gui_queue_model_update, }; struct core_init_data init_data = { .playlist_ops = &test_ops, }; static void test_queue() { GtkToggleButton *random; GtkWidget *random_img; struct gui_queue *gq; GtkEntry *search; struct queue q; search = GTK_ENTRY(gui_builder_widget("o_search")); random = GTK_TOGGLE_BUTTON(gui_builder_widget("o_random")); random_img = gtk_button_get_image(GTK_BUTTON(random)); /* Test initialization */ queue_init(&q, Q_ENABLED, &test_ops, NULL); gq = gui_queue(&q); g_assert_true(gui_queue_can_random(gq)); g_assert_true(gui_queue_can_repeat(gq)); g_assert_true(gui_queue_can_disable(gq)); gq->gq_flags = 0; g_assert_false(gui_queue_can_random(gq)); g_assert_false(gui_queue_can_repeat(gq)); g_assert_false(gui_queue_can_disable(gq)); gtk_entry_set_text(search, "Test text"); /* Show a queue where random and repeat are disabled */ gui_queue_show(gq); g_assert_false(gtk_widget_get_sensitive(GTK_WIDGET(random))); g_assert_false(gtk_toggle_button_get_active(random)); g_assert_false(gtk_widget_get_sensitive(random_img)); g_assert_cmpstr(gtk_entry_get_text(search), ==, ""); /* Test clicking random button. */ gtk_toggle_button_set_active(random, true); g_assert_true(gtk_widget_get_sensitive(random_img)); g_assert_true(queue_has_flag(&q, Q_RANDOM)); gtk_toggle_button_set_active(random, false); g_assert_false(gtk_widget_get_sensitive(random_img)); g_assert_false(queue_has_flag(&q, Q_RANDOM)); /* Show a queue where random and repeat are enabled */ gq->gq_flags = GQ_CAN_RANDOM | GQ_CAN_REPEAT | GQ_CAN_DISABLE; q.q_flags = Q_RANDOM | Q_REPEAT | Q_ENABLED; gui_queue_show(gq); g_assert_true(gtk_widget_get_sensitive(GTK_WIDGET(random))); g_assert_true(gtk_toggle_button_get_active(random)); g_assert_true(gtk_widget_get_sensitive(random_img)); /* Attempt to show a NULL pointer */ gui_queue_show(NULL); g_assert_false(gtk_widget_get_sensitive(GTK_WIDGET(search))); g_assert_false(gtk_widget_get_sensitive(GTK_WIDGET(random))); g_assert_false(gtk_toggle_button_get_active(random)); g_assert_false(gtk_widget_get_sensitive(random_img)); queue_deinit(&q); g_assert_null(gui_queue(&q)); } static void test_tracks() { struct db_entry *dbe, *next; GtkTreeModel *filter; struct gui_queue *gq; GtkEntry *search; search = GTK_ENTRY(gui_builder_widget("o_search")); gq = gui_queue(playlist_get_queue(PL_SYSTEM, "Collection")); gui_queue_show(gq); playlist_new(PL_LIBRARY, "tests/Music/Hyrule Symphony"); while (idle_run_task() == true) {} filter = GTK_TREE_MODEL(gui_view_get_filter()); g_assert_nonnull(gq); g_assert_nonnull(filter); g_assert_cmpuint(gtk_tree_model_iter_n_children(filter, NULL), ==, 13); gtk_entry_set_text(search, "zelda"); g_signal_emit_by_name(search, "search-changed"); g_assert_cmpuint(gtk_tree_model_iter_n_children(filter, NULL), ==, 2); gtk_entry_set_text(search, ""); g_signal_emit_by_name(search, "search-changed"); g_assert_cmpuint(gtk_tree_model_iter_n_children(filter, NULL), ==, 13); db_for_each(dbe, next, track_db_get()) { if (TRACK(dbe)->tr_track == 4) { playlist_remove(PL_SYSTEM, "Collection", TRACK(dbe)); break; } } g_assert_cmpuint(gtk_tree_model_iter_n_children(filter, NULL), ==, 12); gui_queue_show(NULL); } int main(int argc, char **argv) { int ret; gtk_init(&argc, NULL); gui_builder_init("share/ocarina/ocarina.ui"); core_init(&argc, NULL, &init_data); gui_queue_model_init(); gui_view_init(); gui_queue_init(); while (idle_run_task()) {}; g_test_init(&argc, &argv, NULL); g_test_add_func("/Gui/Queue", test_queue); g_test_add_func("/Gui/Queue/Tracks", test_tracks); ret = g_test_run(); core_deinit(); gui_builder_deinit(); return ret; }