]> Pileus Git - ~andy/gtk/commitdiff
tests: Check errors in css test
authorBenjamin Otte <otte@redhat.com>
Thu, 7 Apr 2011 23:32:13 +0000 (01:32 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 18 May 2011 19:58:44 +0000 (21:58 +0200)
tests/css/parser/Makefile.am
tests/css/parser/close-at-end-of-file.errors [new file with mode: 0644]
tests/css/parser/does-not-exist.errors [new file with mode: 0644]
tests/css/parser/test-css-parser.c

index 36354f9ec2b14310533b602960dee489ee1383eb..b606dcd20201aac4a70bc8b84f3462e7700e737b 100644 (file)
@@ -26,8 +26,10 @@ clean-local:
 
 EXTRA_DIST += \
        close-at-end-of-file.css \
+       close-at-end-of-file.errors \
        close-at-end-of-file.ref.css \
        does-not-exist.css \
+       does-not-exist.errors \
        does-not-exist.ref.css \
        no-semicolon.css \
        no-semicolon.ref.css \
diff --git a/tests/css/parser/close-at-end-of-file.errors b/tests/css/parser/close-at-end-of-file.errors
new file mode 100644 (file)
index 0000000..341b007
--- /dev/null
@@ -0,0 +1 @@
+close-at-end-of-file.css:3: error: gtk-css-provider-error-quark 1
diff --git a/tests/css/parser/does-not-exist.errors b/tests/css/parser/does-not-exist.errors
new file mode 100644 (file)
index 0000000..eb57998
--- /dev/null
@@ -0,0 +1 @@
+does-not-exist.css:2: error: gtk-css-provider-error-quark 2
index 8c67e3b9d9bf323edc0078d3e02a5a6e9a802960..b947bdf9ca968e5569e2dce535ab20a4acffc966 100644 (file)
@@ -47,6 +47,27 @@ test_get_reference_file (const char *css_file)
   return g_string_free (file, FALSE);
 }
 
+static char *
+test_get_errors_file (const char *css_file)
+{
+  GString *file = g_string_new (NULL);
+
+  if (g_str_has_suffix (css_file, ".css"))
+    g_string_append_len (file, css_file, strlen (css_file) - 4);
+  else
+    g_string_append (file, css_file);
+  
+  g_string_append (file, ".errors");
+
+  if (!g_file_test (file->str, G_FILE_TEST_EXISTS))
+    {
+      g_string_free (file, TRUE);
+      return NULL;
+    }
+
+  return g_string_free (file, FALSE);
+}
+
 static char *
 diff_with_file (const char  *file1,
                 char        *text,
@@ -95,17 +116,47 @@ done:
   return diff;
 }
 
+static void
+parsing_error_cb (GtkCssProvider *provider,
+                  const gchar     *path,
+                  guint            line,
+                  guint            position,
+                  const GError *   error,
+                  GString *        errors)
+{
+  char *basename;
+
+  g_assert (path);
+  g_assert (line > 0);
+
+  basename = g_path_get_basename (path);
+
+  g_string_append_printf (errors,
+                          "%s:%u: error: %s %u\n",
+                          basename, line,
+                          g_quark_to_string (error->domain),
+                          error->code);
+
+  g_free (basename);
+}
+
 static void
 test_css_file (GFile *file)
 {
   GtkCssProvider *provider;
   char *css, *diff;
-  char *css_file, *reference_file;
+  char *css_file, *reference_file, *errors_file;
+  GString *errors;
   GError *error = NULL;
 
   css_file = g_file_get_path (file);
+  errors = g_string_new ("");
 
   provider = gtk_css_provider_new ();
+  g_signal_connect (provider, 
+                    "parsing-error",
+                    G_CALLBACK (parsing_error_cb),
+                    errors);
   gtk_css_provider_load_from_path (provider,
                                    css_file,
                                    &error);
@@ -120,15 +171,37 @@ test_css_file (GFile *file)
   diff = diff_with_file (reference_file, css, -1, &error);
   g_assert_no_error (error);
 
+  if (diff && diff[0])
+    {
+      g_test_message ("%s", diff);
+      g_assert_not_reached ();
+    }
+
   g_free (css);
   g_free (reference_file);
 
-  if (diff && diff[0])
+  errors_file = test_get_errors_file (css_file);
+
+  if (errors_file)
     {
-      g_test_message ("%s", diff);
+      diff = diff_with_file (errors_file, errors->str, errors->len, &error);
+      g_assert_no_error (error);
+
+      if (diff && diff[0])
+        {
+          g_test_message ("%s", diff);
+          g_assert_not_reached ();
+        }
+    }
+  else if (errors->str[0])
+    {
+      g_test_message ("Unexpected errors:\n%s", errors->str);
       g_assert_not_reached ();
     }
 
+  g_free (errors_file);
+  g_string_free (errors, TRUE);
+
   g_free (diff);
   g_free (css_file);
 }