diff --git a/tests/gui/CMakeLists.txt b/tests/gui/CMakeLists.txt index 6c1b3a0c..f1d257de 100644 --- a/tests/gui/CMakeLists.txt +++ b/tests/gui/CMakeLists.txt @@ -6,3 +6,4 @@ endfunction() gui_unit_test(Builder) gui_unit_test(Settings) +gui_unit_test(Model) diff --git a/tests/gui/Sconscript b/tests/gui/Sconscript index 0779c72f..99a1eeeb 100644 --- a/tests/gui/Sconscript +++ b/tests/gui/Sconscript @@ -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") ] diff --git a/tests/gui/model.c b/tests/gui/model.c index df232c9e..65f0b9ba 100644 --- a/tests/gui/model.c +++ b/tests/gui/model.c @@ -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(); +}