testsuite: Add some more a11y tests
authorMatthias Clasen <mclasen@redhat.com>
Sun, 18 Jun 2023 02:00:04 +0000 (22:00 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 18 Jun 2023 02:00:55 +0000 (22:00 -0400)
Test that overriding roles works, both
via g_object_new, and via ui files.

testsuite/a11y/entry.c
testsuite/a11y/meson.build
testsuite/a11y/togglebutton.c [new file with mode: 0644]

index 67cfdcca552460d7203d89324db30b94aa118cd3..7e2fbd835b11e17fe88f3b213534e0d4daef3ab9 100644 (file)
@@ -25,6 +25,7 @@ entry_properties (void)
 
   gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER, "Hello");
   gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_READ_ONLY, TRUE);
+  gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_HAS_POPUP, TRUE);
 
   g_object_unref (widget);
 }
index 9129731f36e07ce25b36ffd01597edf7bb546df3..b3baa13b40724aed850ef21c6bd1b6b0986fd7be 100644 (file)
@@ -28,6 +28,7 @@ tests = [
   { 'name': 'stack' },
   { 'name': 'switch' },
   { 'name': 'textview' },
+  { 'name': 'togglebutton' },
   { 'name': 'window' },
 ]
 
diff --git a/testsuite/a11y/togglebutton.c b/testsuite/a11y/togglebutton.c
new file mode 100644 (file)
index 0000000..f4275bd
--- /dev/null
@@ -0,0 +1,91 @@
+#include <gtk/gtk.h>
+
+static void
+toggle_button_role (void)
+{
+  GtkWidget *button = gtk_toggle_button_new ();
+  g_object_ref_sink (button);
+
+  gtk_test_accessible_assert_role (button, GTK_ACCESSIBLE_ROLE_TOGGLE_BUTTON);
+
+  /* Simple command buttons have a "pressed" state set to "undefined" */
+  gtk_test_accessible_assert_state (button, GTK_ACCESSIBLE_STATE_PRESSED, GTK_ACCESSIBLE_VALUE_UNDEFINED);
+
+  g_object_unref (button);
+}
+
+static void
+toggle_button_label (void)
+{
+  GtkWidget *button = gtk_toggle_button_new_with_label ("Hello");
+  g_object_ref_sink (button);
+
+  gtk_test_accessible_assert_relation (GTK_ACCESSIBLE (button),
+                                       GTK_ACCESSIBLE_RELATION_LABELLED_BY, gtk_widget_get_first_child (button), NULL);
+
+  g_object_unref (button);
+}
+
+/* Check that we set up a labelled_by relationship between a button
+ * and its label.
+ */
+static void
+toggle_button_relation (void)
+{
+  GtkWidget *button = gtk_toggle_button_new_with_mnemonic ("_Hello");
+
+  g_object_ref_sink (button);
+
+  gtk_test_accessible_assert_relation (GTK_ACCESSIBLE (button),
+                                       GTK_ACCESSIBLE_RELATION_LABELLED_BY, gtk_widget_get_first_child (button), NULL);
+
+  g_object_unref (button);
+}
+
+static void
+toggle_button_generic (void)
+{
+  GtkBuilder *builder;
+  GtkWidget *button;
+  GError *error = NULL;
+
+  button = g_object_new (GTK_TYPE_TOGGLE_BUTTON,
+                         "accessible-role", GTK_ACCESSIBLE_ROLE_GENERIC,
+                         NULL);
+
+  g_object_ref_sink (button);
+
+  gtk_test_accessible_assert_role (button, GTK_ACCESSIBLE_ROLE_GENERIC);
+
+  g_object_unref (button);
+
+  builder = gtk_builder_new ();
+
+  gtk_builder_add_from_string (builder,
+    "<interface>"
+    "  <object class='GtkToggleButton' id='togglebutton'>"
+    "    <property name='accessible-role'>generic</property>"
+    "  </object>"
+    "</interface>",
+    -1, &error);
+  g_assert_no_error (error);
+
+  button = GTK_WIDGET (gtk_builder_get_object (builder, "togglebutton"));
+
+  gtk_test_accessible_assert_role (button, GTK_ACCESSIBLE_ROLE_GENERIC);
+
+  g_object_unref (builder);
+}
+
+int
+main (int argc, char *argv[])
+{
+  gtk_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/a11y/togglebutton/role", toggle_button_role);
+  g_test_add_func ("/a11y/togglebutton/label", toggle_button_label);
+  g_test_add_func ("/a11y/togglebutton/relation", toggle_button_relation);
+  g_test_add_func ("/a11y/togglebutton/generic", toggle_button_generic);
+
+  return g_test_run ();
+}