tests: Build model test with ctest

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2016-03-23 09:12:23 -04:00 committed by Anna Schumaker
parent 3e2ed7761c
commit c671c7aefc
3 changed files with 110 additions and 96 deletions

View File

@ -6,3 +6,4 @@ endfunction()
gui_unit_test(Builder)
gui_unit_test(Settings)
gui_unit_test(Model)

View File

@ -26,7 +26,7 @@ def GuiTest(name):
env.UsePackage("gmodule-export-2.0")
gui_objs += [ env.Object("../../gui/builder.c") ]
gui_objs += [ env.Object("../../gui/settings.c") ]
res += [ GuiTest("model") ]
gui_objs += [ env.Object("../../gui/model.c") ]
res += [ GuiTest("view") ]
res += [ GuiTest("queue") ]
res += [ GuiTest("window") ]

View File

@ -60,98 +60,108 @@ static void test_init()
gui_queue_model_init();
model = gui_queue_model_get();
test_equal((void *)gui_queue_model_get_queue(), NULL);
g_assert_null(gui_queue_model_get_queue());
gui_queue_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection"));
test_not_equal((void *)model, NULL);
test_equal(GTK_IS_TREE_MODEL(model), true);
test_equal((void *)gui_queue_model_get_queue(),
(void *)playlist_get_queue(PL_SYSTEM, "Collection"));
g_assert_nonnull(model);
g_assert_true(GTK_IS_TREE_MODEL(model));
g_assert(gui_queue_model_get_queue() == playlist_get_queue(PL_SYSTEM, "Collection"));
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), 11);
g_assert_cmpuint(gtk_tree_model_get_flags(treemodel), ==, GTK_TREE_MODEL_LIST_ONLY);
g_assert_cmpuint(gtk_tree_model_get_n_columns(treemodel), ==, 11);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_TRACK_NR);
test_equal(type, G_TYPE_UINT);
g_assert_cmpuint(type, ==, G_TYPE_UINT);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_TITLE);
test_equal(type, G_TYPE_STRING);
g_assert_cmpuint(type, ==, G_TYPE_STRING);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_LENGTH);
test_equal(type, G_TYPE_STRING);
g_assert_cmpuint(type, ==, G_TYPE_STRING);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_ARTIST);
test_equal(type, G_TYPE_STRING);
g_assert_cmpuint(type, ==, G_TYPE_STRING);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_ALBUM);
test_equal(type, G_TYPE_STRING);
g_assert_cmpuint(type, ==, G_TYPE_STRING);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_YEAR);
test_equal(type, G_TYPE_UINT);
g_assert_cmpuint(type, ==, G_TYPE_UINT);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_GENRE);
test_equal(type, G_TYPE_STRING);
g_assert_cmpuint(type, ==, G_TYPE_STRING);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_COUNT);
test_equal(type, G_TYPE_UINT);
g_assert_cmpuint(type, ==, G_TYPE_UINT);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_LAST_PLAY);
test_equal(type, G_TYPE_STRING);
g_assert_cmpuint(type, ==, G_TYPE_STRING);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_FILE_PATH);
test_equal(type, G_TYPE_STRING);
g_assert_cmpuint(type, ==, G_TYPE_STRING);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_FONT);
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_assert_cmpuint(type, ==, G_TYPE_STRING);
gui_queue_model_deinit();
test_equal(G_IS_OBJECT(model), false);
g_assert_false(G_IS_OBJECT(model));
}
static void test_empty()
static void __test_empty_subprocess()
{
GtkTreeModel *model;
GtkTreeIter iter;
GValue value;
GType type;
gui_queue_model_init();
model = GTK_TREE_MODEL(gui_queue_model_get());
gui_queue_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection"));
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);
test_equal((void *)gui_queue_model_iter_get_track(&iter), NULL);
g_assert_false(gtk_tree_model_get_iter_first(model, &iter));
g_assert_null(gtk_tree_model_get_path(model, &iter));
g_assert_null(gui_queue_model_iter_get_track(&iter));
/* 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);
g_assert_false(G_IS_VALUE(&value));
gtk_tree_model_get_value(model, &iter, Q_MODEL_TITLE, &value);
test_equal(G_IS_VALUE(&value), false);
g_assert_false(G_IS_VALUE(&value));
gtk_tree_model_get_value(model, &iter, Q_MODEL_LENGTH, &value);
test_equal(G_IS_VALUE(&value), false);
g_assert_false(G_IS_VALUE(&value));
gtk_tree_model_get_value(model, &iter, Q_MODEL_ARTIST, &value);
test_equal(G_IS_VALUE(&value), false);
g_assert_false(G_IS_VALUE(&value));
gtk_tree_model_get_value(model, &iter, Q_MODEL_ALBUM, &value);
test_equal(G_IS_VALUE(&value), false);
g_assert_false(G_IS_VALUE(&value));
gtk_tree_model_get_value(model, &iter, Q_MODEL_YEAR, &value);
test_equal(G_IS_VALUE(&value), false);
g_assert_false(G_IS_VALUE(&value));
gtk_tree_model_get_value(model, &iter, Q_MODEL_GENRE, &value);
test_equal(G_IS_VALUE(&value), false);
g_assert_false(G_IS_VALUE(&value));
gtk_tree_model_get_value(model, &iter, Q_MODEL_COUNT, &value);
test_equal(G_IS_VALUE(&value), false);
g_assert_false(G_IS_VALUE(&value));
gtk_tree_model_get_value(model, &iter, Q_MODEL_LAST_PLAY, &value);
test_equal(G_IS_VALUE(&value), false);
g_assert_false(G_IS_VALUE(&value));
gtk_tree_model_get_value(model, &iter, Q_MODEL_FILE_PATH, &value);
test_equal(G_IS_VALUE(&value), false);
g_assert_false(G_IS_VALUE(&value));
gtk_tree_model_get_value(model, &iter, Q_MODEL_FONT, &value);
test_equal(G_IS_VALUE(&value), false);
g_assert_false(G_IS_VALUE(&value));
test_equal(gtk_tree_model_iter_next(model, &iter), false);
test_equal(gtk_tree_model_iter_children(model, &iter, NULL), false);
test_equal(gtk_tree_model_iter_has_child(model, &iter), false);
test_equal(gtk_tree_model_iter_n_children(model, &iter), 0);
test_equal(gtk_tree_model_iter_n_children(model, NULL), 0);
test_equal(gtk_tree_model_iter_nth_child(model, &iter, NULL, 3), false);
test_equal(gtk_tree_model_iter_parent(model, &iter, &iter), false);
type = gtk_tree_model_get_column_type(model, Q_MODEL_N_COLUMNS);
g_assert_cmpuint(type, ==, G_TYPE_INVALID);
g_assert_false(gtk_tree_model_iter_next(model, &iter));
g_assert_false(gtk_tree_model_iter_children(model, &iter, NULL));
g_assert_false(gtk_tree_model_iter_has_child(model, &iter));
g_assert_cmpuint(gtk_tree_model_iter_n_children(model, &iter), ==, 0);
g_assert_cmpuint(gtk_tree_model_iter_n_children(model, NULL), ==, 0);
g_assert_false(gtk_tree_model_iter_nth_child(model, &iter, NULL, 3));
g_assert_false(gtk_tree_model_iter_parent(model, &iter, &iter));
gui_queue_model_deinit();
}
static void test_empty()
{
if (g_test_subprocess()) {
__test_empty_subprocess();
return;
}
g_test_trap_subprocess(NULL, 0, 0);
g_test_trap_assert_failed();
}
static void test_model()
{
struct db_entry *dbe, *next;
@ -172,7 +182,7 @@ static void test_model()
model = GTK_TREE_MODEL(gui_queue_model_get());
label = GTK_LABEL(gui_builder_widget("o_runtime"));
gui_queue_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection"));
test_equal(gtk_label_get_text(label), "");
g_assert_cmpstr(gtk_label_get_text(label), ==, "");
memset(&value, 0, sizeof(GValue));
g_signal_connect(model, "row-inserted", (GCallback)on_row_inserted, NULL);
@ -183,111 +193,114 @@ static void test_model()
playlist_get_queue(PL_SYSTEM, "Collection")->q_private = model;
playlist_new(PL_LIBRARY, "tests/Music/Hyrule Symphony");
while (idle_run_task() == true) {}
test_equal(playlist_size(PL_SYSTEM, "Collection"), 13);
test_equal(count_insert, 13);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Collection"), ==, 13);
g_assert_cmpuint(count_insert, ==, 13);
queue_resort(playlist_get_queue(PL_SYSTEM, "Collection"));
test_equal(count_update, 13);
g_assert_cmpuint(count_update, ==, 13);
playlist_add(PL_SYSTEM, "Favorites", track_get(0));
playlist_add(PL_SYSTEM, "Favorites", track_get(1));
playlist_add(PL_SYSTEM, "Favorites", track_get(2));
test_equal(playlist_size(PL_SYSTEM, "Favorites"), 3);
test_equal(gtk_label_get_text(label), "42 minutes, 45 seconds");
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Favorites"), ==, 3);
g_assert_cmpstr(gtk_label_get_text(label), ==, "42 minutes, 45 seconds");
/* ... and test again */
test_equal(gtk_tree_model_get_iter_first(model, &iter), true);
g_assert_true(gtk_tree_model_get_iter_first(model, &iter));
track = gui_queue_model_iter_get_track(&iter);
test_equal(track->tr_track, 1);
g_assert_cmpuint(track->tr_track, ==, 1);
audio_load(track);
path = gtk_tree_model_get_path(model, &iter);
test_not_equal((void *)path, NULL);
test_equal(gtk_tree_path_get_indices(path)[0], 0);
test_equal((void *)gui_queue_model_path_get_track(path), (void *)track);
g_assert_nonnull(path);
g_assert_cmpuint(gtk_tree_path_get_indices(path)[0], ==, 0);
g_assert(gui_queue_model_path_get_track(path) == track);
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_assert_cmpuint(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_assert_cmpstr(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_assert_cmpstr(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_assert_cmpstr(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_assert_cmpstr(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_assert_cmpuint(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_assert_cmpstr(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_assert_cmpuint(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_assert_cmpstr(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),
g_assert_cmpstr(g_value_get_string(&value), ==,
"tests/Music/Hyrule Symphony/01 - Title Theme.ogg");
g_value_unset(&value);
gtk_tree_model_get_value(model, &iter, Q_MODEL_FONT, &value);
test_equal(g_value_get_string(&value), "bold");
g_assert_cmpstr(g_value_get_string(&value), ==, "bold");
g_value_unset(&value);
test_equal(gtk_tree_model_iter_next(model, &iter), true);
g_assert_true(gtk_tree_model_iter_next(model, &iter));
track = gui_queue_model_iter_get_track(&iter);
test_equal(track->tr_track, 2);
g_assert_cmpuint(track->tr_track, ==, 2);
gtk_tree_model_get_value(model, &iter, Q_MODEL_FONT, &value);
test_equal(g_value_get_string(&value), "");
g_assert_cmpstr(g_value_get_string(&value), ==, "");
g_value_unset(&value);
test_equal(gtk_tree_model_iter_children(model, &iter, NULL), true);
g_assert_true(gtk_tree_model_iter_children(model, &iter, NULL));
track = gui_queue_model_iter_get_track(&iter);
test_equal(track->tr_track, 1);
g_assert_cmpuint(track->tr_track, ==, 1);
test_equal(gtk_tree_model_iter_has_child(model, &iter), false);
test_equal(gtk_tree_model_iter_n_children(model, &iter), 0);
test_equal(gtk_tree_model_iter_n_children(model, NULL), 13);
g_assert_false(gtk_tree_model_iter_has_child(model, &iter));
g_assert_cmpuint(gtk_tree_model_iter_n_children(model, &iter), ==, 0);
g_assert_cmpuint(gtk_tree_model_iter_n_children(model, NULL), ==, 13);
gui_queue_model_set_queue(playlist_get_queue(PL_SYSTEM, "Favorites"));
test_equal(count_delete, 13);
test_equal(count_insert, 14);
test_equal(gtk_tree_model_iter_n_children(model, NULL), 3);
test_equal(gtk_label_get_text(label), "10 minutes, 46 seconds");
g_assert_cmpuint(count_delete, ==, 13);
g_assert_cmpuint(count_insert, ==, 14);
g_assert_cmpuint(gtk_tree_model_iter_n_children(model, NULL), ==, 3);
g_assert_cmpstr(gtk_label_get_text(label), ==, "10 minutes, 46 seconds");
gui_queue_model_set_queue(NULL);
test_equal(count_delete, 16);
test_equal(count_insert, 14);
test_equal(gtk_tree_model_iter_n_children(model, NULL), 0);
test_equal(gtk_label_get_text(label), "");
g_assert_cmpuint(count_delete, ==, 16);
g_assert_cmpuint(count_insert, ==, 14);
g_assert_cmpuint(gtk_tree_model_iter_n_children(model, NULL), ==, 0);
g_assert_cmpstr(gtk_label_get_text(label), ==, "");
gui_queue_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection"));
test_equal(gtk_label_get_text(label), "42 minutes, 45 seconds");
test_equal(count_delete, 16);
test_equal(count_insert, 15);
g_assert_cmpuint(count_delete, ==, 16);
g_assert_cmpuint(count_insert, ==, 15);
g_assert_cmpstr(gtk_label_get_text(label), ==, "42 minutes, 45 seconds");
test_equal(gtk_tree_model_iter_nth_child(model, &iter, NULL, 3), true);
g_assert_true(gtk_tree_model_iter_nth_child(model, &iter, NULL, 3));
track = gui_queue_model_iter_get_track(&iter);
test_equal(track->tr_track, 4);
g_assert_cmpuint(track->tr_track, ==, 4);
test_equal(gtk_tree_model_iter_parent(model, &iter, &iter), false);
g_assert_false(gtk_tree_model_iter_parent(model, &iter, &iter));
db_for_each(dbe, next, track_db_get())
playlist_remove(PL_SYSTEM, "Collection", TRACK(dbe));
test_equal(count_delete, 29);
g_assert_cmpuint(count_delete, ==, 29);
core_deinit();
gui_queue_model_deinit();
}
DECLARE_UNIT_TESTS(
UNIT_TEST("Queue Model Init", test_init),
UNIT_TEST("Queue Model (Empty Queue)", test_empty),
UNIT_TEST("Queue Model", test_model),
);
int main(int argc, char **argv)
{
g_test_init(&argc, &argv, NULL);
g_test_add_func("/Gui/Queue Model/Init", test_init);
g_test_add_func("/Gui/Queue Model/Empty", test_empty);
g_test_add_func("/Gui/Queue Model", test_model);
return g_test_run();
}