From: Matthias Clasen Date: Mon, 19 Jun 2023 03:05:21 +0000 (-0400) Subject: Add tests for accessible name computation X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~125^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=663e3d0811ee9e0625ce7b462661ffaa4eafa5d3;p=gtk4.git Add tests for accessible name computation --- diff --git a/testsuite/a11y/meson.build b/testsuite/a11y/meson.build index 6d46647eef..fdb6da1f4b 100644 --- a/testsuite/a11y/meson.build +++ b/testsuite/a11y/meson.build @@ -33,6 +33,9 @@ tests = [ { 'name': 'window' }, ] +internal_tests = [ + { 'name': 'names' }, +] is_debug = get_option('buildtype').startswith('debug') @@ -80,3 +83,31 @@ foreach t : tests suite: ['a11y'] + test_extra_suites, ) endforeach + +foreach t : internal_tests + test_name = t.get('name') + test_srcs = ['@0@.c'.format(test_name)] + t.get('sources', []) + test_extra_cargs = t.get('c_args', []) + test_extra_ldflags = t.get('link_args', []) + test_extra_suites = t.get('suites', []) + test_timeout = 60 + + test_exe = executable(test_name, + sources: test_srcs, + c_args: test_cargs + test_extra_cargs + ['-DGTK_COMPILATION'], + link_args: test_extra_ldflags, + dependencies: libgtk_static_dep, + ) + + if test_extra_suites.contains('slow') + test_timeout = 90 + endif + + test(test_name, test_exe, + args: [ '--tap', '-k' ], + protocol: 'tap', + timeout: test_timeout, + env: test_env, + suite: ['a11y'] + test_extra_suites, + ) +endforeach diff --git a/testsuite/a11y/names.c b/testsuite/a11y/names.c new file mode 100644 index 0000000000..daba003eaf --- /dev/null +++ b/testsuite/a11y/names.c @@ -0,0 +1,133 @@ +#include +#include "gtk/gtkatcontextprivate.h" +#include "gtk/gtkwidgetprivate.h" + +static void +test_name_content (void) +{ + GtkWidget *label1, *label2, *box, *button; + char *name; + + label1 = gtk_label_new ("a"); + label2 = gtk_label_new ("b"); + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + button = gtk_button_new (); + + gtk_box_append (GTK_BOX (box), label1); + gtk_box_append (GTK_BOX (box), label2); + gtk_button_set_child (GTK_BUTTON (button), box); + g_object_ref_sink (button); + + /* gtk_at_context_get_name only works on realized contexts */ + gtk_widget_realize_at_context (label1); + gtk_widget_realize_at_context (label2); + gtk_widget_realize_at_context (box); + gtk_widget_realize_at_context (button); + + name = gtk_at_context_get_name (gtk_accessible_get_at_context (GTK_ACCESSIBLE (label1))); + g_assert_cmpstr (name, ==, "a"); + g_free (name); + + /* this is because generic doesn't allow naming */ + name = gtk_at_context_get_name (gtk_accessible_get_at_context (GTK_ACCESSIBLE (box))); + g_assert_cmpstr (name, ==, ""); + g_free (name); + + name = gtk_at_context_get_name (gtk_accessible_get_at_context (GTK_ACCESSIBLE (button))); + g_assert_cmpstr (name, ==, "a b"); + g_free (name); + + gtk_widget_set_visible (label2, FALSE); + + name = gtk_at_context_get_name (gtk_accessible_get_at_context (GTK_ACCESSIBLE (button))); + g_assert_cmpstr (name, ==, "a"); + g_free (name); + + g_object_unref (button); +} + +static void +test_name_tooltip (void) +{ + GtkWidget *image = gtk_image_new (); + char *name; + + g_object_ref_sink (image); + gtk_widget_realize_at_context (image); + + gtk_widget_set_tooltip_text (image, "tooltip"); + + name = gtk_at_context_get_name (gtk_accessible_get_at_context (GTK_ACCESSIBLE (image))); + g_assert_cmpstr (name, ==, "tooltip"); + g_free (name); + + g_object_unref (image); +} + +static void +test_name_label (void) +{ + GtkWidget *image = gtk_image_new (); + char *name; + char *desc; + + g_object_ref_sink (image); + gtk_widget_realize_at_context (image); + + gtk_widget_set_tooltip_text (image, "tooltip"); + + gtk_accessible_update_property (GTK_ACCESSIBLE (image), + GTK_ACCESSIBLE_PROPERTY_LABEL, "label", + -1); + + name = gtk_at_context_get_name (gtk_accessible_get_at_context (GTK_ACCESSIBLE (image))); + desc = gtk_at_context_get_description (gtk_accessible_get_at_context (GTK_ACCESSIBLE (image))); + + g_assert_cmpstr (name, ==, "label"); + g_assert_cmpstr (desc, ==, "tooltip"); + + g_free (name); + g_free (desc); + + g_object_unref (image); +} + +static void +test_name_prohibited (void) +{ + GtkWidget *widget; + char *name; + char *desc; + + widget = g_object_new (GTK_TYPE_BUTTON, + "accessible-role", GTK_ACCESSIBLE_ROLE_TIME, + "label", "too late", + NULL); + + g_object_ref_sink (widget); + gtk_widget_realize_at_context (widget); + + name = gtk_at_context_get_name (gtk_accessible_get_at_context (GTK_ACCESSIBLE (widget))); + desc = gtk_at_context_get_description (gtk_accessible_get_at_context (GTK_ACCESSIBLE (widget))); + + g_assert_cmpstr (name, ==, ""); + g_assert_cmpstr (desc, ==, ""); + + g_free (name); + g_free (desc); + + g_object_unref (widget); +} + +int +main (int argc, char *argv[]) +{ + gtk_test_init (&argc, &argv, NULL); + + g_test_add_func ("/a11y/name/content", test_name_content); + g_test_add_func ("/a11y/name/tooltip", test_name_tooltip); + g_test_add_func ("/a11y/name/label", test_name_label); + g_test_add_func ("/a11y/name/prohibited", test_name_prohibited); + + return g_test_run (); +}