int main (int argc, char **argv) { GtkWidget *main_window; GtkTreeModel *main_model; GtkTreeIter iter; RBEntryView *view; RhythmDB *db; RhythmDBEntry *entry; gtk_init (&argc, &argv); gdk_threads_init (); rb_thread_helpers_init (); rb_file_helpers_init (TRUE); rb_stock_icons_init (); rb_debug_init (TRUE); GDK_THREADS_ENTER (); db = rhythmdb_tree_new ("test"); rhythmdb_write_lock (db); entry = create_entry (db, "file:///sin.mp3", "Sin", "Pretty Hate Machine", "Nine Inch Nails", "Rock"); rhythmdb_write_unlock (db); rhythmdb_read_lock (db); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TYPE, RHYTHMDB_ENTRY_TYPE_IGNORE, RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (gtk_tree_model_get_iter_first (main_model, &iter)); main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); view = rb_entry_view_new (db, rb_file ("rb-entry-view-library.xml")); rb_entry_view_set_query_model (view, RHYTHMDB_QUERY_MODEL (main_model)); gtk_container_add (GTK_CONTAINER (main_window), GTK_WIDGET (view)); g_signal_connect (G_OBJECT (main_window), "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_widget_show_all (GTK_WIDGET (main_window)); gtk_main (); rhythmdb_shutdown (db); g_object_unref (G_OBJECT (db)); GDK_THREADS_LEAVE (); exit (0); }
int main (int argc, char **argv) { RhythmDB *db; char *name; int i; if (argc < 2) { name = g_build_filename (rb_user_data_dir(), "rhythmdb.xml", NULL); g_print ("using %s\n", name); } else { name = g_strdup (argv[1]); } rb_profile_start ("load test"); g_thread_init (NULL); rb_threads_init (); gtk_set_locale (); gtk_init (&argc, &argv); rb_debug_init (FALSE); rb_refstring_system_init (); rb_file_helpers_init (TRUE); GDK_THREADS_ENTER (); db = rhythmdb_tree_new ("test"); g_object_set (G_OBJECT (db), "name", name, NULL); g_free (name); for (i = 1; i <= 10; i++) { int j; rb_profile_start ("10 rhythmdb loads"); for (j = 1; j <= 10; j++) { set_waiting_signal (G_OBJECT (db), "load-complete"); rhythmdb_load (db); wait_for_signal (); rhythmdb_entry_delete_by_type (db, RHYTHMDB_ENTRY_TYPE_SONG); rhythmdb_entry_delete_by_type (db, rhythmdb_entry_type_get_by_name (db, "iradio")); rhythmdb_entry_delete_by_type (db, RHYTHMDB_ENTRY_TYPE_PODCAST_FEED); rhythmdb_entry_delete_by_type (db, RHYTHMDB_ENTRY_TYPE_PODCAST_POST); } rb_profile_end ("10 rhythmdb loads"); g_print ("completed %d loads\n", i * 10); } rhythmdb_shutdown (db); g_object_unref (G_OBJECT (db)); db = NULL; rb_file_helpers_shutdown (); rb_refstring_system_shutdown (); rb_profile_end ("load test"); return 0; }
void test_rhythmdb_setup (void) { RhythmDBEntryTypeClass *etype_class; init_once (TRUE); db = rhythmdb_tree_new ("test"); fail_unless (db != NULL, "failed to initialise DB"); rhythmdb_start_action_thread (db); /* allow songs and ignored entries to be synced to for the tests */ etype_class = RHYTHMDB_ENTRY_TYPE_GET_CLASS (RHYTHMDB_ENTRY_TYPE_SONG); etype_class->can_sync_metadata = (RhythmDBEntryTypeBooleanFunc)rb_true_function; etype_class->sync_metadata = (RhythmDBEntryTypeSyncFunc)rb_null_function; etype_class = RHYTHMDB_ENTRY_TYPE_GET_CLASS (RHYTHMDB_ENTRY_TYPE_IGNORE); etype_class->can_sync_metadata = (RhythmDBEntryTypeBooleanFunc)rb_true_function; etype_class->sync_metadata = (RhythmDBEntryTypeSyncFunc)rb_null_function; }
int main (int argc, char **argv) { RhythmDB *db; RhythmDBEntry *entry, *entry2, *entry3, *entry4; GtkTreeModel *main_model; GtkTreeIter iter; guint testnum = 1; query_func qfunc; gtk_init (&argc, &argv); gdk_threads_init (); rb_thread_helpers_init (); rb_debug_init (TRUE); GDK_THREADS_ENTER (); qfunc = rhythmdb_do_full_query; begin: db = rhythmdb_tree_new ("test"); /* * TEST 1: Entry creation with album */ g_print ("Test %d\n", testnum); rhythmdb_write_lock (db); entry = create_entry (db, "file:///sin.mp3", "Sin", "Pretty Hate Machine", "Nine Inch Nails", "Rock"); rhythmdb_write_unlock (db); g_print ("Test %d\n", testnum); testnum++; /* * TEST 2: Do a query for all songs, verify our single song is in it */ g_print ("Test %d\n", testnum); rhythmdb_read_lock (db); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); qfunc (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TYPE, RHYTHMDB_ENTRY_TYPE_IGNORE, RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (gtk_tree_model_get_iter_first (main_model, &iter)); /* We should only have one entry. */ g_assert (!gtk_tree_model_iter_next (main_model, &iter)); VERIFY_META_MODELS ("Pretty Hate Machine", "Nine Inch Nails", "Rock"); VERIFY_MAIN_MODEL (entry); DESTROY_MODELS (); rhythmdb_read_unlock (db); g_print ("Test %d\n", testnum); testnum++; /* * TEST 3: Do a query for songs named "Sin" */ g_print ("Test %d\n", testnum); rhythmdb_read_lock (db); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TITLE, "Sin", RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (gtk_tree_model_get_iter_first (main_model, &iter)); /* We should only have one entry. */ g_assert (!gtk_tree_model_iter_next (main_model, &iter)); VERIFY_META_MODELS ("Pretty Hate Machine", "Nine Inch Nails", "Rock"); VERIFY_MAIN_MODEL (entry); DESTROY_MODELS (); rhythmdb_read_unlock (db); g_print ("Test %d\n", testnum); testnum++; /* * TEST 4: Do a query for songs named "Cow", should be empty */ g_print ("Test %d\n", testnum); rhythmdb_read_lock (db); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TITLE, "Cow", RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (!gtk_tree_model_get_iter_first (main_model, &iter)); DESTROY_MODELS (); rhythmdb_read_unlock (db); g_print ("Test %d\n", testnum); testnum++; /* * TEST 5 * Do a query for songs named "Cow" and "Sin", should be empty. */ g_print ("Test %d\n", testnum); rhythmdb_read_lock (db); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TITLE, "Cow", RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TITLE, "Sin", RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (!gtk_tree_model_get_iter_first (main_model, &iter)); DESTROY_MODELS (); rhythmdb_read_unlock (db); g_print ("Test %d\n", testnum); testnum++; /* * TEST 6 * Do a query for songs named "Cow" or "Sin", should have our song. */ g_print ("Test %d\n", testnum); rhythmdb_read_lock (db); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TITLE, "Cow", RHYTHMDB_QUERY_DISJUNCTION, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TITLE, "Sin", RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (gtk_tree_model_get_iter_first (main_model, &iter)); /* We should only have one entry. */ g_assert (!gtk_tree_model_iter_next (main_model, &iter)); VERIFY_META_MODELS ("Pretty Hate Machine", "Nine Inch Nails", "Rock"); VERIFY_MAIN_MODEL (entry); DESTROY_MODELS (); rhythmdb_read_unlock (db); g_print ("Test %d\n", testnum); testnum++; /* * TEST 7 * Do a query for songs with Genre "Rock", should have our song. */ g_print ("Test %d\n", testnum); rhythmdb_read_lock (db); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_GENRE, "Rock", RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (gtk_tree_model_get_iter_first (main_model, &iter)); /* We should only have one entry. */ g_assert (!gtk_tree_model_iter_next (main_model, &iter)); VERIFY_META_MODELS ("Pretty Hate Machine", "Nine Inch Nails", "Rock"); VERIFY_MAIN_MODEL (entry); DESTROY_MODELS (); rhythmdb_read_unlock (db); g_print ("Test %d\n", testnum); testnum++; /* * TEST 8 * Do a query for songs with Genre "Nine Inch Nails", * should be empty. */ g_print ("Test %d\n", testnum); rhythmdb_read_lock (db); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_GENRE, "Nine Inch Nails", RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (!gtk_tree_model_get_iter_first (main_model, &iter)); DESTROY_MODELS (); rhythmdb_read_unlock (db); g_print ("Test %d\n", testnum); testnum++; /* * TEST 9 * Do a query for songs with album "Pretty Hate Machine", * should have our song. */ g_print ("Test %d\n", testnum); rhythmdb_read_lock (db); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_ALBUM, "Pretty Hate Machine", RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (gtk_tree_model_get_iter_first (main_model, &iter)); /* We should only have one entry. */ g_assert (!gtk_tree_model_iter_next (main_model, &iter)); VERIFY_META_MODELS ("Pretty Hate Machine", "Nine Inch Nails", "Rock"); VERIFY_MAIN_MODEL (entry); DESTROY_MODELS (); rhythmdb_read_unlock (db); g_print ("Test %d\n", testnum); testnum++; /* * TEST 10 * Do a query for songs with artist "Nine Inch Nails", * should have our song. */ g_print ("Test %d\n", testnum); rhythmdb_read_lock (db); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_ARTIST, "Nine Inch Nails", RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (gtk_tree_model_get_iter_first (main_model, &iter)); /* We should only have one entry. */ g_assert (!gtk_tree_model_iter_next (main_model, &iter)); VERIFY_META_MODELS ("Pretty Hate Machine", "Nine Inch Nails", "Rock"); VERIFY_MAIN_MODEL (entry); DESTROY_MODELS (); rhythmdb_read_unlock (db); g_print ("Test %d\n", testnum); testnum++; g_print ("Test %d\n", testnum); rhythmdb_write_lock (db); entry2 = create_entry (db, "file:///head like a hole.mp3", "Head Like A Hole", "Pretty Hate Machine", "Nine Inch Nails", "Rock"); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_ARTIST, "Nine Inch Nails", RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (gtk_tree_model_get_iter_first (main_model, &iter)); g_assert (gtk_tree_model_iter_next (main_model, &iter)); g_assert (!gtk_tree_model_iter_next (main_model, &iter)); VERIFY_META_MODELS ("Pretty Hate Machine", "Nine Inch Nails", "Rock"); VERIFY_MAIN_MODEL (entry); VERIFY_MAIN_MODEL (entry2); DESTROY_MODELS (); rhythmdb_write_unlock (db); g_print ("Test %d\n", testnum); testnum++; g_print ("Test %d\n", testnum); rhythmdb_write_lock (db); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_ALBUM, "Pretty Hate Machine", RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (gtk_tree_model_get_iter_first (main_model, &iter)); g_assert (gtk_tree_model_iter_next (main_model, &iter)); g_assert (!gtk_tree_model_iter_next (main_model, &iter)); VERIFY_META_MODELS ("Pretty Hate Machine", "Nine Inch Nails", "Rock"); VERIFY_MAIN_MODEL (entry); VERIFY_MAIN_MODEL (entry2); DESTROY_MODELS (); rhythmdb_write_unlock (db); g_print ("Test %d\n", testnum); testnum++; g_print ("Test %d\n", testnum); rhythmdb_write_lock (db); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_GENRE, "Rock", RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (gtk_tree_model_get_iter_first (main_model, &iter)); g_assert (gtk_tree_model_iter_next (main_model, &iter)); g_assert (!gtk_tree_model_iter_next (main_model, &iter)); VERIFY_META_MODELS ("Pretty Hate Machine", "Nine Inch Nails", "Rock"); VERIFY_MAIN_MODEL (entry); VERIFY_MAIN_MODEL (entry2); DESTROY_MODELS (); rhythmdb_write_unlock (db); g_print ("Test %d\n", testnum); g_print ("Test %d\n", testnum); rhythmdb_write_lock (db); entry3 = create_entry (db, "file:///angel.ogg", "Angel", "Mezzanine", "Massive Attack", "Electronica"); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_GENRE, "Electronica", RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (gtk_tree_model_get_iter_first (main_model, &iter)); g_assert (!gtk_tree_model_iter_next (main_model, &iter)); VERIFY_META_MODELS ("Mezzanine", "Massive Attack", "Electronica"); VERIFY_MAIN_MODEL (entry3); DESTROY_MODELS (); rhythmdb_write_unlock (db); g_print ("Test %d\n", testnum); testnum++; g_print ("Test %d\n", testnum); rhythmdb_write_lock (db); entry4 = create_entry (db, "file:///killa bees.ogg", "Killa Bees", "Armageddon", "Usual Suspects", "Drum N' Bass"); main_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (db)); rhythmdb_do_full_query (db, main_model, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TITLE, "Angel", RHYTHMDB_QUERY_DISJUNCTION, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TITLE, "Sin", RHYTHMDB_QUERY_DISJUNCTION, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TITLE, "Head Like A Hole", RHYTHMDB_QUERY_DISJUNCTION, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TITLE, "Killa Bees", RHYTHMDB_QUERY_END); wait_for_model_completion (RHYTHMDB_QUERY_MODEL (main_model)); g_assert (gtk_tree_model_get_iter_first (main_model, &iter)); g_assert (gtk_tree_model_iter_next (main_model, &iter)); g_assert (gtk_tree_model_iter_next (main_model, &iter)); g_assert (gtk_tree_model_iter_next (main_model, &iter)); g_assert (!gtk_tree_model_iter_next (main_model, &iter)); VERIFY_META_MODELS ("Mezzanine", "Massive Attack", "Electronica"); VERIFY_META_MODELS ("Armageddon", "Usual Suspects", "Drum N' Bass"); VERIFY_META_MODELS ("Pretty Hate Machine", "Nine Inch Nails", "Rock"); VERIFY_MAIN_MODEL (entry); VERIFY_MAIN_MODEL (entry2); VERIFY_MAIN_MODEL (entry3); VERIFY_MAIN_MODEL (entry4); DESTROY_MODELS (); rhythmdb_write_unlock (db); g_print ("Test %d\n", testnum); testnum++; if (qfunc == rhythmdb_do_full_query) { rhythmdb_shutdown (db); g_object_unref (G_OBJECT (db)); qfunc = rhythmdb_do_full_query_async; goto begin; } /* * THE END */ rhythmdb_shutdown (db); g_object_unref (G_OBJECT (db)); GDK_THREADS_LEAVE (); exit (0); }