/* * Copyright 2014 (c) Anna Schumaker. */ #include #include static void test_verify_empty(struct genre *genre) { const struct db_ops *genre_ops = test_genre_ops(); g_assert_cmpstr(genre->ge_name, ==, ""); g_assert_null(genre->ge_tokens[0]); g_assert_null(genre->ge_alts[0]); g_assert_cmpstr(genre_ops->dbe_key(&genre->ge_dbe), ==, ""); } static void test_verify_vg(struct genre *genre) { const struct db_ops *genre_ops = test_genre_ops(); g_assert_cmpstr(genre->ge_name, ==, "Video Game Music"); g_assert_cmpstr(genre->ge_tokens[0], ==, "video"); g_assert_cmpstr(genre->ge_tokens[1], ==, "game"); g_assert_cmpstr(genre->ge_tokens[2], ==, "music"); g_assert_null(genre->ge_tokens[3]); g_assert_null(genre->ge_alts[0]); g_assert_cmpstr(genre_ops->dbe_key(&genre->ge_dbe), ==, "Video Game Music"); } static void test_genre() { struct file f = FILE_INIT_DATA("", "genre_tag", 0); const struct db_ops *genre_ops = test_genre_ops(); struct genre *genre; unsigned int i; genre = GENRE(genre_ops->dbe_alloc("Video Game Music", 0)); test_verify_vg(genre); g_assert_true( genre_match_token(genre, "video")); g_assert_true( genre_match_token(genre, "music")); g_assert_false(genre_match_token(genre, "rock")); data_file_open(&f, OPEN_WRITE); data_file_writef(&f, "1 \n1 "); genre_ops->dbe_write(&f, &genre->ge_dbe); file_close(&f); g_free(genre->ge_name); genre_ops->dbe_free(&genre->ge_dbe); file_open(&f, OPEN_READ); data_file_readf(&f, "%u", &i); genre = GENRE(genre_ops->dbe_read(&f, 0)); test_verify_empty(genre); g_free(genre->ge_name); genre_ops->dbe_free(&genre->ge_dbe); data_file_readf(&f, "%u", &i); genre = GENRE(genre_ops->dbe_read(&f, 0)); file_close(&f); test_verify_vg(genre); g_free(genre->ge_name); genre_ops->dbe_free(&genre->ge_dbe); } static void test_genre_compare() { const struct db_ops *genre_ops = test_genre_ops(); struct genre *video, *game; video = GENRE(genre_ops->dbe_alloc("Video Game Music", 0)); game = GENRE(genre_ops->dbe_alloc("game music", 0)); g_assert_cmpint(genre_compare(video, video), ==, 0); g_assert_cmpint(genre_compare(video, game), ==, 1); g_assert_cmpint(genre_compare(game, video), ==, -1); g_free(video->ge_name); g_free(game->ge_name); genre_ops->dbe_free(&video->ge_dbe); genre_ops->dbe_free(&game->ge_dbe); } static void test_genere_db() { const struct db_ops *genre_ops = test_genre_ops(); struct database genre_db; struct genre *genre; genre = genre_find("Video Game Music"); test_verify_vg(genre); g_assert(genre_find("Video Game Music") == genre); g_assert(genre_get(0) == genre); g_assert_null(genre_get(1)); db_init(&genre_db, "genre.db", false, genre_ops, 0); db_load(&genre_db); g_assert_cmpint(genre_db.db_size, ==, 1); db_deinit(&genre_db); } int main(int argc, char **argv) { int ret; genre_db_init(); g_test_init(&argc, &argv, NULL); g_test_add_func("/Core/Tags/Genre", test_genre); g_test_add_func("/Core/Tags/Genre/Compare", test_genre_compare); g_test_add_func("/Core/Tags/Genre/Database", test_genere_db); ret = g_test_run(); genre_db_deinit(); return ret; }