/* * Copyright 2014 (c) Anna Schumaker. */ #include #include static void test_verify_empty(struct genre *genre) { const struct db_ops *genre_ops = test_genre_ops(); test_equal(genre->ge_name, ""); test_equal(genre->ge_lower, ""); test_equal(genre_ops->dbe_key(&genre->ge_dbe), ""); } static void test_verify_vg(struct genre *genre) { const struct db_ops *genre_ops = test_genre_ops(); test_equal(genre->ge_name, "Video Game Music"); test_equal(genre->ge_lower, "video game music"); test_equal(genre_ops->dbe_key(&genre->ge_dbe), "Video Game Music"); } static void test_genre() { const struct db_ops *genre_ops = test_genre_ops(); struct genre *genre; unsigned int i; struct file f; genre = GENRE(genre_ops->dbe_alloc("Video Game Music")); test_verify_vg(genre); file_init(&f, "genre_tag", 0, 0); file_open(&f, OPEN_WRITE); 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); file_readf(&f, "%u", &i); genre = GENRE(genre_ops->dbe_read(&f)); test_verify_empty(genre); g_free(genre->ge_name); genre_ops->dbe_free(&genre->ge_dbe); file_readf(&f, "%u", &i); genre = GENRE(genre_ops->dbe_read(&f)); 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")); game = GENRE(genre_ops->dbe_alloc("game music")); test_equal(genre_compare(video, video), 0); test_equal(genre_compare(video, game), 1); test_equal(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_db_init(); genre = genre_find("Video Game Music"); test_verify_vg(genre); test_equal((void *)genre_find("Video Game Music"), (void *)genre); test_equal((void *)genre_get(0), (void *)genre); test_equal((void *)genre_get(1), (void *)NULL); db_init(&genre_db, "genre.db", false, genre_ops); db_load(&genre_db); test_equal(genre_db.db_size, 1); db_deinit(&genre_db); genre_db_deinit(); } DECLARE_UNIT_TESTS( UNIT_TEST("Genre Tag", test_genre), UNIT_TEST("Genre Compare", test_genre_compare), UNIT_TEST("Genre Database", test_genere_db), );