1 #include <gtk/gtk.h>
2
3 typedef struct _Theme Theme;
4
5 struct _Theme
6 {
7 const char *name;
8 const char *variant;
9 };
10
11 static void
theme_parsing_error(GtkCssProvider * provider,GtkCssSection * section,const GError * error,gpointer unused)12 theme_parsing_error (GtkCssProvider *provider,
13 GtkCssSection *section,
14 const GError *error,
15 gpointer unused)
16 {
17 char *s = gtk_css_section_to_string (section);
18
19 g_test_message ("Theme parsing error: %s: %s",
20 s,
21 error->message);
22
23 g_free (s);
24
25 g_test_fail ();
26 }
27
28 static void
test_theme(gconstpointer data)29 test_theme (gconstpointer data)
30 {
31 const Theme *theme = data;
32 GtkCssProvider *provider;
33
34 provider = gtk_css_provider_new ();
35 g_signal_connect (provider, "parsing-error",
36 G_CALLBACK (theme_parsing_error), NULL);
37 gtk_css_provider_load_named (provider, theme->name, theme->variant);
38 g_object_unref (provider);
39 }
40
41 int
main(int argc,char * argv[])42 main (int argc, char *argv[])
43 {
44 const Theme themes[] = {
45 { "Adwaita", NULL },
46 { "Adwaita", "dark" },
47 { "HighContrast", NULL },
48 { "HighContrast", "dark" }
49 };
50 guint i;
51
52 gtk_init ();
53 (g_test_init) (&argc, &argv, NULL);
54
55 for (i = 0; i < G_N_ELEMENTS (themes); i++)
56 {
57 char *testname;
58
59 if (themes[i].variant == NULL)
60 testname = g_strdup_printf ("/theme-validate/%s", themes[i].name);
61 else
62 testname = g_strdup_printf ("/theme-validate/%s-%s", themes[i].name, themes[i].variant);
63
64 g_test_add_data_func (testname, &themes[i], test_theme);
65
66 g_free (testname);
67 }
68
69 return g_test_run ();
70 }
71