/* * Copyright 2014 (c) Anna Schumaker. * Test a DatabaseEntry */ #include #include #include #include #include #include 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 void save_tag(const std::string &file, T &tag) { File f(file); f.open(OPEN_WRITE); tag.write(f); f.close(); } template 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 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; }