ocarina/tests/core/tags/library.c

111 lines
3.3 KiB
C

/*
* Copyright 2014 (c) Anna Schumaker.
*/
#include <core/tags/library.h>
#include <tests/test.h>
static void test_verify_zelda(struct library *library)
{
const struct db_ops *library_ops = test_library_ops();
g_assert_null(library->li_playlist);
g_assert_cmpstr(library_ops->dbe_key(&library->li_dbe), ==, "/home/Zelda/Music");
}
static void test_verify_link(struct library *library)
{
const struct db_ops *library_ops = test_library_ops();
g_assert_null(library->li_playlist);
g_assert_cmpstr(library_ops->dbe_key(&library->li_dbe), ==, "/home/Link/Music");
}
static void test_library()
{
struct file f = FILE_INIT_DATA("", "library_tag", 0);
const struct db_ops *library_ops = test_library_ops();
struct library *link, *zelda, *library;
link = LIBRARY(library_ops->dbe_alloc("/home/Link/Music", 0));
zelda = LIBRARY(library_ops->dbe_alloc("/home/Zelda/Music", 0));
test_verify_link(link);
test_verify_zelda(zelda);
file_open(&f, OPEN_WRITE);
library_ops->dbe_write(&f, &link->li_dbe);
data_file_writef(&f, "\n");
library_ops->dbe_write(&f, &zelda->li_dbe);
file_close(&f);
file_open(&f, OPEN_READ);
library = LIBRARY(library_ops->dbe_read(&f, 0));
test_verify_link(library);
g_assert_cmpstr_free(library_file(library, "navi.mp3"), ==,
"/home/Link/Music/navi.mp3");
g_free(library->li_path);
library_ops->dbe_free(&library->li_dbe);
library = LIBRARY(library_ops->dbe_read(&f, 0));
file_close(&f);
test_verify_zelda(library);
g_assert_cmpstr_free(library_file(library, "impa.ogg"), ==,
"/home/Zelda/Music/impa.ogg");
g_free(link->li_path);
g_free(zelda->li_path);
g_free(library->li_path);
library_ops->dbe_free(&link->li_dbe);
library_ops->dbe_free(&zelda->li_dbe);
library_ops->dbe_free(&library->li_dbe);
}
static void test_library_db()
{
const struct db_ops *library_ops = test_library_ops();
struct library *library, *library2;
struct database library_db;
g_assert_nonnull(library_db_get());
g_assert_cmpuint(library_db_get()->db_size, ==, 0);
library_db_init();
g_assert_null(library_lookup("/home/Zelda/Music"));
library = library_find("/home/Zelda/Music");
test_verify_zelda(library);
g_assert_cmpuint(library_db_get()->db_size, ==, 1);
g_assert(library_lookup("/home/Zelda/Music") == library);
g_assert(library_lookup("/home/Zelda/Music/Ocarina") == library);
g_assert(library_find("/home/Zelda/Music") == library);
g_assert(library_find("/home/Zelda/Music/Ocarina") == library);
g_assert(library_get(0) == library);
g_assert_null(library_get(1));
db_init(&library_db, "library.db", false, library_ops, 1);
db_load(&library_db);
g_assert_cmpuint(library_db.db_size, ==, 1);
g_assert_cmpuint(db_actual_size(&library_db), ==, 1);
library2 = LIBRARY(db_at(&library_db, 0));
g_assert_nonnull(library2);
test_verify_zelda(library2);
library_remove(library);
g_assert_null(library_get(0));
g_assert_cmpuint(library_db_get()->db_size, ==, 0);
db_deinit(&library_db);
library_db.db_entries = g_ptr_array_new();
db_load(&library_db);
g_assert_cmpuint(library_db.db_size, ==, 0);
g_ptr_array_free(library_db.db_entries, true);
library_db_deinit();
}
int main(int argc, char **argv)
{
g_test_init(&argc, &argv, NULL);
g_test_add_func("/Core/Tags/Library", test_library);
g_test_add_func("/Core/Tags/Library/Database", test_library_db);
return g_test_run();
}