ocarina/tests/core/playlists/library.c

131 lines
4.3 KiB
C

/*
* Copyright 2016 (c) Anna Schumaker.
*/
#include <core/idle.h>
#include <core/playlist.h>
#include <core/settings.h>
#include <core/tags/library.h>
#include <core/tags/tags.h>
#include <tests/test.h>
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;
}