/* * Copyright 2016 (c) Anna Schumaker. */ #define TEST_NEED_AUDIO #define TEST_NEED_COLLECTION #define TEST_NEED_PLAYLIST #define TEST_NEED_SIDEBAR #define TEST_NEED_WINDOW #include #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, *repeat; GtkWidget *random_img, *repeat_img; GtkTreeView *treeview; struct gui_queue *gq; GtkSwitch *enable; GtkEntry *search; struct queue q; int argc = 0; gtk_init(&argc, NULL); gui_builder_init("share/ocarina/ocarina6.glade"); gui_queue_model_init(); gui_view_init(); gui_queue_init(); while (idle_run_task()) {}; search = GTK_ENTRY(gui_builder_widget("o_search")); enable = GTK_SWITCH(gui_builder_widget("o_enable")); random = GTK_TOGGLE_BUTTON(gui_builder_widget("o_random")); repeat = GTK_TOGGLE_BUTTON(gui_builder_widget("o_repeat")); random_img = gtk_button_get_image(GTK_BUTTON(random)); repeat_img = gtk_button_get_image(GTK_BUTTON(repeat)); treeview = GTK_TREE_VIEW(gui_builder_widget("o_treeview")); /* Test initialization */ queue_init(&q, 0, &test_ops, NULL); gq = gui_queue(&q); test_equal((void *)gq->gq_queue, (void *)&q); test_equal(gui_queue_can_random(gq), (bool)true); test_equal(gui_queue_can_repeat(gq), (bool)true); test_equal(gui_queue_can_disable(gq), (bool)true); gq->gq_flags = 0; test_equal(gui_queue_can_random(gq), (bool)false); test_equal(gui_queue_can_repeat(gq), (bool)false); test_equal(gui_queue_can_disable(gq), (bool)false); gtk_entry_set_text(search, "Test text"); /* Show a queue where random, repeat, and switch are disabled */ gui_queue_show(gq); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(random)), false); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(repeat)), false); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(enable)), false); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(treeview)), false); test_equal(gtk_toggle_button_get_active(random), false); test_equal(gtk_toggle_button_get_active(repeat), false); test_equal(gtk_switch_get_active(enable), false); test_equal(gtk_widget_get_sensitive(random_img), false); test_equal(gtk_widget_get_sensitive(repeat_img), false); test_equal(gtk_entry_get_text(search), ""); /* Test clicking random button. */ gtk_toggle_button_set_active(random, true); test_equal(gtk_widget_get_sensitive(random_img), true); test_equal(queue_has_flag(&q, Q_RANDOM), (bool)true); gtk_toggle_button_set_active(random, false); test_equal(gtk_widget_get_sensitive(random_img), false); test_equal(queue_has_flag(&q, Q_RANDOM), (bool)false); /* Test clicking repeat button. */ gtk_toggle_button_set_active(repeat, true); test_equal(gtk_widget_get_sensitive(repeat_img), true); test_equal(queue_has_flag(&q, Q_REPEAT), (bool)true); gtk_toggle_button_set_active(repeat, false); test_equal(gtk_widget_get_sensitive(repeat_img), false); test_equal(queue_has_flag(&q, Q_REPEAT), (bool)false); /* Test clicking enabled switch. */ gtk_switch_set_active(enable, true); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(treeview)), true); test_equal(queue_has_flag(&q, Q_ENABLED), (bool)true); gtk_switch_set_active(enable, false); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(treeview)), false); test_equal(queue_has_flag(&q, Q_ENABLED), (bool)false); /* Show a queue where random, repeat, and switch 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); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(random)), true); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(repeat)), true); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(enable)), true); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(treeview)), true); test_equal(gtk_toggle_button_get_active(random), true); test_equal(gtk_toggle_button_get_active(repeat), true); test_equal(gtk_switch_get_active(enable), true); test_equal(gtk_widget_get_sensitive(random_img), true); test_equal(gtk_widget_get_sensitive(repeat_img), true); /* Attempt to show a NULL pointer */ gui_queue_show(NULL); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(search)), false); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(random)), false); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(repeat)), false); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(enable)), false); test_equal(gtk_widget_get_sensitive(GTK_WIDGET(treeview)), false); test_equal(gtk_toggle_button_get_active(random), false); test_equal(gtk_toggle_button_get_active(repeat), false); test_equal(gtk_switch_get_active(enable), false); test_equal(gtk_widget_get_sensitive(random_img), false); test_equal(gtk_widget_get_sensitive(repeat_img), false); queue_deinit(&q); test_equal((void *)gui_queue(&q), NULL); } static void test_tracks() { struct db_entry *dbe, *next; GtkTreeModel *filter; struct gui_queue *gq; GtkEntry *search; int argc = 0; search = GTK_ENTRY(gui_builder_widget("o_search")); core_init(&argc, NULL, &init_data); 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()); test_not_equal((void *)gq, NULL); test_not_equal((void *)filter, NULL); test_equal(gtk_tree_model_iter_n_children(filter, NULL), 13); gui_queue_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection")); gtk_entry_set_text(search, "zelda"); g_signal_emit_by_name(search, "search-changed"); test_equal(gtk_tree_model_iter_n_children(filter, NULL), 2); gtk_entry_set_text(search, ""); g_signal_emit_by_name(search, "search-changed"); test_equal(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; } } test_equal(gtk_tree_model_iter_n_children(filter, NULL), 12); gui_queue_show(NULL); core_deinit(); gui_builder_deinit(); } DECLARE_UNIT_TESTS( UNIT_TEST("Queue", test_queue), UNIT_TEST("Queue Tracks", test_tracks), );