/* * Copyright 2016 (c) Anna Schumaker. */ #include #include #include #include #include #include void test_library() { struct playlist *playlist; struct library *library; g_assert_null(playlist_new(PL_LIBRARY, "tests/Music/Hyrule Symphony/01 - Title Theme.ogg")); g_assert_null(playlist_lookup(PL_LIBRARY, "tests/Music")); g_assert_false(playlist_select(NULL)); playlist = playlist_new(PL_LIBRARY, "tests/Music"); g_assert_nonnull(playlist); g_assert_null(playlist_new(PL_LIBRARY, "tests/Music")); g_assert_nonnull(playlist_lookup(PL_LIBRARY, "tests/Music")); library = library_get(0); playlist = library->li_playlist; g_assert_nonnull(library); g_assert_nonnull(playlist); g_assert_cmpuint(playlist->pl_id, ==, library_index(library)); g_assert_cmpuint(playlist_size(playlist), ==, 0); while (idle_run_task()) {}; g_assert_cmpuint(playlist_size(playlist), ==, 48); g_assert_cmpuint(playlist_size(playlist_lookup(PL_SYSTEM, "Unplayed")), ==, 48); g_assert_cmpuint(playlist_size(playlist_lookup(PL_SYSTEM, "Collection")), ==, 48); playlist = playlist_lookup(PL_LIBRARY, "tests/Music"); g_assert(playlist_current() != playlist); g_assert_true(playlist_select(playlist)); g_assert_cmpuint(settings_get("core.playlist.cur.type"), ==, PL_LIBRARY); g_assert_cmpuint(settings_get("core.playlist.cur.id"), ==, 0); g_assert(playlist_current() == playlist); g_assert_false(playlist_select(playlist)); g_assert_false(playlist_add(playlist, track_get(0))); g_assert_false(playlist_add(playlist, track_get(1))); g_assert_false(playlist_remove(playlist, track_get(0))); g_assert_false(playlist_remove(playlist, track_get(1))); pl_library_deinit(); g_assert_null(playlist_lookup(PL_LIBRARY, "tests/Music")); g_assert_null(library->li_playlist); pl_library_init(); while (idle_run_task()) {}; playlist = library->li_playlist; g_assert_nonnull(library->li_playlist); g_assert_cmpuint(playlist_size(playlist), ==, 48); g_assert_false(playlist_add(playlist, track_get(0))); g_assert_false(playlist_add(playlist, track_get(1))); g_assert_false(playlist_remove(playlist, track_get(0))); g_assert_false(playlist_remove(playlist, track_get(1))); g_assert_cmpuint(playlist_size(playlist), ==, 48); playlist_selected(track_get(1)); playlist_played(track_get(1)); g_assert_false(playlist->pl_random); playlist_set_random(playlist, true); g_assert_true(playlist->pl_random); playlist_set_random(playlist, false); g_assert_false(playlist->pl_random); g_assert_cmpuint(g_slist_length(playlist->pl_sort), ==, 4); g_assert_true(playlist_rearrange(playlist, 15, 20)); g_assert_cmpuint(g_slist_length(playlist->pl_sort), ==, 0); g_assert_true(playlist_sort(playlist, COMPARE_ARTIST)); g_assert_cmpuint(g_slist_length(playlist->pl_sort), ==, 1); g_assert_true(playlist_sort(playlist, COMPARE_YEAR)); g_assert_cmpuint(g_slist_length(playlist->pl_sort), ==, 2); g_assert_true(playlist_sort(playlist, COMPARE_TRACK)); g_assert_cmpuint(g_slist_length(playlist->pl_sort), ==, 3); g_rename("tests/Music/Hyrule Symphony/", "tests/Hyrule Symphony/"); pl_library_update(playlist); while (idle_run_task()) {} g_assert_cmpuint(db_actual_size(track_db_get()), ==, 48); g_assert_cmpuint(track_db_get()->db_size, ==, 35); g_assert_cmpuint(playlist_size(playlist), ==, 35); g_rename("tests/Hyrule Symphony", "tests/Music/Hyrule Symphony/"); pl_library_update(playlist); while (idle_run_task()) {} g_assert_cmpuint(db_actual_size(track_db_get()), ==, 61); g_assert_cmpuint(track_db_get()->db_size, ==, 48); g_assert_cmpuint(playlist_size(playlist), ==, 48); g_assert_true(playlist_delete(playlist)); g_assert_null(library_get(0)); g_assert_cmpuint(playlist_size(playlist_lookup(PL_SYSTEM, "Unplayed")), ==, 0); g_assert_cmpuint(playlist_size(playlist_lookup(PL_SYSTEM, "Collection")), ==, 0); g_assert_cmpuint(track_db_get()->db_size, ==, 0); } int main(int argc, char **argv) { int ret; idle_init(IDLE_SYNC); settings_init(); tags_init(); playlist_init(NULL); while (idle_run_task()) {}; g_test_init(&argc, &argv, NULL); g_test_add_func("/Core/Playlists/Library", test_library); ret = g_test_run(); playlist_deinit(); tags_deinit(); settings_deinit(); idle_deinit(); return ret; }