ocarina/tests/core/tags/album.c
Anna Schumaker e30f7f8115 core/tags/album: Add support for importing album artwork
This is needed so the user can manually set album artwork in the cases
where either we don't fetch the right image or no image is found.

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
2016-07-12 14:36:40 -04:00

162 lines
4.8 KiB
C

/*
* Copyright 2014 (c) Anna Schumaker.
*/
#include <core/idle.h>
#include <core/tags/album.h>
#include <tests/test.h>
static void test_verify_empty(struct album *album)
{
const struct db_ops *album_ops = test_album_ops();
test_equal(album->al_name, "");
test_equal(album->al_lower, "");
test_equal(album->al_year, 0);
test_str_equal(album_ops->dbe_key(&album->al_dbe), "0/");
}
static void test_verify_hyrule(struct album *album)
{
const struct db_ops *album_ops = test_album_ops();
test_equal(album->al_name, "Hyrule Symphony");
test_equal(album->al_lower, "hyrule symphony");
test_equal(album->al_year, 1998);
test_str_equal(album_ops->dbe_key(&album->al_dbe), "1998/Hyrule Symphony");
}
static void test_album()
{
const struct db_ops *album_ops = test_album_ops();
struct album *album;
struct file f;
idle_init();
album = ALBUM(album_ops->dbe_alloc("1998/Hyrule Symphony"));
test_verify_hyrule(album);
file_init(&f, "album_tag", 0, 0);
file_open(&f, OPEN_WRITE);
file_writef(&f, "0 \n");
album_ops->dbe_write(&f, &album->al_dbe);
file_close(&f);
album_ops->dbe_free(&album->al_dbe);
file_open(&f, OPEN_READ);
album = ALBUM(album_ops->dbe_read(&f));
test_verify_empty(album);
album_ops->dbe_free(&album->al_dbe);
album = ALBUM(album_ops->dbe_read(&f));
file_close(&f);
test_verify_hyrule(album);
album_ops->dbe_free(&album->al_dbe);
}
static void test_album_compare()
{
const struct db_ops *album_ops = test_album_ops();
struct album *twilight, *skyward;
twilight = ALBUM(album_ops->dbe_alloc("2006/Twilight Princess"));
skyward = ALBUM(album_ops->dbe_alloc("2011/skyward sword"));
test_equal(album_compare(twilight, twilight), 0);
test_equal(album_compare(twilight, skyward), 1);
test_equal(album_compare(skyward, twilight), -1);
test_equal(album_compare_year(twilight, twilight), 0);
test_equal(album_compare_year(twilight, skyward), -5);
test_equal(album_compare_year(skyward, twilight), 5);
skyward->al_year = 2006;
test_equal(album_compare_year(twilight, twilight), 0);
test_equal(album_compare_year(twilight, skyward), 1);
test_equal(album_compare_year(skyward, twilight), -1);
album_ops->dbe_free(&twilight->al_dbe);
album_ops->dbe_free(&skyward->al_dbe);
}
static void test_album_db()
{
const struct db_ops *album_ops = test_album_ops();
struct database album_db;
struct album *album;
album_db_init();
album = album_find("Hyrule Symphony", 1998);
test_verify_hyrule(album);
test_equal((void *)album_find("Hyrule Symphony", 1998), (void *)album);
test_equal((void *)album_get(0), (void *)album);
test_equal((void *)album_get(1), (void *)NULL);
db_init(&album_db, "album.db", false, album_ops);
db_load(&album_db);
test_equal(album_db.db_size, 1);
db_deinit(&album_db);
}
static void test_album_artwork()
{
struct album *ocarina, *majora, *wind, *ocarina_3d;
gchar *o_path, *m_path, *w_path;
struct artist *koji;
const gchar *cache;
artist_db_init();
idle_deinit();
idle_init();
cache = g_get_user_cache_dir();
o_path = g_build_filename(cache, "ocarina-test", "1998", "Ocarina of Time.jpg", NULL);
m_path = g_build_filename(cache, "ocarina-test", "2000", "Majora's Mask.jpg", NULL);
w_path = g_build_filename(cache, "ocarina-test", "0", "Wind Waker.jpg", NULL);
ocarina = album_find("Ocarina of Time", 1998);
majora = album_find("Majora's Mask", 2000);
wind = album_find("Wind Waker", 0);
koji = artist_find("Koji Kondo");
ocarina->al_artist = koji;
test_equal(album_artwork_exists(ocarina), (bool)false);
test_equal(album_artwork_exists(majora), (bool)false);
test_equal(album_artwork_exists(wind), (bool)false);
test_equal((void *)album_artwork_path(ocarina), NULL);
test_equal((void *)album_artwork_path(majora), NULL);
test_equal((void *)album_artwork_path(wind), NULL);
while (idle_run_task()) {}
test_equal(album_artwork_exists(ocarina), (bool)true);
test_equal(album_artwork_exists(majora), (bool)true);
test_equal(album_artwork_exists(wind), (bool)true);
test_str_equal(album_artwork_path(ocarina), o_path);
test_str_equal(album_artwork_path(majora), m_path);
test_str_equal(album_artwork_path(wind), w_path);
/* Import the original Ocarina of Time album art. */
ocarina_3d = album_find("Ocarina of Time 3D", 2011);
test_equal(album_artwork_exists(ocarina_3d), (bool)false);
album_artwork_import(ocarina_3d, NULL);
test_equal(album_artwork_exists(ocarina_3d), (bool)false);
album_artwork_import(ocarina_3d, o_path);
test_equal(album_artwork_exists(ocarina_3d), (bool)true);
g_free(o_path);
g_free(m_path);
g_free(w_path);
album_db_deinit();
artist_db_deinit();
idle_deinit();
}
DECLARE_UNIT_TESTS(
UNIT_TEST("Album Tag", test_album),
UNIT_TEST("Album Comparison", test_album_compare),
UNIT_TEST("Album Database", test_album_db),
UNIT_TEST("Album Artwork", test_album_artwork),
);