ocarina/tests/core/tags/genre.c
Anna Schumaker e1f13a7ef4 core/file: Create new functions for reading data from files
The readd(), readu(), and readhu() functions are all used to read
various forms of integers.  The readl() and readw() are for reading
either lines or individual whitespace-delimited words

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2018-02-21 16:01:15 -05:00

114 lines
3.0 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();
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;
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"));
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_readu(&f);
genre = GENRE(genre_ops->dbe_read(&f, 0));
test_verify_empty(genre);
g_free(genre->ge_name);
genre_ops->dbe_free(&genre->ge_dbe);
file_readu(&f);
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;
}