2015-11-11 12:09:02 -05:00
|
|
|
/*
|
2014-11-09 10:18:09 -05:00
|
|
|
* Copyright 2014 (c) Anna Schumaker.
|
|
|
|
*/
|
|
|
|
#include <core/tags/genre.h>
|
2015-11-11 12:09:02 -05:00
|
|
|
#include <tests/test.h>
|
2014-11-09 10:18:09 -05:00
|
|
|
|
2015-10-23 08:19:26 -04:00
|
|
|
static void test_verify_empty(struct genre *genre)
|
2014-11-09 10:18:09 -05:00
|
|
|
{
|
2015-09-23 09:33:55 -04:00
|
|
|
const struct db_ops *genre_ops = test_genre_ops();
|
2016-03-09 10:31:39 -05:00
|
|
|
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), ==, "");
|
2014-11-09 10:18:09 -05:00
|
|
|
}
|
|
|
|
|
2015-10-23 08:19:26 -04:00
|
|
|
static void test_verify_vg(struct genre *genre)
|
2015-10-23 08:09:53 -04:00
|
|
|
{
|
2015-09-23 09:33:55 -04:00
|
|
|
const struct db_ops *genre_ops = test_genre_ops();
|
2016-03-09 10:31:39 -05:00
|
|
|
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");
|
2015-10-23 08:09:53 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
static void test_genre()
|
|
|
|
{
|
2015-11-02 16:59:55 -05:00
|
|
|
const struct db_ops *genre_ops = test_genre_ops();
|
|
|
|
struct genre *genre;
|
2015-10-23 08:09:53 -04:00
|
|
|
unsigned int i;
|
2018-02-16 09:34:06 -05:00
|
|
|
struct data_file f;
|
2015-10-23 08:09:53 -04:00
|
|
|
|
2016-09-12 15:27:02 -04:00
|
|
|
genre = GENRE(genre_ops->dbe_alloc("Video Game Music", 0));
|
2015-10-23 08:09:53 -04:00
|
|
|
test_verify_vg(genre);
|
2016-03-09 10:31:39 -05:00
|
|
|
g_assert_true( genre_match_token(genre, "video"));
|
|
|
|
g_assert_true( genre_match_token(genre, "music"));
|
|
|
|
g_assert_false(genre_match_token(genre, "rock"));
|
2015-10-23 08:09:53 -04:00
|
|
|
|
2018-02-16 09:34:06 -05:00
|
|
|
data_file_init(&f, "genre_tag", 0);
|
|
|
|
data_file_open(&f, OPEN_WRITE);
|
|
|
|
data_file_writef(&f, "1 \n1 ");
|
2015-11-11 11:57:54 -05:00
|
|
|
genre_ops->dbe_write(&f, &genre->ge_dbe);
|
2018-02-16 09:34:06 -05:00
|
|
|
data_file_close(&f);
|
2015-11-11 12:05:02 -05:00
|
|
|
g_free(genre->ge_name);
|
2015-11-11 11:57:54 -05:00
|
|
|
genre_ops->dbe_free(&genre->ge_dbe);
|
2015-10-23 08:09:53 -04:00
|
|
|
|
2018-02-16 09:34:06 -05:00
|
|
|
data_file_open(&f, OPEN_READ);
|
|
|
|
data_file_readf(&f, "%u", &i);
|
2016-09-12 15:27:02 -04:00
|
|
|
genre = GENRE(genre_ops->dbe_read(&f, 0));
|
2015-10-23 08:09:53 -04:00
|
|
|
test_verify_empty(genre);
|
2015-11-11 12:05:02 -05:00
|
|
|
g_free(genre->ge_name);
|
2015-11-11 11:57:54 -05:00
|
|
|
genre_ops->dbe_free(&genre->ge_dbe);
|
2015-10-23 08:09:53 -04:00
|
|
|
|
2018-02-16 09:34:06 -05:00
|
|
|
data_file_readf(&f, "%u", &i);
|
2016-09-12 15:27:02 -04:00
|
|
|
genre = GENRE(genre_ops->dbe_read(&f, 0));
|
2018-02-16 09:34:06 -05:00
|
|
|
data_file_close(&f);
|
2015-10-23 08:09:53 -04:00
|
|
|
test_verify_vg(genre);
|
2015-11-11 12:05:02 -05:00
|
|
|
g_free(genre->ge_name);
|
2015-11-11 11:57:54 -05:00
|
|
|
genre_ops->dbe_free(&genre->ge_dbe);
|
2015-10-23 08:09:53 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
static void test_genre_compare()
|
|
|
|
{
|
2015-11-02 16:59:55 -05:00
|
|
|
const struct db_ops *genre_ops = test_genre_ops();
|
|
|
|
struct genre *video, *game;
|
|
|
|
|
2016-09-12 15:27:02 -04:00
|
|
|
video = GENRE(genre_ops->dbe_alloc("Video Game Music", 0));
|
|
|
|
game = GENRE(genre_ops->dbe_alloc("game music", 0));
|
2015-10-23 08:09:53 -04:00
|
|
|
|
2016-03-09 10:31:39 -05:00
|
|
|
g_assert_cmpint(genre_compare(video, video), ==, 0);
|
|
|
|
g_assert_cmpint(genre_compare(video, game), ==, 1);
|
|
|
|
g_assert_cmpint(genre_compare(game, video), ==, -1);
|
2015-10-23 08:09:53 -04:00
|
|
|
|
2015-11-11 12:05:02 -05:00
|
|
|
g_free(video->ge_name);
|
|
|
|
g_free(game->ge_name);
|
2015-11-11 11:57:54 -05:00
|
|
|
genre_ops->dbe_free(&video->ge_dbe);
|
|
|
|
genre_ops->dbe_free(&game->ge_dbe);
|
2015-10-23 08:09:53 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
static void test_genere_db()
|
2014-11-16 15:15:32 -05:00
|
|
|
{
|
2015-11-03 10:39:06 -05:00
|
|
|
const struct db_ops *genre_ops = test_genre_ops();
|
2015-11-04 12:23:00 -05:00
|
|
|
struct database genre_db;
|
2015-10-23 08:19:26 -04:00
|
|
|
struct genre *genre;
|
2015-09-21 09:02:13 -04:00
|
|
|
|
2015-09-28 08:22:51 -04:00
|
|
|
genre = genre_find("Video Game Music");
|
2015-10-23 08:09:53 -04:00
|
|
|
test_verify_vg(genre);
|
2014-11-16 15:15:32 -05:00
|
|
|
|
2016-03-09 10:31:39 -05:00
|
|
|
g_assert(genre_find("Video Game Music") == genre);
|
|
|
|
g_assert(genre_get(0) == genre);
|
|
|
|
g_assert_null(genre_get(1));
|
2014-11-16 15:15:32 -05:00
|
|
|
|
2016-08-17 14:17:52 -04:00
|
|
|
db_init(&genre_db, "genre.db", false, genre_ops, 0);
|
2015-09-17 08:12:25 -04:00
|
|
|
db_load(&genre_db);
|
2016-03-09 10:31:39 -05:00
|
|
|
g_assert_cmpint(genre_db.db_size, ==, 1);
|
2015-10-23 08:09:53 -04:00
|
|
|
|
|
|
|
db_deinit(&genre_db);
|
2014-11-16 15:15:32 -05:00
|
|
|
}
|
|
|
|
|
2016-03-09 10:31:39 -05:00
|
|
|
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;
|
|
|
|
}
|