/* * Copyright 2016 (c) Anna Schumaker. */ #include #include #include #include #include #include #include static void test_load(struct track *track) { } static void test_state_change(GstState state) {} static void test_config_pause(int count) {} struct audio_ops test_audio_ops = { .on_load = test_load, .on_state_change = test_state_change, .on_config_pause = test_config_pause, }; struct core_init_data init_data = { .audio_ops = &test_audio_ops, }; void test_treeview_init() { GtkTreePath *path; g_assert_nonnull(gui_treeview()); g_assert_true(GTK_IS_TREE_VIEW(gui_treeview())); g_assert(gtk_tree_view_get_model(gui_treeview()) == GTK_TREE_MODEL(gui_filter_get())); /* No scrolling without a playlist. */ gui_treeview_scroll(); gtk_tree_view_get_cursor(gui_treeview(), &path, NULL); g_assert_null(path); gui_treeview_set_playlist(playlist_get(PL_SYSTEM, "Collection")); g_assert(gui_model_get_playlist() == playlist_get(PL_SYSTEM, "Collection")); /* No scrolling when playlist index is -1. */ gui_treeview_scroll(); gtk_tree_view_get_cursor(gui_treeview(), &path, NULL); g_assert_null(path); /* Okay, NOW we can scroll! */ playlist_get(PL_SYSTEM, "Collection")->pl_queue.q_cur.it_pos = 4; gui_treeview_scroll(); gtk_tree_view_get_cursor(gui_treeview(), &path, NULL); g_assert_nonnull(path); g_assert_cmpuint(gui_filter_path_get_track(path)->tr_track, ==, 5); gtk_tree_view_row_activated(gui_treeview(), path, NULL); g_assert_cmpuint(audio_cur_track()->tr_track, ==, 5); gtk_tree_path_free(path); } void test_treeview_sort() { GtkTreeViewColumn *col; unsigned int i, sort; /* Switch to collection playlist and check sort arrows. */ gui_treeview_set_playlist(playlist_get(PL_SYSTEM, "Collection")); g_assert(gui_model_get_playlist() == playlist_get(PL_SYSTEM, "Collection")); for (i = 0; i < GUI_MODEL_N_COLUMNS; i++) { col = gtk_tree_view_get_column(gui_treeview(), i); switch (i) { case GUI_MODEL_FILE_PATH: case GUI_MODEL_FONT: g_assert_null(col); break; case GUI_MODEL_ARTIST: case GUI_MODEL_YEAR: case GUI_MODEL_TRACK_NR: g_assert_true( gtk_tree_view_column_get_sort_indicator(col)); g_assert_cmpuint( gtk_tree_view_column_get_sort_order(col), ==, GTK_SORT_ASCENDING); break; default: g_assert_false( gtk_tree_view_column_get_sort_indicator(col)); } } /* Click some columns and check that indicators change. */ col = gtk_tree_view_get_column(gui_treeview(), GUI_MODEL_YEAR); gtk_tree_view_column_clicked(col); g_assert_cmpstr(gtk_label_get_text(gui_sorting()), ==, "Sorting: {Year}"); col = gtk_tree_view_get_column(gui_treeview(), GUI_MODEL_LENGTH); gtk_tree_view_column_clicked(col); g_assert_cmpstr(gtk_label_get_text(gui_sorting()), ==, "Sorting: {Year, Length}"); col = gtk_tree_view_get_column(gui_treeview(), GUI_MODEL_TRACK_NR); gtk_tree_view_column_clicked(col); g_assert_cmpstr(gtk_label_get_text(gui_sorting()), ==, "Sorting: {Year, Length, #}"); col = gtk_tree_view_get_column(gui_treeview(), GUI_MODEL_LENGTH); gtk_tree_view_column_clicked(col); g_assert_cmpstr(gtk_label_get_text(gui_sorting()), ==, "Sorting: {Year, -Length, #}"); for (i = 0; i < GUI_MODEL_N_COLUMNS; i++) { sort = GTK_SORT_ASCENDING; col = gtk_tree_view_get_column(gui_treeview(), i); switch (i) { case GUI_MODEL_FILE_PATH: case GUI_MODEL_FONT: g_assert_null(col); break; case GUI_MODEL_LENGTH: sort = GTK_SORT_DESCENDING; case GUI_MODEL_YEAR: case GUI_MODEL_TRACK_NR: g_assert_true( gtk_tree_view_column_get_sort_indicator(col)); g_assert_cmpuint( gtk_tree_view_column_get_sort_order(col), ==, sort); break; default: g_assert_false( gtk_tree_view_column_get_sort_indicator(col)); } } /* History playlist should not have any sort arrows. */ gui_treeview_set_playlist(playlist_get(PL_SYSTEM, "History")); g_assert(gui_model_get_playlist() == playlist_get(PL_SYSTEM, "History")); g_assert_cmpstr(gtk_label_get_text(gui_sorting()), ==, ""); for (i = 0; i < GUI_MODEL_N_COLUMNS; i++) { col = gtk_tree_view_get_column(gui_treeview(), i); if (!col) break; g_assert_false(gtk_tree_view_column_get_sort_indicator(col)); } } int main(int argc, char **argv) { int ret; gtk_init(&argc, NULL); core_init(&argc, NULL, &init_data); gui_builder_init("share/ocarina/ocarina.ui"); gui_model_init(); gui_filter_init(); gui_treeview_init(); playlist_new(PL_LIBRARY, "tests/Music/Hyrule Symphony"); while (idle_run_task()) {} g_test_init(&argc, &argv, NULL); g_test_add_func("/Gui/Treeview/Init", test_treeview_init); g_test_add_func("/Gui/Treeview/Sort", test_treeview_sort); ret = g_test_run(); core_deinit(); gui_treeview_deinit(); gui_filter_deinit(); gui_model_deinit(); return ret; }