308 lines
8.4 KiB
C++
308 lines
8.4 KiB
C++
/*
|
|
* Copyright 2014 (c) Anna Schumaker.
|
|
* Test a DatabaseEntry
|
|
*/
|
|
|
|
#include <filter.h>
|
|
#include <print.h>
|
|
#include <tags.h>
|
|
|
|
#include <set>
|
|
#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++;
|
|
}
|
|
|
|
template <class T>
|
|
void save_tag(const std::string &file, T &tag)
|
|
{
|
|
File f(file);
|
|
f.open(OPEN_WRITE);
|
|
tag.write(f);
|
|
f.close();
|
|
}
|
|
|
|
template <class T>
|
|
void load_tag(const std::string &file, T &tag)
|
|
{
|
|
File f(file);
|
|
f.open(OPEN_READ);
|
|
tag.read(f);
|
|
f.close();
|
|
}
|
|
|
|
|
|
void artist_test_tags(Artist &artist)
|
|
{
|
|
test_results(artist.name == "Artist Name", __LINE__);
|
|
test_results(artist.lower == "artist name", __LINE__);
|
|
test_results(artist.primary_key() == "Artist Name", __LINE__);
|
|
}
|
|
|
|
void artist_test()
|
|
{
|
|
Artist artist("Artist Name"), artist2;
|
|
|
|
artist_test_tags(artist);
|
|
save_tag("artist.txt", artist);
|
|
load_tag("artist.txt", artist2);
|
|
artist_test_tags(artist2);
|
|
}
|
|
|
|
|
|
void album_test_tags(Album &album)
|
|
{
|
|
test_results(album.name == "Album Name", __LINE__);
|
|
test_results(album.lower == "album name", __LINE__);
|
|
test_results(album.year == 2014, __LINE__);
|
|
test_results(album.primary_key() == "2014.Album Name", __LINE__);
|
|
}
|
|
|
|
void album_test()
|
|
{
|
|
Album album("Album Name", 2014), album2;
|
|
|
|
album_test_tags(album);
|
|
save_tag("album.txt", album);
|
|
load_tag("album.txt", album2);
|
|
album_test_tags(album2);
|
|
}
|
|
|
|
|
|
void genre_test_tags(Genre &genre)
|
|
{
|
|
test_results(genre.name == "Genre Name", __LINE__);
|
|
test_results(genre.lower == "genre name", __LINE__);
|
|
test_results(genre.primary_key() == "Genre Name", __LINE__);
|
|
}
|
|
|
|
void genre_test()
|
|
{
|
|
Genre genre("Genre Name"), genre2;
|
|
|
|
genre_test_tags(genre);
|
|
save_tag("genre.txt", genre);
|
|
load_tag("genre.txt", genre2);
|
|
genre_test_tags(genre2);
|
|
}
|
|
|
|
|
|
void library_test_tags(Library &library)
|
|
{
|
|
test_results(library.root_path == "/home/user/Music", __LINE__);
|
|
test_results(library.count == 0, __LINE__);
|
|
test_results(library.enabled == true, __LINE__);
|
|
test_results(library.primary_key() == "/home/user/Music", __LINE__);
|
|
}
|
|
|
|
void library_test()
|
|
{
|
|
Library library("/home/user/Music"), library2;
|
|
|
|
library_test_tags(library);
|
|
test_results(library2.enabled == false, __LINE__);
|
|
save_tag("library.txt", library);
|
|
load_tag("library.txt", library2);
|
|
library_test_tags(library2);
|
|
}
|
|
|
|
|
|
void track_test_tags(Track &track, Library *library)
|
|
{
|
|
test_results(track.filepath == "1.ogg", __LINE__);
|
|
test_results(track.path() == "Music/1.ogg", __LINE__);
|
|
test_results(track.primary_key() == "Music/1.ogg", __LINE__);
|
|
test_results(track.library == library, __LINE__);
|
|
test_results(track.play_count == 0, __LINE__);
|
|
test_results(track.last_year == 0, __LINE__);
|
|
test_results(track.last_month == 0, __LINE__);
|
|
test_results(track.last_day == 0, __LINE__);
|
|
}
|
|
|
|
void track_test_search(const std::string &term, unsigned int expected,
|
|
unsigned int line)
|
|
{
|
|
std::set<unsigned int> s;
|
|
filter :: search(term, s);
|
|
test_results(s.size() == 1 && s.find(expected) != s.end(), line);
|
|
}
|
|
|
|
void track_test_basics(Library *library)
|
|
{
|
|
Track track("Music/1.ogg", library), track2;
|
|
track_test_tags(track, library);
|
|
test_results(track.artist == NULL, __LINE__);
|
|
test_results(track.album == NULL, __LINE__);
|
|
test_results(track.genre == NULL, __LINE__);
|
|
|
|
track.tag();
|
|
|
|
track_test_tags(track, library);
|
|
test_results(track.artist->name == "Artist", __LINE__);
|
|
test_results(track.album->name == "Album", __LINE__);
|
|
test_results(track.album->year == 2014, __LINE__);
|
|
test_results(track.genre->name == "Silence", __LINE__);
|
|
test_results(track.track == 1, __LINE__);
|
|
test_results(track.length == 1, __LINE__);
|
|
test_results(track.title == "One", __LINE__);
|
|
test_results(track.title_lower == "one", __LINE__);
|
|
|
|
track_test_search("One", track.id, __LINE__);
|
|
track_test_search("Artist", track.id, __LINE__);
|
|
track_test_search("Album", track.id, __LINE__);
|
|
|
|
save_tag("track.txt", track);
|
|
load_tag("track.txt", track2);
|
|
track_test_tags(track2, library);
|
|
test_results(track.artist == track2.artist, __LINE__);
|
|
test_results(track.album == track2.album, __LINE__);
|
|
test_results(track.genre == track2.genre, __LINE__);
|
|
test_results(track.track == track2.track, __LINE__);
|
|
test_results(track.length == track2.length, __LINE__);
|
|
test_results(track.length_str == track2.length_str, __LINE__);
|
|
test_results(track.title == track2.title, __LINE__);
|
|
test_results(track.title_lower == track2.title_lower, __LINE__);
|
|
}
|
|
|
|
void track_test_lenstrs(const std::string &file, const std::string &expected,
|
|
Library *library, unsigned int line)
|
|
{
|
|
Track track(file, library);
|
|
track.tag();
|
|
test_results(track.length_str == expected, line);
|
|
}
|
|
|
|
void track_test_lenstrs(Library *library)
|
|
{
|
|
track_test_lenstrs("Music/1.ogg", "0:01", library, __LINE__);
|
|
track_test_lenstrs("Music/10.ogg", "0:10", library, __LINE__);
|
|
track_test_lenstrs("Music/15.ogg", "0:15", library, __LINE__);
|
|
track_test_lenstrs("Music/60.ogg", "1:00", library, __LINE__);
|
|
track_test_lenstrs("Music/90.ogg", "1:30", library, __LINE__);
|
|
track_test_lenstrs("Music/600.ogg", "10:00", library, __LINE__);
|
|
track_test_lenstrs("Music/666.ogg", "11:06", library, __LINE__);
|
|
}
|
|
|
|
void test_track_sorting()
|
|
{
|
|
Track track1, track2;
|
|
Artist artist1("a"), artist2("b");
|
|
Album album1("a", 2000), album2("b", 2014);
|
|
Genre genre1("a"), genre2("b");
|
|
|
|
track1.artist = &artist1;
|
|
track1.album = &album1;
|
|
track1.genre = &genre1;
|
|
track1.length = 10;
|
|
track1.play_count = 0;
|
|
track1.last_year = 2013;
|
|
track1.title_lower = "a";
|
|
track1.track = 1;
|
|
|
|
track2.artist = &artist2;
|
|
track2.album = &album2;
|
|
track2.genre = &genre2;
|
|
track2.length = 20;
|
|
track2.play_count = 1;
|
|
track2.last_year = 2014;
|
|
track2.title_lower = "b";
|
|
track2.track = 2;
|
|
|
|
test_results(track1.less_than(&track1, SORT_ARTIST) == 0, __LINE__);
|
|
test_results(track1.less_than(&track2, SORT_ARTIST) < 0, __LINE__);
|
|
test_results(track2.less_than(&track1, SORT_ARTIST) > 0, __LINE__);
|
|
|
|
test_results(track1.less_than(&track1, SORT_ALBUM) == 0, __LINE__);
|
|
test_results(track1.less_than(&track2, SORT_ALBUM) < 0, __LINE__);
|
|
test_results(track2.less_than(&track1, SORT_ALBUM) > 0, __LINE__);
|
|
|
|
test_results(track1.less_than(&track1, SORT_GENRE) == 0, __LINE__);
|
|
test_results(track1.less_than(&track2, SORT_GENRE) < 0, __LINE__);
|
|
test_results(track2.less_than(&track1, SORT_GENRE) > 0, __LINE__);
|
|
|
|
test_results(track1.less_than(&track1, SORT_LENGTH) == 0, __LINE__);
|
|
test_results(track1.less_than(&track2, SORT_LENGTH) < 0, __LINE__);
|
|
test_results(track2.less_than(&track1, SORT_LENGTH) > 0, __LINE__);
|
|
|
|
test_results(track1.less_than(&track1, SORT_PLAYED) == 0, __LINE__);
|
|
test_results(track1.less_than(&track2, SORT_PLAYED) < 0, __LINE__);
|
|
test_results(track2.less_than(&track1, SORT_PLAYED) > 0, __LINE__);
|
|
|
|
track1.last_year = 2014;
|
|
track1.last_month = 3;
|
|
track2.last_month = 4;
|
|
|
|
test_results(track1.less_than(&track1, SORT_PLAYED) == 0, __LINE__);
|
|
test_results(track1.less_than(&track2, SORT_PLAYED) < 0, __LINE__);
|
|
test_results(track2.less_than(&track1, SORT_PLAYED) > 0, __LINE__);
|
|
|
|
track1.last_month = 4;
|
|
track1.last_day = 10;
|
|
track2.last_day = 11;
|
|
|
|
test_results(track1.less_than(&track1, SORT_PLAYED) == 0, __LINE__);
|
|
test_results(track1.less_than(&track2, SORT_PLAYED) < 0, __LINE__);
|
|
test_results(track2.less_than(&track1, SORT_PLAYED) > 0, __LINE__);
|
|
|
|
test_results(track1.less_than(&track1, SORT_TITLE) == 0, __LINE__);
|
|
test_results(track1.less_than(&track2, SORT_TITLE) < 0, __LINE__);
|
|
test_results(track2.less_than(&track1, SORT_TITLE) > 0, __LINE__);
|
|
|
|
test_results(track1.less_than(&track1, SORT_TRACK) == 0, __LINE__);
|
|
test_results(track1.less_than(&track2, SORT_TRACK) < 0, __LINE__);
|
|
test_results(track2.less_than(&track1, SORT_TRACK) > 0, __LINE__);
|
|
|
|
test_results(track1.less_than(&track1, SORT_YEAR) == 0, __LINE__);
|
|
test_results(track1.less_than(&track2, SORT_YEAR) < 0, __LINE__);
|
|
test_results(track2.less_than(&track1, SORT_YEAR) > 0, __LINE__);
|
|
}
|
|
|
|
void track_test()
|
|
{
|
|
Library *library = tagdb :: add_library("Music");
|
|
track_test_basics(library);
|
|
track_test_lenstrs(library);
|
|
test_track_sorting();
|
|
}
|
|
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
char c;
|
|
|
|
while ((c = getopt(argc, argv, "aAglt")) != -1) {
|
|
switch (c) {
|
|
case 'a':
|
|
artist_test();
|
|
break;
|
|
case 'A':
|
|
album_test();
|
|
break;
|
|
case 'g':
|
|
genre_test();
|
|
break;
|
|
case 'l':
|
|
library_test();
|
|
break;
|
|
case 't':
|
|
track_test();
|
|
break;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|