]> Pileus Git - ~andy/gtk/blobdiff - gtk/tests/stylecontext.c
filechooserbutton: Don't show the (None) item when the combo box is popped up
[~andy/gtk] / gtk / tests / stylecontext.c
index 69b9510bfd057861efd8458b5ddc0932ab7914e6..3435ce41a1534e9c8eebbc5c6e7697e9af5c4f63 100644 (file)
@@ -1,101 +1,5 @@
 #include <gtk/gtk.h>
 
-static void
-test_parse_empty (void)
-{
-  GtkCssProvider *provider;
-  GError *error;
-  gboolean res;
-
-  provider = gtk_css_provider_new ();
-  error = NULL;
-  res = gtk_css_provider_load_from_data (provider, "", -1, &error);
-
-  g_assert (res);
-  g_assert_no_error (error);
-  g_clear_error (&error);
-
-  g_object_unref (provider);
-}
-
-static void
-test_parse_at (void)
-{
-  GtkCssProvider *provider;
-  GError *error;
-  gboolean res;
-  gint i;
-  const gchar *valid[] = {
-    "@import \"" SRCDIR "/test.css\";",
-    "@import '" SRCDIR "/test.css';",
-    "@import url(\"" SRCDIR "/test.css\");",
-    "@import url('" SRCDIR "/test.css');",
-    "@import\nurl (\t\"" SRCDIR "/test.css\" ) ;",
-    "@define-color bg_color #f9a039;",
-    "@define-color color @bg_color;",
-    "@define-color color rgb(100, 99, 88);",
-    "@define-color color rgba(50%, 50%, 50%, 0.5);",
-    "@define-color color lighter(#f9a039);",
-    "@define-color color darker ( @blue ) ;",
-    "@define-color color shade(@blue, 1.3);",
-    "@define-color color alpha(@blue, 1.3);",
-    "@define-color color mix(@blue, @red, 0.2);",
-    "@define-color color red;",
-    "@define-color color mix(shade (#121212, 0.5), mix (rgb(10%,20%,100%), @blue,0.5), 0.2);",
-    "@define-color blue @blue;",
-    "@define-color blue123_a-b #123;",
-    NULL
-  };
-
-  const gchar *invalid[] = {
-    "@import " SRCDIR "/test.css ;",
-    "@import url ( \"" SRCDIR "/test.css\" xyz );",
-    "@import url(\");",
-    "@import url(');",
-    "@import url(\"abc');",
-    "@ import ;",
-    "@define_color blue  red;",
-    "@define-color blue #12234;",
-    "@define-color blue #12g234;",
-    "@define-color blue @@;",
-    "@define-color blue 5!#%4@DG$##x;",
-    "@define-color color mix(@red, @blue, @green);",
-    "@define-color color mix(@blue, 0.2, @red);",
-    "@define-color color mix(0.2, @blue, @red);",
-    "@define-color color mix(@blue, @red);",
-    "@define-color color mix(@blue);",
-    "@define-color color mix();",
-    "@define-color color rgba(50%, 50%, 50%);",
-    "@define-color color rgb(50%, a);",
-    "@define-color 1col rgb(50%, a);",
-    "@three-dee { some other crap };",
-    NULL
-  };
-
-  error = NULL;
-  for (i = 0; valid[i]; i++)
-    {
-      provider = gtk_css_provider_new ();
-      res = gtk_css_provider_load_from_data (provider, valid[i], -1, &error);
-      if (error)
-        g_print ("parsing '%s': got unexpected error: %s\n", valid[i], error->message);
-      g_assert_no_error (error);
-      g_assert (res);
-
-      g_object_unref (provider);
-   }
-
-  for (i = 0; invalid[i]; i++)
-    {
-      provider = gtk_css_provider_new ();
-      res = gtk_css_provider_load_from_data (provider, invalid[i], -1, &error);
-      g_assert_error (error, GTK_CSS_PROVIDER_ERROR, GTK_CSS_PROVIDER_ERROR_FAILED);
-      g_assert (!res);
-      g_object_unref (provider);
-      g_clear_error (&error);
-   }
-}
-
 static void
 test_parse_selectors (void)
 {
@@ -137,13 +41,6 @@ test_parse_selectors (void)
     "E, F /* comment here */ {}",
     "E,/* comment here */ F {}",
     "E1.e1_2 #T3_4 {}",
-    NULL
-  };
-
-  const gchar *invalid[] = {
-    /* nth-child and similar pseudo classes can only
-     * be used with regions, not with types
-     */
     "E:first-child {}",
     "E:last-child {}",
     "E:nth-child(first) {}",
@@ -151,9 +48,6 @@ test_parse_selectors (void)
     "E:nth-child(even) {}",
     "E:nth-child(odd) {}",
     "E:sorted {}",
-    /* widget state pseudo-classes can only be used for
-     * the last element
-     */
     "E:focused tab {}",
      NULL
   };
@@ -163,101 +57,13 @@ test_parse_selectors (void)
     {
       provider = gtk_css_provider_new ();
       res = gtk_css_provider_load_from_data (provider, valid[i], -1, &error);
+      if (error)
+        g_print ("parsing '%s': got unexpected error: %s\n", valid[i], error->message);
       g_assert_no_error (error);
       g_assert (res);
 
       g_object_unref (provider);
    }
-
-  for (i = 0; invalid[i]; i++)
-    {
-      provider = gtk_css_provider_new ();
-      res = gtk_css_provider_load_from_data (provider, invalid[i], -1, &error);
-      g_assert_error (error, GTK_CSS_PROVIDER_ERROR, GTK_CSS_PROVIDER_ERROR_FAILED);
-      g_assert (!res);
-      g_object_unref (provider);
-      g_clear_error (&error);
-   }
-}
-
-static void
-test_parse_declarations (void)
-{
-  GtkCssProvider *provider;
-  GError *error;
-  gboolean res;
-  gint i;
-  const gchar *valid[] = {
-    "* {}",
-    "* { font: Sans 15 }",
-    "* { font: Sans 15; }",
-    "* { font: bold }",
-    "* { color: red }",
-    "* { /* just a comment */ }",
-    "* { /* multi\nline\ncomment */ }",
-    "* { font: /* comment here */ Sans 15 }",
-    "* { color: red; background-color: shade (@bg_color, 0.5) }",
-    "* { margin: 5 }",
-    "* { margin: 5 10 }",
-    "* { margin: 5 10 3 }",
-    "* { margin: 5 10 3 5 }",
-    "* { padding: 5 }",
-    "* { padding: 5 10 }",
-    "* { border-width: 5; border-radius: 10 }",
-    "* { border-color: #ff00ff }",
-    "* { engine: clearlooks }",
-    "* { background-image: -gtk-gradient (linear,               \n"
-    "                                    left top, right top,   \n"
-    "                                    from (#fff), to (#000)) }",
-    "* { background-image: -gtk-gradient (linear,               \n"
-    "                                    0.0 0.5, 0.5 1.0,      \n"
-    "                                    from (#fff),           \n"
-    "                                    color-stop (0.5, #f00),\n"
-    "                                    to (#000))              }",
-    "* { background-image: -gtk-gradient (radial,               \n"
-    "                                     center center, 0.2,   \n"
-    "                                     center center, 0.8,   \n"
-    "                                     color-stop (0.0,#fff),\n"
-    "                                     color-stop (1.0,#000))}\n",
-    "* { border-image: url (\"" SRCDIR "/test.png\") 3 4 3 4 stretch       }",
-    "* { border-image: url (\"" SRCDIR "/test.png\") 3 4 3 4 repeat stretch}",
-    "* { transition: 150ms ease-in-out                          }",
-    "* { transition: 1s linear loop                             }",
-    NULL
-  };
-
-  const gchar *invalid[] = {
-    "* { color }",
-    "* { color:green; color }",
-    "* { color:red; color; color:green }",
-    "* { color:green; color: }",
-    "* { color:red; color:; color:green }",
-    "* { color:green; color{;color:maroon} }",
-    "* { color:red; color{;color:maroon}; color:green }",
-    "* { content: 'Hello",
-    NULL
-  };
-
-  error = NULL;
-  for (i = 0; valid[i]; i++)
-    {
-      provider = gtk_css_provider_new ();
-      res = gtk_css_provider_load_from_data (provider, valid[i], -1, &error);
-      g_assert_no_error (error);
-      g_assert (res);
-
-      g_object_unref (provider);
-   }
-
-  for (i = 0; invalid[i]; i++)
-    {
-      provider = gtk_css_provider_new ();
-      res = gtk_css_provider_load_from_data (provider, invalid[i], -1, &error);
-      g_assert_error (error, GTK_CSS_PROVIDER_ERROR, GTK_CSS_PROVIDER_ERROR_FAILED);
-      g_assert (!res);
-      g_object_unref (provider);
-      g_clear_error (&error);
-   }
 }
 
 static void
@@ -274,14 +80,14 @@ test_path (void)
   pos = gtk_widget_path_append_type (path, GTK_TYPE_WINDOW);
   g_assert_cmpint (pos, ==, 0);
   g_assert_cmpint (gtk_widget_path_length (path), ==, 1);
-  g_assert (gtk_widget_path_iter_get_widget_type (path, 0) == GTK_TYPE_WINDOW);
+  g_assert (gtk_widget_path_iter_get_object_type (path, 0) == GTK_TYPE_WINDOW);
   g_assert (gtk_widget_path_is_type (path, GTK_TYPE_WIDGET));
   g_assert (gtk_widget_path_iter_get_name (path, 0) == NULL);
 
   pos = gtk_widget_path_append_type (path, GTK_TYPE_WIDGET);
   g_assert_cmpint (pos, ==, 1);
   g_assert_cmpint (gtk_widget_path_length (path), ==, 2);
-  gtk_widget_path_iter_set_widget_type (path, pos, GTK_TYPE_BUTTON);
+  gtk_widget_path_iter_set_object_type (path, pos, GTK_TYPE_BUTTON);
   g_assert (gtk_widget_path_is_type (path, GTK_TYPE_BUTTON));
   g_assert (gtk_widget_path_has_parent (path, GTK_TYPE_WIDGET));
   g_assert (gtk_widget_path_has_parent (path, GTK_TYPE_WINDOW));
@@ -337,7 +143,7 @@ test_match (void)
   GtkCssProvider *provider;
   GError *error;
   const gchar *data;
-  GdkRGBA *color;
+  GdkRGBA color;
   GdkRGBA expected;
 
   error = NULL;
@@ -364,18 +170,16 @@ test_match (void)
   gtk_css_provider_load_from_data (provider, data, -1, &error);
   g_assert_no_error (error);
   gtk_style_context_invalidate (context);
-  gtk_style_context_get (context, 0, "color", &color, NULL);
-  g_assert (gdk_rgba_equal (color, &expected));
-  gdk_rgba_free (color);
+  gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
+  g_assert (gdk_rgba_equal (&color, &expected));
 
   data = "* { color: #f00 }\n"
          "GtkButton { color: #fff }";
   gtk_css_provider_load_from_data (provider, data, -1, &error);
   g_assert_no_error (error);
   gtk_style_context_invalidate (context);
-  gtk_style_context_get (context, 0, "color", &color, NULL);
-  g_assert (gdk_rgba_equal (color, &expected));
-  gdk_rgba_free (color);
+  gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
+  g_assert (gdk_rgba_equal (&color, &expected));
 
   data = "* { color: #f00 }\n"
          "GtkButton { color: #fff }\n"
@@ -383,18 +187,16 @@ test_match (void)
   gtk_css_provider_load_from_data (provider, data, -1, &error);
   g_assert_no_error (error);
   gtk_style_context_invalidate (context);
-  gtk_style_context_get (context, 0, "color", &color, NULL);
-  g_assert (gdk_rgba_equal (color, &expected));
-  gdk_rgba_free (color);
+  gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
+  g_assert (gdk_rgba_equal (&color, &expected));
 
   data = "* { color: #f00 }\n"
          ".button { color: #fff }";
   gtk_css_provider_load_from_data (provider, data, -1, &error);
   g_assert_no_error (error);
   gtk_style_context_invalidate (context);
-  gtk_style_context_get (context, 0, "color", &color, NULL);
-  g_assert (gdk_rgba_equal (color, &expected));
-  gdk_rgba_free (color);
+  gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
+  g_assert (gdk_rgba_equal (&color, &expected));
 
   data = "* { color: #f00 }\n"
          "GtkButton { color: #000 }\n"
@@ -402,9 +204,8 @@ test_match (void)
   gtk_css_provider_load_from_data (provider, data, -1, &error);
   g_assert_no_error (error);
   gtk_style_context_invalidate (context);
-  gtk_style_context_get (context, 0, "color", &color, NULL);
-  g_assert (gdk_rgba_equal (color, &expected));
-  gdk_rgba_free (color);
+  gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
+  g_assert (gdk_rgba_equal (&color, &expected));
 
   data = "* { color: #f00 }\n"
          "GtkButton { color: #000 }\n"
@@ -412,9 +213,8 @@ test_match (void)
   gtk_css_provider_load_from_data (provider, data, -1, &error);
   g_assert_no_error (error);
   gtk_style_context_invalidate (context);
-  gtk_style_context_get (context, 0, "color", &color, NULL);
-  g_assert (gdk_rgba_equal (color, &expected));
-  gdk_rgba_free (color);
+  gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
+  g_assert (gdk_rgba_equal (&color, &expected));
 
   data = "* { color: #f00 }\n"
          ".button { color: #000 }\n"
@@ -422,9 +222,8 @@ test_match (void)
   gtk_css_provider_load_from_data (provider, data, -1, &error);
   g_assert_no_error (error);
   gtk_style_context_invalidate (context);
-  gtk_style_context_get (context, 0, "color", &color, NULL);
-  g_assert (gdk_rgba_equal (color, &expected));
-  gdk_rgba_free (color);
+  gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
+  g_assert (gdk_rgba_equal (&color, &expected));
 
   data = "* { color: #f00 }\n"
          "* .button { color: #000 }\n"
@@ -432,9 +231,8 @@ test_match (void)
   gtk_css_provider_load_from_data (provider, data, -1, &error);
   g_assert_no_error (error);
   gtk_style_context_invalidate (context);
-  gtk_style_context_get (context, 0, "color", &color, NULL);
-  g_assert (gdk_rgba_equal (color, &expected));
-  gdk_rgba_free (color);
+  gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
+  g_assert (gdk_rgba_equal (&color, &expected));
 
   data = "* { color: #f00 }\n"
          "GtkWindow .button { color: #000 }\n"
@@ -442,19 +240,17 @@ test_match (void)
   gtk_css_provider_load_from_data (provider, data, -1, &error);
   g_assert_no_error (error);
   gtk_style_context_invalidate (context);
-  gtk_style_context_get (context, 0, "color", &color, NULL);
-  g_assert (gdk_rgba_equal (color, &expected));
-  gdk_rgba_free (color);
+  gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
+  g_assert (gdk_rgba_equal (&color, &expected));
 
   data = "* { color: #f00 }\n"
-         "GtkWindow .button { color: #fff }\n"
-         "GObject .button { color: #000 }";
+         "GtkWindow .button { color: #000 }\n"
+         "GObject .button { color: #fff }";
   gtk_css_provider_load_from_data (provider, data, -1, &error);
   g_assert_no_error (error);
   gtk_style_context_invalidate (context);
-  gtk_style_context_get (context, 0, "color", &color, NULL);
-  g_assert (gdk_rgba_equal (color, &expected));
-  gdk_rgba_free (color);
+  gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
+  g_assert (gdk_rgba_equal (&color, &expected));
 
   g_object_unref (provider);
   g_object_unref (context);
@@ -469,7 +265,7 @@ test_style_property (void)
   GError *error;
   const gchar *data;
   gint x;
-  GdkRGBA *color;
+  GdkRGBA color;
   GdkRGBA expected;
 
   error = NULL;
@@ -505,10 +301,9 @@ test_style_property (void)
 
   gtk_style_context_invalidate (context);
 
-  gtk_style_context_get (context, GTK_STATE_FLAG_PRELIGHT, "color", &color, NULL);
+  gtk_style_context_get_color (context, GTK_STATE_FLAG_PRELIGHT, &color);
   gdk_rgba_parse (&expected, "#003");
-  g_assert (gdk_rgba_equal (color, &expected));
-  gdk_rgba_free (color);
+  g_assert (gdk_rgba_equal (&color, &expected));
 
   gtk_style_context_get_style (context, "child-displacement-x", &x, NULL);
 
@@ -518,19 +313,47 @@ test_style_property (void)
   g_object_unref (context);
 }
 
+static void
+test_basic_properties (void)
+{
+  GtkStyleContext *context;
+  GtkWidgetPath *path;
+  GdkRGBA *color;
+  GdkRGBA *bg_color;
+  PangoFontDescription *font;
+
+  context = gtk_style_context_new ();
+  path = gtk_widget_path_new ();
+  gtk_style_context_set_path (context, path);
+  gtk_widget_path_free (path);
+
+  gtk_style_context_get (context, 0,
+                         "color", &color,
+                         "background-color", &bg_color,
+                         "font", &font,
+                         NULL);
+  g_assert (color != NULL);
+  g_assert (bg_color != NULL);
+  g_assert (font != NULL);
+
+  gdk_rgba_free (color);
+  gdk_rgba_free (bg_color);
+  pango_font_description_free (font);
+
+  g_object_unref (context);
+}
+
 int
 main (int argc, char *argv[])
 {
   gtk_init (NULL, NULL);
   g_test_init (&argc, &argv, NULL);
 
-  g_test_add_func ("/style/parse/empty", test_parse_empty);
-  g_test_add_func ("/style/parse/at", test_parse_at);
   g_test_add_func ("/style/parse/selectors", test_parse_selectors);
-  g_test_add_func ("/style/parse/declarations", test_parse_declarations);
   g_test_add_func ("/style/path", test_path);
   g_test_add_func ("/style/match", test_match);
   g_test_add_func ("/style/style-property", test_style_property);
+  g_test_add_func ("/style/basic", test_basic_properties);
 
   return g_test_run ();
 }