/* * Copyright 2014 (c) Anna Schumaker. */ #include #include 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); data_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); data_file_close(&f); data_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)); data_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(); }