diff --git a/testsuite/gtk/Makefile.am b/testsuite/gtk/Makefile.am index 9774a15846..927241ca3b 100644 --- a/testsuite/gtk/Makefile.am +++ b/testsuite/gtk/Makefile.am @@ -128,6 +128,10 @@ keyhash_SOURCES = \ test_icontheme = \ icons/16x16/simple.png \ icons/index.theme \ + icons/scalable/everything-justregular.svg \ + icons/scalable/everything-justsymbolic-symbolic.svg \ + icons/scalable/everything.svg \ + icons/scalable/everything-symbolic.svg \ $(NULL) EXTRA_DIST += \ diff --git a/testsuite/gtk/icons/index.theme b/testsuite/gtk/icons/index.theme index 79ecb1781b..28e544aa59 100644 --- a/testsuite/gtk/icons/index.theme +++ b/testsuite/gtk/icons/index.theme @@ -3,10 +3,16 @@ Name=Icons Comment=Testing of the Icon theme code Example=16x16/simple.png -Directories=16x16 +Directories=16x16,scalable [16x16] Context=16x16 icons Size=16 Type=Fixed +[scalable] +Context=scalable icons +Type=Scalable +Size=128 +Min-Size=1 +Max-Size=256 diff --git a/testsuite/gtk/icons/scalable/everything-justregular.svg b/testsuite/gtk/icons/scalable/everything-justregular.svg new file mode 100644 index 0000000000..dfbda60d9e --- /dev/null +++ b/testsuite/gtk/icons/scalable/everything-justregular.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/testsuite/gtk/icons/scalable/everything-justsymbolic-symbolic.svg b/testsuite/gtk/icons/scalable/everything-justsymbolic-symbolic.svg new file mode 100644 index 0000000000..dfbda60d9e --- /dev/null +++ b/testsuite/gtk/icons/scalable/everything-justsymbolic-symbolic.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/testsuite/gtk/icons/scalable/everything-symbolic.svg b/testsuite/gtk/icons/scalable/everything-symbolic.svg new file mode 100644 index 0000000000..eefa1e58f7 --- /dev/null +++ b/testsuite/gtk/icons/scalable/everything-symbolic.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/testsuite/gtk/icons/scalable/everything.svg b/testsuite/gtk/icons/scalable/everything.svg new file mode 100644 index 0000000000..eefa1e58f7 --- /dev/null +++ b/testsuite/gtk/icons/scalable/everything.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/testsuite/gtk/icontheme.c b/testsuite/gtk/icontheme.c index 2f84616f83..ff69715928 100644 --- a/testsuite/gtk/icontheme.c +++ b/testsuite/gtk/icontheme.c @@ -2,6 +2,8 @@ #include +#define SCALABLE_IMAGE_SIZE (128) + static GtkIconTheme * get_test_icontheme (void) { @@ -62,25 +64,153 @@ assert_icon_lookup (const char *icon_name, { g_error ("Icon for \"%s\" with flags %s at size %d should be \"...%s\" but is \"...%s\"", icon_name, lookup_flags_to_string (flags), size, - filename, gtk_icon_info_get_filename (info) + strlen (gtk_icon_info_get_filename (info)) - strlen (filename)); + filename, gtk_icon_info_get_filename (info) + strlen (g_get_current_dir ())); return; } g_object_unref (info); } +static void +assert_icon_lookup_fails (const char *icon_name, + gint size, + GtkIconLookupFlags flags) +{ + static gboolean seen_could_not_find_message = FALSE; + GtkIconInfo *info; + + if (!seen_could_not_find_message) + g_test_expect_message ("Gtk", G_LOG_LEVEL_WARNING, "Could not find the icon*"); + info = gtk_icon_theme_lookup_icon (get_test_icontheme (), icon_name, size, flags); + if (!seen_could_not_find_message) + { + g_test_assert_expected_messages (); + seen_could_not_find_message = TRUE; + } + if (info != NULL) + { + g_error ("Should not find an icon for \"%s\" with flags %s at size %d, but found \"%s\"", + icon_name, lookup_flags_to_string (flags), size, gtk_icon_info_get_filename (info) + strlen (g_get_current_dir ())); + g_object_unref (info); + return; + } +} + + static void test_basics (void) { assert_icon_lookup ("simple", 16, 0, "/icons/16x16/simple.png"); } +static void +test_force_symbolic (void) +{ + /* check forcing symbolic works */ + assert_icon_lookup ("everything", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_FORCE_SYMBOLIC, + "/icons/scalable/everything-symbolic.svg"); + /* check forcing symbolic also works for symbolic icons (d'oh) */ + assert_icon_lookup ("everything-symbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_FORCE_SYMBOLIC, + "/icons/scalable/everything-symbolic.svg"); + + /* check all the combos for fallbacks on an icon that only exists as symbolic */ + assert_icon_lookup ("everything-justsymbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_FORCE_SYMBOLIC, + "/icons/scalable/everything-justsymbolic-symbolic.svg"); + assert_icon_lookup ("everything-justsymbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_GENERIC_FALLBACK | GTK_ICON_LOOKUP_FORCE_SYMBOLIC, + "/icons/scalable/everything-justsymbolic-symbolic.svg"); + assert_icon_lookup ("everything-justsymbolic-symbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_FORCE_SYMBOLIC, + "/icons/scalable/everything-justsymbolic-symbolic.svg"); + assert_icon_lookup ("everything-justsymbolic-symbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_GENERIC_FALLBACK | GTK_ICON_LOOKUP_FORCE_SYMBOLIC, + "/icons/scalable/everything-justsymbolic-symbolic.svg"); + + /* check all the combos for fallbacks, this time for an icon that only exists as regular */ + assert_icon_lookup ("everything-justregular", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_FORCE_SYMBOLIC, + "/icons/scalable/everything-justregular.svg"); + assert_icon_lookup ("everything-justregular", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_GENERIC_FALLBACK | GTK_ICON_LOOKUP_FORCE_SYMBOLIC, + "/icons/scalable/everything-symbolic.svg"); + assert_icon_lookup_fails ("everything-justregular-symbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_FORCE_SYMBOLIC); + assert_icon_lookup ("everything-justregular-symbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_GENERIC_FALLBACK | GTK_ICON_LOOKUP_FORCE_SYMBOLIC, + "/icons/scalable/everything-symbolic.svg"); +} + +static void +test_force_regular (void) +{ + /* check forcing regular works (d'oh) */ + assert_icon_lookup ("everything", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_FORCE_REGULAR, + "/icons/scalable/everything.svg"); + /* check forcing regular also works for symbolic icons ) */ + assert_icon_lookup ("everything-symbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_FORCE_REGULAR, + "/icons/scalable/everything.svg"); + + /* check all the combos for fallbacks on an icon that only exists as regular */ + assert_icon_lookup ("everything-justregular", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_FORCE_REGULAR, + "/icons/scalable/everything-justregular.svg"); + assert_icon_lookup ("everything-justregular", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_GENERIC_FALLBACK | GTK_ICON_LOOKUP_FORCE_REGULAR, + "/icons/scalable/everything-justregular.svg"); + assert_icon_lookup ("everything-justregular-symbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_FORCE_REGULAR, + "/icons/scalable/everything-justregular.svg"); + assert_icon_lookup ("everything-justregular-symbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_GENERIC_FALLBACK | GTK_ICON_LOOKUP_FORCE_REGULAR, + "/icons/scalable/everything-justregular.svg"); + + /* check all the combos for fallbacks, this time for an icon that only exists as symbolic */ + assert_icon_lookup_fails ("everything-justsymbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_FORCE_REGULAR); + assert_icon_lookup ("everything-justsymbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_GENERIC_FALLBACK | GTK_ICON_LOOKUP_FORCE_REGULAR, + "/icons/scalable/everything.svg"); + assert_icon_lookup ("everything-justsymbolic-symbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_FORCE_REGULAR, + "/icons/scalable/everything-justsymbolic-symbolic.svg"); + assert_icon_lookup ("everything-justsymbolic-symbolic", + SCALABLE_IMAGE_SIZE, + GTK_ICON_LOOKUP_GENERIC_FALLBACK | GTK_ICON_LOOKUP_FORCE_REGULAR, + "/icons/scalable/everything.svg"); +} + int main (int argc, char *argv[]) { gtk_test_init (&argc, &argv); g_test_add_func ("/icontheme/basics", test_basics); + g_test_add_func ("/icontheme/force-symbolic", test_force_symbolic); + g_test_add_func ("/icontheme/force-regular", test_force_regular); return g_test_run(); }