ocarina/tests/src/tagdb.cpp

148 lines
3.6 KiB
C++

/*
* Copyright 2014 (c) Anna Schumaker.
* Test a DatabaseEntry
*/
#include <tags.h>
#include <print.h>
#include <stdlib.h>
#include <unistd.h>
unsigned int test_num = 0;
void test_results(bool success, unsigned int line)
{
print(" %u: ", test_num);
if (success)
print("Success!\n");
else {
print("FAILED (%u) =(\n", line);
exit(1);
}
test_num++;
}
void test_library_size(unsigned int expected, unsigned int line)
{
test_results(tagdb :: get_library_db().size() == expected, line);
}
void test_track_size(unsigned int expected, unsigned int line)
{
test_results(tagdb :: get_track_db().size() == expected, line);
}
int main(int argc, char **argv)
{
char c;
bool init_called = false;
unsigned int id;
while ((c = getopt(argc, argv, "i")) != -1) {
switch (c) {
case 'i':
init_called = true;
tagdb :: init();
test_library_size(1, __LINE__);
test_track_size(0, __LINE__);
default:
break;
}
}
/**
* Initial library checks
*/
Library *library, *library_null;
if (init_called == true) {
library = *(tagdb :: get_library_db().begin());
goto test_tracks;
}
library = tagdb :: add_library("Music");
test_results(library->root_path == "Music", __LINE__);
test_library_size(1, __LINE__);
library_null = tagdb :: add_library("Music");
test_results(library_null == NULL, __LINE__);
test_library_size(1, __LINE__);
id = library->id;
tagdb :: remove_library(id);
test_library_size(0, __LINE__);
tagdb :: remove_library(id);
test_library_size(0, __LINE__);
library = tagdb :: add_library("Music");
test_tracks:
/**
* Test adding / removing tracks
*/
Track *track = tagdb :: add_track("Music/1.ogg", library);
test_track_size(1, __LINE__);
test_results(track->track == 1, __LINE__);
Track *track_null = tagdb :: add_track("Music/1.ogg", library);
test_track_size(1, __LINE__);
test_results(track->path() == "Music/1.ogg", __LINE__);
test_results(track_null == NULL, __LINE__);
id = track->id;
tagdb :: remove_track(id);
test_track_size(0, __LINE__);
tagdb :: remove_track(id);
test_track_size(0, __LINE__);
/**
* Test adding and removing multiple tracks
*/
Track *track1 = tagdb :: add_track("Music/1.ogg", library);
Track *track2 = tagdb :: add_track("Music/10.ogg", library);
Track *track3 = tagdb :: add_track("Music/15.ogg", library);
Track *track4 = tagdb :: add_track("Music/60.ogg", library);
Track *track5 = tagdb :: add_track("Music/90.ogg", library);
Track *track6 = tagdb :: add_track("Music/600.ogg", library);
Track *track7 = tagdb :: add_track("Music/666.ogg", library);
test_track_size(7, __LINE__);
test_results(tagdb :: lookup(0) == NULL, __LINE__);
test_results(tagdb :: lookup(1) == track1, __LINE__);
test_results(tagdb :: lookup(2) == track2, __LINE__);
test_results(tagdb :: lookup(3) == track3, __LINE__);
test_results(tagdb :: lookup(4) == track4, __LINE__);
test_results(tagdb :: lookup(5) == track5, __LINE__);
test_results(tagdb :: lookup(6) == track6, __LINE__);
test_results(tagdb :: lookup(7) == track7, __LINE__);
test_results(tagdb :: lookup(8) == NULL, __LINE__);
tagdb :: remove_library(library->id);
test_track_size(0, __LINE__);
/**
* Test importing a track
*/
ImportData import;
import.last_year = 2014;
import.last_month = 4;
import.last_day = 1;
import.play_count = 7;
library = tagdb :: add_library("Music");
track = tagdb :: import_track("Music/1.ogg", library, import);
test_results(track->last_year == 2014, __LINE__);
test_results(track->last_month == 4, __LINE__);
test_results(track->last_day == 1, __LINE__);
test_results(track->play_count == 7, __LINE__);
if (init_called == true)
tagdb :: commit();
return 0;
}