[gtk/im-context-work] composetable: Add tests for matching



commit c9cac5fbc3f0d7eccef9bcd10157fbeccab23e86
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Feb 1 19:55:56 2021 -0500

    composetable: Add tests for matching
    
    This tests the api we use to match key sequences
    against compose tables.

 testsuite/gtk/compose/match  |  3 ++
 testsuite/gtk/composetable.c | 68 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 71 insertions(+)
---
diff --git a/testsuite/gtk/compose/match b/testsuite/gtk/compose/match
new file mode 100644
index 0000000000..0554ac02c2
--- /dev/null
+++ b/testsuite/gtk/compose/match
@@ -0,0 +1,3 @@
+<Multi_key> <s> <e> <q> : "!"
+<Multi_key> <s> <e> <q> <u> : "?"
+<Multi_key> <z> <w> <i> <n> <e> <s> : "🥂"
diff --git a/testsuite/gtk/composetable.c b/testsuite/gtk/composetable.c
index 2148163349..7c0a767e2f 100644
--- a/testsuite/gtk/composetable.c
+++ b/testsuite/gtk/composetable.c
@@ -84,6 +84,73 @@ compose_table_compare (gconstpointer data)
   g_free (expected);
 }
 
+static void
+compose_table_match (void)
+{
+  GSList *tables = NULL;
+  GtkComposeTable *table;
+  char *file;
+  guint16 buffer[8] = { 0, };
+  gboolean finish, match, ret;
+  gunichar ch;
+
+  file = g_build_filename (g_test_get_dir (G_TEST_DIST), "compose", "match", NULL);
+
+  tables = gtk_compose_table_list_add_file (tables, file);
+
+  g_assert_true (g_slist_length (tables) == 1);
+
+  table = tables->data;
+
+  buffer[0] = GDK_KEY_Multi_key;
+  buffer[1] = 0;
+  ret = gtk_compose_table_check (table, buffer, 1, &finish, &match, &ch);
+  g_assert_true (ret);
+  g_assert_false (finish);
+  g_assert_false (match);
+  g_assert_true (ch == 0);
+
+  buffer[0] = GDK_KEY_a;
+  buffer[1] = 0;
+  ret = gtk_compose_table_check (table, buffer, 1, &finish, &match, &ch);
+  g_assert_false (ret);
+  g_assert_false (finish);
+  g_assert_false (match);
+  g_assert_true (ch == 0);
+
+  buffer[0] = GDK_KEY_Multi_key;
+  buffer[1] = GDK_KEY_s;
+  buffer[2] = GDK_KEY_e;
+  ret = gtk_compose_table_check (table, buffer, 3, &finish, &match, &ch);
+  g_assert_true (ret);
+  g_assert_false (finish);
+  g_assert_false (match);
+  g_assert_true (ch == 0);
+
+  buffer[0] = GDK_KEY_Multi_key;
+  buffer[1] = GDK_KEY_s;
+  buffer[2] = GDK_KEY_e;
+  buffer[3] = GDK_KEY_q;
+  ret = gtk_compose_table_check (table, buffer, 4, &finish, &match, &ch);
+  g_assert_true (ret);
+  g_assert_false (finish);
+  g_assert_true (match);
+  g_assert_true (ch == '!');
+
+  buffer[0] = GDK_KEY_Multi_key;
+  buffer[1] = GDK_KEY_s;
+  buffer[2] = GDK_KEY_e;
+  buffer[3] = GDK_KEY_q;
+  buffer[4] = GDK_KEY_u;
+  ret = gtk_compose_table_check (table, buffer, 5, &finish, &match, &ch);
+  g_assert_true (ret);
+  g_assert_true (finish);
+  g_assert_true (match);
+  g_assert_true (ch == '?');
+
+  g_free (file);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -108,6 +175,7 @@ main (int argc, char *argv[])
   g_test_add_data_func ("/compose-table/octal", "octal", compose_table_compare);
   g_test_add_data_func ("/compose-table/codepoint", "codepoint", compose_table_compare);
   g_test_add_data_func ("/compose-table/multi", "multi", compose_table_compare);
+  g_test_add_func ("/compose-table/match", compose_table_match);
 
   return g_test_run ();
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]