ocarina/tests/gui/queue.c

202 lines
6.8 KiB
C

/*
* 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 <core/core.h>
#include <core/idle.h>
#include <core/playlist.h>
#include <gui/builder.h>
#include <gui/queue.h>
#include <gui/view.h>
#include <tests/gui.h>
#include <tests/test.h>
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),
);