161 lines
5.6 KiB
C
161 lines
5.6 KiB
C
/*
|
|
* Copyright 2016 (c) Anna Schumaker.
|
|
*/
|
|
#include <core/collection.h>
|
|
#include <core/idle.h>
|
|
#include <core/core.h>
|
|
#include <gui/model.h>
|
|
#include <tests/test.h>
|
|
|
|
struct core_init_data init_data;
|
|
|
|
static void test_init()
|
|
{
|
|
GtkTreeModel *treemodel;
|
|
GuiQueueModel *model;
|
|
GType type;
|
|
|
|
model = gui_queue_model_new(collection_get_queue());
|
|
test_not_equal((void *)model, NULL);
|
|
test_equal(GTK_IS_TREE_MODEL(model), true);
|
|
test_equal((void *)model->gqm_queue, (void *)collection_get_queue());
|
|
|
|
treemodel = GTK_TREE_MODEL(model);
|
|
test_equal(gtk_tree_model_get_flags(treemodel), GTK_TREE_MODEL_LIST_ONLY);
|
|
test_equal(gtk_tree_model_get_n_columns(treemodel), 10);
|
|
|
|
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_TRACK_NR);
|
|
test_equal(type, G_TYPE_UINT);
|
|
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_TITLE);
|
|
test_equal(type, G_TYPE_STRING);
|
|
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_LENGTH);
|
|
test_equal(type, G_TYPE_STRING);
|
|
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_ARTIST);
|
|
test_equal(type, G_TYPE_STRING);
|
|
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_ALBUM);
|
|
test_equal(type, G_TYPE_STRING);
|
|
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_YEAR);
|
|
test_equal(type, G_TYPE_UINT);
|
|
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_GENRE);
|
|
test_equal(type, G_TYPE_STRING);
|
|
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_COUNT);
|
|
test_equal(type, G_TYPE_UINT);
|
|
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_LAST_PLAY);
|
|
test_equal(type, G_TYPE_STRING);
|
|
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_FILE_PATH);
|
|
test_equal(type, G_TYPE_STRING);
|
|
|
|
/* This should trigger an assertion failure */
|
|
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_N_COLUMNS);
|
|
test_equal(type, G_TYPE_INVALID);
|
|
|
|
g_object_unref(model);
|
|
test_equal(G_IS_OBJECT(model), false);
|
|
}
|
|
|
|
static void test_empty()
|
|
{
|
|
GtkTreeModel *model;
|
|
GtkTreeIter iter;
|
|
GValue value;
|
|
|
|
model = GTK_TREE_MODEL(gui_queue_model_new(collection_get_queue()));
|
|
memset(&value, 0, sizeof(GValue));
|
|
|
|
test_equal(gtk_tree_model_get_iter_first(model, &iter), false);
|
|
test_equal((void *)gtk_tree_model_get_path(model, &iter), NULL);
|
|
|
|
/* These will all trigger assertion failures ... sorry */
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_TRACK_NR, &value);
|
|
test_equal(G_IS_VALUE(&value), false);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_TITLE, &value);
|
|
test_equal(G_IS_VALUE(&value), false);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_LENGTH, &value);
|
|
test_equal(G_IS_VALUE(&value), false);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_ARTIST, &value);
|
|
test_equal(G_IS_VALUE(&value), false);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_ALBUM, &value);
|
|
test_equal(G_IS_VALUE(&value), false);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_YEAR, &value);
|
|
test_equal(G_IS_VALUE(&value), false);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_GENRE, &value);
|
|
test_equal(G_IS_VALUE(&value), false);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_COUNT, &value);
|
|
test_equal(G_IS_VALUE(&value), false);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_LAST_PLAY, &value);
|
|
test_equal(G_IS_VALUE(&value), false);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_FILE_PATH, &value);
|
|
test_equal(G_IS_VALUE(&value), false);
|
|
|
|
g_object_unref(model);
|
|
}
|
|
|
|
static void test_model()
|
|
{
|
|
struct track *track;
|
|
GtkTreeModel *model;
|
|
GtkTreePath *path;
|
|
GtkTreeIter iter;
|
|
GValue value;
|
|
int argc = 0;
|
|
|
|
model = GTK_TREE_MODEL(gui_queue_model_new(collection_get_queue()));
|
|
memset(&value, 0, sizeof(GValue));
|
|
|
|
/* Okay, now scan a directory ... */
|
|
core_init(&argc, NULL, &init_data);
|
|
collection_add("tests/Music/Hyrule Symphony");
|
|
while (idle_run_task() == true) {}
|
|
test_equal(queue_size(collection_get_queue()), 13);
|
|
|
|
/* ... and test again */
|
|
test_equal(gtk_tree_model_get_iter_first(model, &iter), true);
|
|
track = iter.user_data2;
|
|
test_equal(track->tr_track, 1);
|
|
|
|
path = gtk_tree_model_get_path(model, &iter);
|
|
test_not_equal((void *)path, NULL);
|
|
test_equal(gtk_tree_path_get_indices(path)[0], 0);
|
|
gtk_tree_path_free(path);
|
|
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_TRACK_NR, &value);
|
|
test_equal(g_value_get_uint(&value), track->tr_track);
|
|
g_value_unset(&value);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_TITLE, &value);
|
|
test_equal(g_value_get_string(&value), "Title Theme");
|
|
g_value_unset(&value);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_LENGTH, &value);
|
|
test_equal(g_value_get_string(&value), "4:03");
|
|
g_value_unset(&value);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_ARTIST, &value);
|
|
test_equal(g_value_get_string(&value), "Koji Kondo");
|
|
g_value_unset(&value);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_ALBUM, &value);
|
|
test_equal(g_value_get_string(&value), "Hyrule Symphony");
|
|
g_value_unset(&value);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_YEAR, &value);
|
|
test_equal(g_value_get_uint(&value), 1998);
|
|
g_value_unset(&value);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_GENRE, &value);
|
|
test_equal(g_value_get_string(&value), "Game");
|
|
g_value_unset(&value);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_COUNT, &value);
|
|
test_equal(g_value_get_uint(&value), 0);
|
|
g_value_unset(&value);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_LAST_PLAY, &value);
|
|
test_equal(g_value_get_string(&value), "Never");
|
|
g_value_unset(&value);
|
|
gtk_tree_model_get_value(model, &iter, Q_MODEL_FILE_PATH, &value);
|
|
test_equal(g_value_get_string(&value),
|
|
"tests/Music/Hyrule Symphony/01 - Title Theme.ogg");
|
|
g_value_unset(&value);
|
|
|
|
g_object_unref(model);
|
|
}
|
|
|
|
DECLARE_UNIT_TESTS(
|
|
UNIT_TEST("Queue Model Init", test_init),
|
|
UNIT_TEST("Queue Model (Empty Queue)", test_empty),
|
|
UNIT_TEST("Queue Model", test_model),
|
|
);
|