/** * Copyright 2014 (c) Anna Schumaker. */ extern "C" { #include } #include #include #include #include "../test.h" #include #include static void test_track_tag_default() { 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_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_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() { struct set search = SET_INIT(); struct library *library; struct track *track; file f; filter_init(); tags :: init(); library = library_find("tests/Music"); track = new struct track("0/1.ogg"); verify_track_tag(track, 1); file_init(&f, "track_tag", 0); file_open(&f, OPEN_WRITE); track->write(f); file_close(&f); delete track; test_equal(library->li_size, 0); track = new struct track; file_open(&f, OPEN_READ); track->read(f); file_close(&f); verify_track_tag(track, 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 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_played(track); test_equal(track->tr_count, (unsigned)1); test_equal(track_last_play(track), date); g_free(date); } 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), );