static void query_helper (const gchar *query_filename, const gchar *results_filename) { GError *error = NULL; gchar *queries = NULL, *query; gchar *results = NULL; GString *test_results = NULL; g_file_get_contents (query_filename, &queries, NULL, &error); g_assert_no_error (error); g_file_get_contents (results_filename, &results, NULL, &error); g_assert_no_error (error); /* perform actual query */ query = strtok (queries, "~"); while (query) { TrackerDBCursor *cursor; cursor = tracker_data_query_sparql_cursor (query, &error); g_assert_no_error (error); /* compare results with reference output */ if (!test_results) { test_results = g_string_new (""); } else { g_string_append (test_results, "~\n"); } if (cursor) { gint col; while (tracker_db_cursor_iter_next (cursor, NULL, &error)) { for (col = 0; col < tracker_db_cursor_get_n_columns (cursor); col++) { const gchar *str; if (col > 0) { g_string_append (test_results, "\t"); } str = tracker_db_cursor_get_string (cursor, col, NULL); if (str != NULL) { /* bound variable */ g_string_append_printf (test_results, "\"%s\"", str); } } g_string_append (test_results, "\n"); } g_object_unref (cursor); } query = strtok (NULL, "~"); } if (strcmp (results, test_results->str)) { /* print result difference */ gchar *quoted_results; gchar *command_line; gchar *quoted_command_line; gchar *shell; gchar *diff; quoted_results = g_shell_quote (test_results->str); command_line = g_strdup_printf ("echo -n %s | diff -u %s -", quoted_results, results_filename); quoted_command_line = g_shell_quote (command_line); shell = g_strdup_printf ("sh -c %s", quoted_command_line); g_spawn_command_line_sync (shell, &diff, NULL, NULL, &error); g_assert_no_error (error); g_error ("%s", diff); g_free (quoted_results); g_free (command_line); g_free (quoted_command_line); g_free (shell); g_free (diff); } g_string_free (test_results, TRUE); g_free (results); g_free (queries); }
static void check_result (TrackerDBCursor *cursor, const TestInfo *test_info, const gchar *results_filename, GError *error) { int (*comparer) (const char *a, const char *b); GString *test_results; gchar *results; GError *nerror = NULL; if (test_info->expect_query_error) { comparer = strstr_i; g_assert (error != NULL); } else { comparer = strcmp; g_assert_no_error (error); } g_file_get_contents (results_filename, &results, NULL, &nerror); g_assert_no_error (nerror); g_clear_error (&nerror); /* compare results with reference output */ test_results = g_string_new (""); if (cursor) { gint col; while (tracker_db_cursor_iter_next (cursor, NULL, &error)) { for (col = 0; col < tracker_db_cursor_get_n_columns (cursor); col++) { const gchar *str; if (col > 0) { g_string_append (test_results, "\t"); } str = tracker_db_cursor_get_string (cursor, col, NULL); if (str != NULL) { /* bound variable */ g_string_append_printf (test_results, "\"%s\"", str); } } g_string_append (test_results, "\n"); } } else if (test_info->expect_query_error) { g_string_append (test_results, error->message); g_clear_error (&error); } if (comparer (results, test_results->str)) { /* print result difference */ gchar *quoted_results; gchar *command_line; gchar *quoted_command_line; gchar *shell; gchar *diff; quoted_results = g_shell_quote (test_results->str); command_line = g_strdup_printf ("echo -n %s | diff -u %s -", quoted_results, results_filename); quoted_command_line = g_shell_quote (command_line); shell = g_strdup_printf ("sh -c %s", quoted_command_line); g_spawn_command_line_sync (shell, &diff, NULL, NULL, &error); g_assert_no_error (error); g_error ("%s", diff); g_free (quoted_results); g_free (command_line); g_free (quoted_command_line); g_free (shell); g_free (diff); } g_string_free (test_results, TRUE); g_free (results); }