core/tags/track: Rewrite unit test
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
18311afcfe
commit
cfd501c5d6
|
@ -12,166 +12,199 @@ extern "C" {
|
|||
#include <set>
|
||||
#include <sstream>
|
||||
|
||||
|
||||
static void test_track_tag_default()
|
||||
static void test_verify_empty(struct track *track)
|
||||
{
|
||||
struct track track;
|
||||
test_equal(track->tr_album, (struct album *)NULL);
|
||||
test_equal(track->tr_artist, (struct artist *)NULL);
|
||||
test_equal(track->tr_genre, (struct genre *)NULL);
|
||||
test_equal(track->tr_library, (struct library *)NULL);
|
||||
|
||||
test_equal(track.tr_album, (struct album *)NULL);
|
||||
test_equal(track.tr_artist, (struct artist *)NULL);
|
||||
test_equal(track.tr_genre, (struct genre *)NULL);
|
||||
test_equal(track.tr_library, (struct library *)NULL);
|
||||
|
||||
test_equal(track.tr_title, (std::string)"");
|
||||
test_equal(track.tr_lower, (std::string)"");
|
||||
test_equal(track.primary_key(), (std::string)"");
|
||||
test_equal(track_last_play(&track), (std::string)"Never");
|
||||
test_equal(track_path(&track), (std::string)"");
|
||||
|
||||
test_equal(track.tr_track, (unsigned)0);
|
||||
test_equal(track.tr_length, (unsigned)0);
|
||||
test_equal(track.tr_count, (unsigned)0);
|
||||
}
|
||||
|
||||
static void verify_track_tag(struct track *track, unsigned int size)
|
||||
{
|
||||
test_equal(track->tr_artist->ar_name, "Artist");
|
||||
test_equal(track->tr_album->al_year, 2014);
|
||||
test_equal(track->tr_album->al_name, "Album");
|
||||
test_equal(track->tr_genre->ge_name, "Silence");
|
||||
test_equal(track->tr_title, "");
|
||||
test_equal(track->tr_lower, "");
|
||||
test_equal(track->primary_key(), "");
|
||||
test_equal(track_path(track), "");
|
||||
test_equal(track_last_play(track), "Never");
|
||||
|
||||
test_equal(track->tr_track, 0);
|
||||
test_equal(track->tr_length, 0);
|
||||
test_equal(track->tr_count, 0);
|
||||
test_equal(track->tr_length, 1);
|
||||
test_equal(track->tr_track, 1);
|
||||
|
||||
test_equal(track->tr_path, "1.ogg");
|
||||
test_equal(track->tr_title, "One");
|
||||
test_equal(track->tr_lower, "one");
|
||||
test_equal(track->tr_library->li_size, size);
|
||||
}
|
||||
|
||||
static void test_track_tag_constructor()
|
||||
static void test_verify_tags(struct track *track)
|
||||
{
|
||||
struct set search = SET_INIT();
|
||||
test_equal(track->tr_album->al_name, "Hyrule Symphony");
|
||||
test_equal(track->tr_album->al_year, 1998);
|
||||
test_equal(track->tr_artist->ar_name, "Koji Kondo");
|
||||
test_equal(track->tr_genre->ge_name, "Game");
|
||||
test_equal(track->tr_library->li_path, "tests/Music");
|
||||
}
|
||||
|
||||
static void test_verify_track(struct track *track)
|
||||
{
|
||||
test_verify_tags(track);
|
||||
|
||||
test_equal(track->tr_title, "Title Theme");
|
||||
test_equal(track->tr_lower, "title theme");
|
||||
test_equal(track->primary_key(),
|
||||
"0/Hyrule Symphony/01 - Title Theme.ogg");
|
||||
test_equal(track_path(track),
|
||||
"tests/Music/Hyrule Symphony/01 - Title Theme.ogg");
|
||||
test_equal(track_last_play(track), "Never");
|
||||
|
||||
test_equal(track->tr_track, 1);
|
||||
test_equal(track->tr_length, 243);
|
||||
test_equal(track->tr_count, 0);
|
||||
}
|
||||
|
||||
static void test_verify_notrack(struct track *track)
|
||||
{
|
||||
test_verify_tags(track);
|
||||
|
||||
test_equal(track->tr_title, "");
|
||||
test_equal(track->tr_lower, "");
|
||||
test_equal(track->primary_key(),
|
||||
"0/Hyrule Symphony/00 - No Track.ogg");
|
||||
test_equal(track_path(track),
|
||||
"tests/Music/Hyrule Symphony/00 - No Track.ogg");
|
||||
test_equal(track_last_play(track), "Never");
|
||||
|
||||
test_equal(track->tr_track, 0);
|
||||
test_equal(track->tr_length, 0);
|
||||
test_equal(track->tr_count, 0);
|
||||
}
|
||||
|
||||
static void test_track()
|
||||
{
|
||||
time_t rawtime = time(NULL);
|
||||
struct tm *now = localtime(&rawtime);
|
||||
struct track *track = new struct track;;
|
||||
struct library *library;
|
||||
struct track *track;
|
||||
gchar *date;
|
||||
file f;
|
||||
|
||||
test_verify_empty(track);
|
||||
delete track;
|
||||
|
||||
std::setlocale(LC_TIME, "C");
|
||||
filter_init();
|
||||
tags :: init();
|
||||
file_init(&f, "track_tag", 0);
|
||||
date = string_tm2str(now);
|
||||
library = library_find("tests/Music");
|
||||
|
||||
track = new struct track("0/1.ogg");
|
||||
verify_track_tag(track, 1);
|
||||
track = new struct track("0/Hyrule Symphony/01 - Title Theme.ogg");
|
||||
test_verify_track(track);
|
||||
test_equal(library->li_size, 1);
|
||||
|
||||
file_init(&f, "track_tag", 0);
|
||||
file_open(&f, OPEN_WRITE);
|
||||
file_writef(&f, "0 0 0 0 0 0 0 0 0 0 \n");
|
||||
file_writef(&f, "Hyrule Symphony/00 - No Track.ogg\n");
|
||||
track->write(f);
|
||||
file_close(&f);
|
||||
|
||||
delete track;
|
||||
test_equal(library->li_size, 0);
|
||||
track = new struct track;
|
||||
|
||||
track = new struct track;
|
||||
file_open(&f, OPEN_READ);
|
||||
track->read(f);
|
||||
file_close(&f);
|
||||
verify_track_tag(track, 1);
|
||||
test_verify_notrack(track);
|
||||
test_equal(library->li_size, 1);
|
||||
delete track;
|
||||
|
||||
filter :: search("One", &search);
|
||||
test_equal(set_size(&search), (size_t)1);
|
||||
test_equal(set_has(&search, 0), true);
|
||||
|
||||
filter :: search("Artist", &search);
|
||||
test_equal(set_size(&search), (size_t)1);
|
||||
test_equal(set_has(&search, 0), true);
|
||||
|
||||
filter :: search("Album", &search);
|
||||
test_equal(set_size(&search), (size_t)1);
|
||||
test_equal(set_has(&search, 0), true);
|
||||
}
|
||||
|
||||
static void test_track_tag_load_db(unsigned int size)
|
||||
{
|
||||
database<struct track> track_db;
|
||||
db_init(&track_db, "track.db", false);
|
||||
db_load(&track_db);
|
||||
test_equal(track_db.db_size, size);
|
||||
db_deinit(&track_db);
|
||||
}
|
||||
|
||||
static void test_track_tag_lookup()
|
||||
{
|
||||
unsigned int index;
|
||||
struct track *a, *b;
|
||||
struct library *library = library_find("tests/Music");
|
||||
|
||||
a = track_add(library, "tests/Music/1.ogg");
|
||||
test_not_equal(a, (struct track *)NULL);
|
||||
verify_track_tag(a, 1);
|
||||
|
||||
b = track_add(library, "tests/Music/1.ogg");
|
||||
test_equal(b, (struct track *)NULL);
|
||||
|
||||
b = track_add(library, "tests/Music/10.ogg");
|
||||
test_not_equal(b, a);
|
||||
test_equal(library->li_size, (unsigned)2);
|
||||
test_equal(track_db_get()->db_size, b->index() + 1);
|
||||
|
||||
|
||||
test_equal(track_get(a->index()), a);
|
||||
test_equal(track_get(a->index() + 1), b);
|
||||
test_equal(track_get(a->index() + 2), (struct track *)NULL);
|
||||
|
||||
test_track_tag_load_db(0);
|
||||
track_db_commit();
|
||||
test_track_tag_load_db(2);
|
||||
|
||||
|
||||
index = a->index();
|
||||
track_remove(a);
|
||||
test_equal(track_get(index), (struct track *)NULL);
|
||||
test_track_tag_load_db(2);
|
||||
track_db_commit();
|
||||
test_track_tag_load_db(1);
|
||||
test_equal(library->li_size, (unsigned)1);
|
||||
test_equal(db_actual_size(track_db_get()), b->index() + 1);
|
||||
|
||||
|
||||
a = track_add(library, "tests/Music/1.ogg");
|
||||
test_not_equal(a, (struct track *)NULL);
|
||||
verify_track_tag(a, 2);
|
||||
test_equal(db_actual_size(track_db_get()), a->index() + 1);
|
||||
|
||||
track_remove_all(library);
|
||||
test_track_tag_load_db(0);
|
||||
test_equal(library->li_size, (unsigned)0);
|
||||
}
|
||||
|
||||
static void test_track_tag_locale()
|
||||
{
|
||||
time_t rawtime = time(NULL);
|
||||
struct tm *now = localtime(&rawtime);
|
||||
struct library *library = library_find("tests/Music");
|
||||
struct track *track = track_add(library, "tests/Music/1.ogg");
|
||||
gchar *date;
|
||||
|
||||
std::setlocale(LC_TIME, "C");
|
||||
date = string_tm2str(now);
|
||||
|
||||
test_equal(track->tr_count, (unsigned)0);
|
||||
test_equal(track_last_play(track), "Never");
|
||||
track = new struct track;
|
||||
track->read(f);
|
||||
test_verify_track(track);
|
||||
test_equal(library->li_size, 1);
|
||||
file_close(&f);
|
||||
|
||||
track_played(track);
|
||||
test_equal(track->tr_count, (unsigned)1);
|
||||
test_equal(track->tr_count, 1);
|
||||
test_equal(track_last_play(track), date);
|
||||
|
||||
delete track;
|
||||
g_free(date);
|
||||
}
|
||||
|
||||
static void test_track_filter()
|
||||
{
|
||||
struct set search = SET_INIT();
|
||||
|
||||
filter :: search("Title Theme", &search);
|
||||
test_equal(set_size(&search), (size_t)1);
|
||||
test_equal(set_has(&search, 0), true);
|
||||
|
||||
filter :: search("Koji Kondo", &search);
|
||||
test_equal(set_size(&search), (size_t)1);
|
||||
test_equal(set_has(&search, 0), true);
|
||||
|
||||
filter :: search("Hyrule Symphony", &search);
|
||||
test_equal(set_size(&search), (size_t)1);
|
||||
test_equal(set_has(&search, 0), true);
|
||||
|
||||
filter :: search("No Track", &search);
|
||||
test_equal(set_size(&search), (size_t)0);
|
||||
}
|
||||
|
||||
static void test_track_compare()
|
||||
{
|
||||
struct track *title = new struct track("0/Hyrule Symphony/01 - Title Theme.ogg");
|
||||
struct track *kokiri = new struct track("0/Hyrule Symphony/02 - Kokiri Forest.ogg");
|
||||
|
||||
test_equal(track_compare(title, title), 0);
|
||||
test_equal(track_compare(kokiri, title), -1);
|
||||
test_equal(track_compare(title, kokiri), 1);
|
||||
|
||||
delete title;
|
||||
delete kokiri;
|
||||
}
|
||||
|
||||
static void test_track_db()
|
||||
{
|
||||
std::string path = "tests/Music/Hyrule Symphony/01 - Title Theme.ogg";
|
||||
struct library *library = library_find("tests/Music");
|
||||
database<struct track> track_db;
|
||||
struct track *track;
|
||||
|
||||
track = track_add(library, path);
|
||||
test_verify_track(track);
|
||||
|
||||
test_equal(track_add(library, path), NULL);
|
||||
test_equal(track_get(0), track);
|
||||
test_equal(track_get(1), NULL);
|
||||
test_equal(track_db_get()->db_size, 1);
|
||||
|
||||
db_init(&track_db, "track.db", false);
|
||||
db_load(&track_db);
|
||||
test_equal(track_db.db_size, 0);
|
||||
|
||||
track_db_commit();
|
||||
db_load(&track_db);
|
||||
test_equal(track_db.db_size, 1);
|
||||
test_verify_track(db_first(&track_db));
|
||||
|
||||
track_remove(track);
|
||||
test_equal(track_db_get()->db_size, 0);
|
||||
|
||||
track = track_add(library, path);
|
||||
test_not_equal(track, NULL);
|
||||
|
||||
track = track_add(library,
|
||||
"tests/Music/Hyrule Symphony/02 - Kokiri Forest.ogg");
|
||||
test_not_equal(track, NULL);
|
||||
test_equal(track_db_get()->db_size, 2);
|
||||
|
||||
track_remove_all(library);
|
||||
test_equal(track_db_get()->db_size, 0);
|
||||
|
||||
db_deinit(&track_db);
|
||||
tags :: deinit();
|
||||
filter_deinit();
|
||||
}
|
||||
|
||||
DECLARE_UNIT_TESTS(
|
||||
UNIT_TEST("Track Tag Default Constructor", test_track_tag_default),
|
||||
UNIT_TEST("Track Tag Constructor", test_track_tag_constructor),
|
||||
UNIT_TEST("Track Tag Lookup Test", test_track_tag_lookup),
|
||||
UNIT_TEST("Track Tag Date Test", test_track_tag_locale),
|
||||
UNIT_TEST("Track Tag", test_track),
|
||||
UNIT_TEST("Track Filter", test_track_filter),
|
||||
UNIT_TEST("Track Comparison", test_track_compare),
|
||||
UNIT_TEST("Track Database", test_track_db),
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue