aead4939c3
It is unused now that I have a token matching system in place. Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
287 lines
10 KiB
C
287 lines
10 KiB
C
/*
|
|
* Copyright 2016 (c) Anna Schumaker.
|
|
*/
|
|
#include <core/idle.h>
|
|
#include <core/playlists/system.h>
|
|
#include <core/tags/tags.h>
|
|
#include <tests/test.h>
|
|
|
|
#define __test_playlist_state(queue, ex_size, ex_track0, ex_track1) \
|
|
test_equal(queue_size(queue), ex_size); \
|
|
test_equal(queue_has(queue, track_get(0)), (bool)ex_track0); \
|
|
test_equal(queue_has(queue, track_get(1)), (bool)ex_track1)
|
|
|
|
#define __test_playlist_random(name, queue) \
|
|
test_equal(queue_has_flag(queue, Q_RANDOM), (bool)false); \
|
|
pl_system.pl_set_flag(name, Q_RANDOM, true); \
|
|
test_equal(queue_has_flag(queue, Q_RANDOM), (bool)true); \
|
|
pl_system.pl_set_flag(name, Q_RANDOM, false); \
|
|
test_equal(queue_has_flag(queue, Q_RANDOM), (bool)false); \
|
|
|
|
#define __test_playlist_add(name, queue) \
|
|
__test_playlist_state(queue, 0, false, false); \
|
|
test_equal(pl_system.pl_add_track(name, track_get(0)), (bool)true); \
|
|
test_equal(pl_system.pl_add_track(name, track_get(0)), (bool)false); \
|
|
test_equal(pl_system.pl_add_track(name, track_get(1)), (bool)true); \
|
|
test_equal(pl_system.pl_add_track(name, track_get(1)), (bool)false); \
|
|
__test_playlist_state(queue, 2, true, true)
|
|
|
|
#define __test_playlist_remove(name, queue) \
|
|
test_equal(pl_system.pl_remove_track(name, track_get(0)), (bool)true); \
|
|
test_equal(pl_system.pl_remove_track(name, track_get(0)), (bool)false); \
|
|
test_equal(pl_system.pl_remove_track(name, track_get(1)), (bool)true); \
|
|
test_equal(pl_system.pl_remove_track(name, track_get(1)), (bool)false); \
|
|
__test_playlist_state(queue, 0, false, false)
|
|
|
|
#define __test_playlist_update(name, queue, ex_size, ex_track0, ex_track1) \
|
|
pl_system.pl_update(name); \
|
|
while (idle_run_task()) {}; \
|
|
__test_playlist_state(queue, ex_size, ex_track0, ex_track1)
|
|
|
|
#define __test_playlist_hide_track(name, queue, ex_size, ex_track0, ex_track1) \
|
|
test_equal(pl_system.pl_add_track("Hidden", track_get(0)), (bool)true); \
|
|
__test_playlist_state(queue, ex_size, ex_track0, ex_track1); \
|
|
test_equal(pl_system.pl_add_track(name, track_get(0)), (bool)false)
|
|
|
|
#define __test_playlist_unhide_track(name, queue, ex_size, ex_track0, ex_track1) \
|
|
test_equal(pl_system.pl_remove_track("Hidden", track_get(0)), (bool)true); \
|
|
__test_playlist_state(queue, ex_size, ex_track0, ex_track1)
|
|
|
|
#define __test_playlist_reinit(queue, ex_size, ex_track0, ex_track1) \
|
|
pl_system_deinit(); \
|
|
pl_system_init(NULL); \
|
|
__test_playlist_state(queue, 0, false, false); \
|
|
while (idle_run_task()) {}; \
|
|
__test_playlist_state(queue, ex_size, ex_track0, ex_track1)
|
|
|
|
|
|
static void test_init()
|
|
{
|
|
struct library *library;
|
|
|
|
idle_init_sync();
|
|
tags_init();
|
|
pl_system_init(NULL);
|
|
while (idle_run_task()) {};
|
|
|
|
/* Add tracks to the collection. */
|
|
library = library_find("tests/Music");
|
|
track_add(library, "tests/Music/Hyrule Symphony/01 - Title Theme.ogg");
|
|
track_add(library, "tests/Music/Hyrule Symphony/02 - Kokiri Forest.ogg");
|
|
}
|
|
|
|
static void test_invalid()
|
|
{
|
|
test_init();
|
|
|
|
test_equal((void *)pl_system.pl_get_queue(NULL), NULL);
|
|
test_equal((void *)pl_system.pl_get_queue("Invalid"), NULL);
|
|
|
|
test_equal(pl_system.pl_new("New Playlist"), (bool)false);
|
|
test_equal(pl_system.pl_delete("Favorites"), (bool)false);
|
|
|
|
test_equal(pl_system.pl_add_track(NULL, track_get(0)), (bool)false);
|
|
test_equal(pl_system.pl_remove_track(NULL, track_get(0)), (bool)false);
|
|
}
|
|
|
|
static void test_favorites()
|
|
{
|
|
struct queue *queue = pl_system.pl_get_queue("Favorites");
|
|
|
|
test_not_equal((void *)queue, NULL);
|
|
test_equal(queue_has_flag(queue, Q_ADD_FRONT), (bool)false);
|
|
|
|
__test_playlist_random("Favorites", queue);
|
|
__test_playlist_add("Favorites", queue);
|
|
__test_playlist_reinit(queue, 2, true, true);
|
|
__test_playlist_update("Favorites", queue, 2, true, true);
|
|
__test_playlist_remove("Favorites", queue);
|
|
}
|
|
|
|
static void test_hidden()
|
|
{
|
|
struct queue *queue = pl_system.pl_get_queue("Hidden");
|
|
|
|
test_not_equal((void *)queue, NULL);
|
|
test_equal((void *)pl_system.pl_get_queue("Banned"), (void *)queue);
|
|
test_equal(queue_has_flag(queue, Q_ADD_FRONT), (bool)false);
|
|
|
|
__test_playlist_random("Hidden", queue);
|
|
__test_playlist_add("Hidden", queue);
|
|
__test_playlist_reinit(queue, 2, true, true);
|
|
__test_playlist_update("Hidden", queue, 2, true, true);
|
|
__test_playlist_remove("Hidden", queue);
|
|
}
|
|
|
|
static void test_collection()
|
|
{
|
|
struct queue *queue = pl_system.pl_get_queue("Collection");
|
|
|
|
pl_system_deinit();
|
|
pl_system_init(NULL);
|
|
|
|
test_not_equal((void *)queue, NULL);
|
|
test_equal(queue_has_flag(queue, Q_ADD_FRONT), (bool)true);
|
|
|
|
__test_playlist_random("Collection", queue);
|
|
__test_playlist_add("Collection", queue);
|
|
__test_playlist_hide_track("Collection", queue, 1, false, true);
|
|
__test_playlist_reinit(queue, 1, false, true);
|
|
__test_playlist_update("Collection", queue, 1, false, true);
|
|
__test_playlist_unhide_track("Collection", queue, 2, true, true);
|
|
}
|
|
|
|
static void test_history()
|
|
{
|
|
struct queue *queue = pl_system.pl_get_queue("History");
|
|
|
|
test_not_equal((void *)queue, NULL);
|
|
test_equal(queue_has_flag(queue, Q_ADD_FRONT), (bool)true);
|
|
test_equal(queue_has_flag(queue, Q_NO_SORT), (bool)true);
|
|
|
|
test_equal(g_slist_length(queue->q_sort), 0);
|
|
pl_system.pl_sort("History", COMPARE_TRACK, true);
|
|
test_equal(g_slist_length(queue->q_sort), 0);
|
|
|
|
test_equal(queue_has_flag(queue, Q_RANDOM), (bool)false);
|
|
pl_system.pl_set_flag("History", Q_RANDOM, true);
|
|
test_equal(queue_has_flag(queue, Q_RANDOM), (bool)false);
|
|
|
|
__test_playlist_state(queue, 0, false, false);
|
|
test_equal(pl_system.pl_add_track("History", track_get(0)), (bool)true);
|
|
test_equal(pl_system.pl_add_track("History", track_get(0)), (bool)true);
|
|
test_equal(pl_system.pl_add_track("History", track_get(1)), (bool)true);
|
|
test_equal(pl_system.pl_add_track("History", track_get(1)), (bool)true);
|
|
__test_playlist_state(queue, 4, true, true);
|
|
|
|
test_equal((void *)queue_next(queue), (void *)track_get(1));
|
|
test_equal((void *)queue_next(queue), (void *)track_get(0));
|
|
test_equal(queue_size(queue), 4);
|
|
test_equal(pl_system.pl_add_track("History", track_get(1)), (bool)true);
|
|
test_equal(queue_size(queue), 5);
|
|
test_equal((void *)queue_next(queue), (void *)track_get(1));
|
|
|
|
__test_playlist_remove("History", queue);
|
|
__test_playlist_update("History", queue, 0, false, false);
|
|
}
|
|
|
|
static void test_unplayed()
|
|
{
|
|
struct queue *queue = pl_system.pl_get_queue("Unplayed");
|
|
|
|
pl_system_deinit();
|
|
pl_system_init(NULL);
|
|
|
|
test_not_equal((void *)queue, NULL);
|
|
test_equal(queue_has_flag(queue, Q_ADD_FRONT), (bool)true);
|
|
|
|
__test_playlist_random("Unplayed", queue);
|
|
__test_playlist_reinit(queue, 2, true, true);
|
|
__test_playlist_remove("Unplayed", queue);
|
|
|
|
track_get(1)->tr_count = 1;
|
|
test_equal(pl_system.pl_add_track("Unplayed", track_get(0)), (bool)true);
|
|
test_equal(pl_system.pl_add_track("Unplayed", track_get(0)), (bool)false);
|
|
test_equal(queue_size(queue), 1);
|
|
|
|
track_get(0)->tr_count = 1;
|
|
track_get(1)->tr_count = 0;
|
|
__test_playlist_update("Unplayed", queue, 1, false, true);
|
|
|
|
track_get(0)->tr_count = 0;
|
|
__test_playlist_update("Unplayed", queue, 2, true, true);
|
|
|
|
__test_playlist_hide_track("Unplayed", queue, 1, false, true);
|
|
__test_playlist_reinit(queue, 1, false, true);
|
|
__test_playlist_update("Unplayed", queue, 1, false, true);
|
|
__test_playlist_unhide_track("Unplayed", queue, 2, true, true);
|
|
}
|
|
|
|
static void test_most_played()
|
|
{
|
|
struct queue *most = pl_system.pl_get_queue("Most Played");
|
|
|
|
/* Set average = (4 / 2) = 2 */
|
|
track_played(track_get(0));
|
|
track_played(track_get(1));
|
|
track_played(track_get(1));
|
|
track_played(track_get(1));
|
|
|
|
pl_system_deinit();
|
|
pl_system_init(NULL);
|
|
|
|
__test_playlist_random("Most Played", most);
|
|
__test_playlist_reinit(most, 1, false, true);
|
|
|
|
test_equal(pl_system.pl_remove_track("Most Played", track_get(0)), (bool)false);
|
|
test_equal(pl_system.pl_remove_track("Most Played", track_get(1)), (bool)true);
|
|
test_equal(pl_system.pl_remove_track("Most Played", track_get(1)), (bool)false);
|
|
__test_playlist_state(most, 0, false, false);
|
|
|
|
test_equal(pl_system.pl_add_track("Most Played", track_get(0)), (bool)false);
|
|
test_equal(pl_system.pl_add_track("Most Played", track_get(1)), (bool)true);
|
|
test_equal(pl_system.pl_add_track("Most Played", track_get(1)), (bool)false);
|
|
__test_playlist_state(most, 1, false, true);
|
|
|
|
track_get(0)->tr_count = 3;
|
|
track_get(1)->tr_count = 1;
|
|
__test_playlist_update("Most Played", most, 1, true, false);
|
|
|
|
__test_playlist_hide_track("Most Played", most, 0, false, false);
|
|
__test_playlist_reinit(most, 0, false, false);
|
|
__test_playlist_update("Most Played", most, 0, false, false);
|
|
__test_playlist_unhide_track("Most Played", most, 1, true, false);
|
|
}
|
|
|
|
static void test_least_played()
|
|
{
|
|
struct queue *least = pl_system.pl_get_queue("Least Played");
|
|
|
|
/* Reset playcounts so track 1 is "least played" */
|
|
track_get(0)->tr_count = 3;
|
|
track_get(1)->tr_count = 1;
|
|
|
|
pl_system_deinit();
|
|
pl_system_init(NULL);
|
|
|
|
test_not_equal((void *)least, NULL);
|
|
test_equal(queue_has_flag(least, Q_ADD_FRONT), (bool)true);
|
|
|
|
__test_playlist_random("Least Played", least);
|
|
__test_playlist_reinit(least, 1, false, true);
|
|
|
|
test_equal(pl_system.pl_remove_track("Least Played", track_get(0)), (bool)false);
|
|
test_equal(pl_system.pl_remove_track("Least Played", track_get(1)), (bool)true);
|
|
test_equal(pl_system.pl_remove_track("Least Played", track_get(1)), (bool)false);
|
|
__test_playlist_state(least, 0, false, false);
|
|
|
|
test_equal(pl_system.pl_add_track("Least Played", track_get(0)), (bool)false);
|
|
test_equal(pl_system.pl_add_track("Least Played", track_get(1)), (bool)true);
|
|
test_equal(pl_system.pl_add_track("Least Played", track_get(1)), (bool)false);
|
|
__test_playlist_state(least, 1, false, true);
|
|
|
|
track_get(0)->tr_count = 1;
|
|
track_get(1)->tr_count = 3;
|
|
__test_playlist_update("Least Played", least, 1, true, false);
|
|
|
|
__test_playlist_hide_track("Least Played", least, 0, false, false);
|
|
__test_playlist_reinit(least, 0, false, false);
|
|
__test_playlist_update("Least Played", least, 0, false, false);
|
|
__test_playlist_unhide_track("Least Played", least, 1, true, false);
|
|
|
|
pl_system_deinit();
|
|
tags_deinit();
|
|
idle_deinit();
|
|
}
|
|
|
|
DECLARE_UNIT_TESTS(
|
|
UNIT_TEST("Invalid Playlist", test_invalid),
|
|
UNIT_TEST("Favorites Playlist", test_favorites),
|
|
UNIT_TEST("Hidden Playlist", test_hidden),
|
|
UNIT_TEST("Collection Playlist", test_collection),
|
|
UNIT_TEST("History Playlist", test_history),
|
|
UNIT_TEST("Unplayed Tracks Playlist", test_unplayed),
|
|
UNIT_TEST("Most Played Tracks Playlist", test_most_played),
|
|
UNIT_TEST("Least Played Tracks Playlist", test_least_played),
|
|
);
|