[gtk/trigger-parser] Improve GtkShortcutTrigger parsing tests
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/trigger-parser] Improve GtkShortcutTrigger parsing tests
- Date: Fri, 27 Mar 2020 14:57:17 +0000 (UTC)
commit b1327167e2117211581a02711e6ee4abbb8387ca
Author: Emmanuele Bassi <ebassi gnome org>
Date: Fri Mar 27 14:35:09 2020 +0000
Improve GtkShortcutTrigger parsing tests
Split off all possible cases into sub-tests, and add more thorough
checks on the invalid strings unit.
testsuite/gtk/shortcuts.c | 196 +++++++++++++++++++++++++++++++++++-----------
1 file changed, 152 insertions(+), 44 deletions(-)
---
diff --git a/testsuite/gtk/shortcuts.c b/testsuite/gtk/shortcuts.c
index fca321a49f..1f235b71ff 100644
--- a/testsuite/gtk/shortcuts.c
+++ b/testsuite/gtk/shortcuts.c
@@ -151,76 +151,180 @@ test_trigger_equal (void)
}
static void
-test_trigger_parse (void)
+test_trigger_parse_never (void)
+{
+ GtkShortcutTrigger *trigger;
+
+ trigger = gtk_shortcut_trigger_parse_string ("never");
+ g_assert_true (GTK_IS_NEVER_TRIGGER (trigger));
+
+ g_object_unref (trigger);
+}
+
+static void
+test_trigger_parse_keyval (void)
+{
+ const struct
+ {
+ const char *str;
+ GdkModifierType modifiers;
+ guint keyval;
+ int trigger_type;
+ } tests[] = {
+ { "<Primary><Alt>z", GDK_CONTROL_MASK | GDK_MOD1_MASK, 'z' },
+ { "<Control>U", GDK_CONTROL_MASK, 'u' },
+ { "<Hyper>x", GDK_HYPER_MASK, 'x' },
+ { "<Meta>y", GDK_META_MASK, 'y' },
+ { "KP_7", 0, GDK_KEY_KP_7 },
+ { "<Shift>exclam", GDK_SHIFT_MASK, '!' },
+ };
+
+ for (int i = 0; i < G_N_ELEMENTS (tests); i++)
+ {
+ g_test_message ("Checking: '%s'", tests[i].str);
+
+ GtkShortcutTrigger *trigger = gtk_shortcut_trigger_parse_string (tests[i].str);
+
+ g_assert_true (GTK_IS_KEYVAL_TRIGGER (trigger));
+ g_assert_cmpint (gtk_keyval_trigger_get_modifiers (GTK_KEYVAL_TRIGGER (trigger)),
+ ==,
+ tests[i].modifiers);
+ g_assert_cmpuint (gtk_keyval_trigger_get_keyval (GTK_KEYVAL_TRIGGER (trigger)),
+ ==,
+ tests[i].keyval);
+ g_object_unref (trigger);
+ }
+}
+
+static void
+test_trigger_parse_mnemonic (void)
+{
+ struct
+ {
+ const char *str;
+ guint keyval;
+ } tests[] = {
+ { "_A", GDK_KEY_a },
+ { "_s", GDK_KEY_s },
+ };
+
+ for (int i = 0; i < G_N_ELEMENTS (tests); i++)
+ {
+ g_test_message ("Checking: '%s'", tests[i].str);
+
+ GtkShortcutTrigger *trigger = gtk_shortcut_trigger_parse_string (tests[i].str);
+
+ g_assert_true (GTK_IS_MNEMONIC_TRIGGER (trigger));
+ g_assert_cmpuint (gtk_mnemonic_trigger_get_keyval (GTK_MNEMONIC_TRIGGER (trigger)),
+ ==,
+ tests[i].keyval);
+ g_object_unref (trigger);
+ }
+}
+
+static void
+test_trigger_parse_alternative (void)
{
enum
{
+ TRIGGER_NEVER,
TRIGGER_KEYVAL,
TRIGGER_MNEMONIC,
- TRIGGER_ALT,
- TRIGGER_NEVER,
- TRIGGER_INVALID
+ TRIGGER_ALTERNATIVE
};
- struct {
+ const struct
+ {
const char *str;
- GdkModifierType modifiers;
- guint keyval;
- int trigger_type;
+ int first;
+ int second;
} tests[] = {
- { "<Primary><Alt>z", GDK_CONTROL_MASK | GDK_MOD1_MASK, 'z', TRIGGER_KEYVAL },
- { "<Control>U", GDK_CONTROL_MASK, 'u', TRIGGER_KEYVAL },
- { "<Hyper>x", GDK_HYPER_MASK, 'x', TRIGGER_KEYVAL },
- { "<Meta>y", GDK_META_MASK, 'y', TRIGGER_KEYVAL },
- { "KP_7", 0, GDK_KEY_KP_7, TRIGGER_KEYVAL },
- { "<Shift>exclam", GDK_SHIFT_MASK, '!', TRIGGER_KEYVAL },
- { "never", 0, 0, TRIGGER_NEVER },
- { "_A", 0, GDK_KEY_a, TRIGGER_MNEMONIC },
- { "_s", 0, GDK_KEY_s, TRIGGER_MNEMONIC },
- { "foo", 0, 0, TRIGGER_INVALID },
- { "<Nyaa>B", 0, 0, TRIGGER_INVALID },
- { "<Control>U|<Shift><Control>U", GDK_CONTROL_MASK, 'u', TRIGGER_ALT }
+ { "U|<Primary>U", TRIGGER_KEYVAL, TRIGGER_KEYVAL },
+ { "_U|<Shift>u", TRIGGER_MNEMONIC, TRIGGER_KEYVAL },
+ { "x|_x|<Primary>x", TRIGGER_KEYVAL, TRIGGER_ALTERNATIVE },
};
- GtkShortcutTrigger *trigger;
- int i;
- for (i = 0; i < G_N_ELEMENTS (tests); i++)
+ for (int i = 0; i < G_N_ELEMENTS (tests); i++)
{
- trigger = gtk_shortcut_trigger_parse_string (tests[i].str);
+ g_test_message ("Checking: '%s'", tests[i].str);
- switch (tests[i].trigger_type)
+ GtkShortcutTrigger *trigger = gtk_shortcut_trigger_parse_string (tests[i].str);
+
+ g_assert_true (GTK_IS_ALTERNATIVE_TRIGGER (trigger));
+
+ GtkShortcutTrigger *t1 = gtk_alternative_trigger_get_first (GTK_ALTERNATIVE_TRIGGER (trigger));
+
+ switch (tests[i].first)
{
- case TRIGGER_INVALID:
- g_assert_null (trigger);
+ case TRIGGER_NEVER:
+ g_assert_true (GTK_IS_NEVER_TRIGGER (t1));
break;
+
case TRIGGER_KEYVAL:
- g_assert_true (GTK_IS_KEYVAL_TRIGGER (trigger));
- g_assert_cmpint (gtk_keyval_trigger_get_modifiers (GTK_KEYVAL_TRIGGER (trigger)),
- ==,
- tests[i].modifiers);
- g_assert_cmpuint (gtk_keyval_trigger_get_keyval (GTK_KEYVAL_TRIGGER (trigger)),
- ==,
- tests[i].keyval);
+ g_assert_true (GTK_IS_KEYVAL_TRIGGER (t1));
break;
- case TRIGGER_ALT:
- g_assert_true (GTK_IS_ALTERNATIVE_TRIGGER (trigger));
+
+ case TRIGGER_MNEMONIC:
+ g_assert_true (GTK_IS_MNEMONIC_TRIGGER (t1));
+ break;
+
+ case TRIGGER_ALTERNATIVE:
+ g_assert_true (GTK_IS_ALTERNATIVE_TRIGGER (t1));
+ break;
+
+ default:
+ g_assert_not_reached ();
break;
+ }
+
+ GtkShortcutTrigger *t2 = gtk_alternative_trigger_get_second (GTK_ALTERNATIVE_TRIGGER (trigger));
+
+ switch (tests[i].second)
+ {
case TRIGGER_NEVER:
- g_assert_true (GTK_IS_NEVER_TRIGGER (trigger));
+ g_assert_true (GTK_IS_NEVER_TRIGGER (t2));
+ break;
+
+ case TRIGGER_KEYVAL:
+ g_assert_true (GTK_IS_KEYVAL_TRIGGER (t2));
break;
+
case TRIGGER_MNEMONIC:
- g_assert_true (GTK_IS_MNEMONIC_TRIGGER (trigger));
- g_assert_cmpuint (gtk_mnemonic_trigger_get_keyval (GTK_MNEMONIC_TRIGGER (trigger)),
- ==,
- tests[i].keyval);
+ g_assert_true (GTK_IS_MNEMONIC_TRIGGER (t2));
+ break;
+
+ case TRIGGER_ALTERNATIVE:
+ g_assert_true (GTK_IS_ALTERNATIVE_TRIGGER (t2));
break;
+
default:
g_assert_not_reached ();
break;
}
- if (tests[i].trigger_type != TRIGGER_INVALID)
- g_object_unref (trigger);
+ g_object_unref (trigger);
+ }
+}
+
+static void
+test_trigger_parse_invalid (void)
+{
+ const char *tests[] = {
+ "<never>",
+ "Never",
+ "Foo",
+ "<Foo>Nyaa",
+ "never|",
+ "|never",
+ };
+
+ for (int i = 0; i < G_N_ELEMENTS (tests); i++)
+ {
+ g_test_message ("Checking: '%s'", tests[i]);
+
+ GtkShortcutTrigger *trigger = gtk_shortcut_trigger_parse_string (tests[i]);
+
+ g_assert_null (trigger);
}
}
@@ -344,7 +448,11 @@ main (int argc, char *argv[])
g_test_add_func ("/shortcuts/trigger/basic", test_trigger_basic);
g_test_add_func ("/shortcuts/trigger/equal", test_trigger_equal);
- g_test_add_func ("/shortcuts/trigger/parse", test_trigger_parse);
+ g_test_add_func ("/shortcuts/trigger/parse/never", test_trigger_parse_never);
+ g_test_add_func ("/shortcuts/trigger/parse/keyval", test_trigger_parse_keyval);
+ g_test_add_func ("/shortcuts/trigger/parse/mnemonic", test_trigger_parse_mnemonic);
+ g_test_add_func ("/shortcuts/trigger/parse/alternative", test_trigger_parse_alternative);
+ g_test_add_func ("/shortcuts/trigger/parse/invalid", test_trigger_parse_invalid);
g_test_add_func ("/shortcuts/trigger/trigger", test_trigger_trigger);
g_test_add_func ("/shortcuts/action/basic", test_action_basic);
g_test_add_func ("/shortcuts/action/activate", test_action_activate);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]