9e0f017e61
I don't think it makes sense that callers of file_open() are expected to check the file version after opening. This should be something handled by the file code so we can print a consistent error message. Implements issue #5: Better file versioning Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
102 lines
2.5 KiB
C
102 lines
2.5 KiB
C
/*
|
|
* Copyright 2014 (c) Anna Schumaker.
|
|
*/
|
|
#include <core/tags/genre.h>
|
|
#include <tests/test.h>
|
|
|
|
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),
|
|
);
|