1 /*
2  * Copyright (C) 2019 Purism SPC
3  *
4  * SPDX-License-Identifier: LGPL-2.1+
5  */
6 
7 #define HANDY_USE_UNSTABLE_API
8 #include <handy.h>
9 #include <hdy-keypad-button-private.h>
10 
11 gint notified;
12 
13 
14 static void
notify_cb(GtkWidget * widget,gpointer data)15 notify_cb (GtkWidget *widget,
16            gpointer   data)
17 {
18   notified++;
19 }
20 
21 
22 static void
test_hdy_keypad_show_symbols(void)23 test_hdy_keypad_show_symbols (void)
24 {
25   HdyKeypad *keypad = HDY_KEYPAD (hdy_keypad_new (TRUE, FALSE));
26   GList *l;
27   GList *list;
28 
29   list = gtk_container_get_children (GTK_CONTAINER (keypad));
30 
31   for (l = list; l != NULL; l = l->next) {
32     if (HDY_IS_KEYPAD_BUTTON(l->data)) {
33       gboolean value;
34       g_object_get (l->data, "show-symbols", &value, NULL);
35       g_assert_false (value);
36     }
37   }
38   g_list_free (list);
39 }
40 
41 
42 static void
test_hdy_keypad_set_actions(void)43 test_hdy_keypad_set_actions (void)
44 {
45   HdyKeypad *keypad = HDY_KEYPAD (hdy_keypad_new (FALSE, TRUE));
46   GtkWidget *button_right = gtk_button_new ();
47   GtkWidget *button_left = gtk_button_new ();
48 
49   // Right extra button
50   g_assert (gtk_grid_get_child_at (GTK_GRID (keypad), 2, 3) != NULL);
51   // Left extra button
52   g_assert (gtk_grid_get_child_at (GTK_GRID (keypad), 0, 3) != NULL);
53 
54   hdy_keypad_set_right_action (keypad, button_right);
55   hdy_keypad_set_left_action (keypad, button_left);
56   g_assert (button_right == gtk_grid_get_child_at (GTK_GRID (keypad), 2, 3));
57   g_assert (button_left == gtk_grid_get_child_at (GTK_GRID (keypad), 0, 3));
58 
59   hdy_keypad_set_right_action (keypad, NULL);
60   g_assert (gtk_grid_get_child_at (GTK_GRID (keypad), 2, 3) == NULL);
61 
62   hdy_keypad_set_left_action (keypad, NULL);
63   g_assert (gtk_grid_get_child_at (GTK_GRID (keypad), 0, 3) == NULL);
64 }
65 
66 
67 static void
test_hdy_keypad_button_clicked(void)68 test_hdy_keypad_button_clicked (void)
69 {
70   HdyKeypad *keypad = HDY_KEYPAD (hdy_keypad_new (FALSE, TRUE));
71   GtkWidget *entry = gtk_entry_new ();
72   GList *l;
73   GList *list;
74 
75   notified = 0;
76 
77   hdy_keypad_set_entry (keypad, GTK_ENTRY (entry));
78 
79   g_signal_connect (hdy_keypad_get_entry (keypad), "insert-text", G_CALLBACK (notify_cb), NULL);
80 
81   list = gtk_container_get_children (GTK_CONTAINER (keypad));
82 
83   for (l = list; l != NULL; l = l->next) {
84     if (HDY_IS_KEYPAD_BUTTON(l->data)) {
85       GtkButton *btn = GTK_BUTTON (l->data);
86       gtk_button_clicked (btn);
87     }
88   }
89 
90   g_assert_cmpint (notified, ==, 10);
91 
92   g_list_free (list);
93 }
94 
95 
96 gint
main(gint argc,gchar * argv[])97 main (gint argc,
98       gchar *argv[])
99 {
100   gtk_test_init (&argc, &argv, NULL);
101   hdy_init (&argc, &argv);
102 
103   g_test_add_func ("/Handy/Keypad/show_symbols", test_hdy_keypad_show_symbols);
104   g_test_add_func ("/Handy/Keypad/set_actions", test_hdy_keypad_set_actions);
105   g_test_add_func ("/Handy/Keypad/button_click", test_hdy_keypad_button_clicked);
106 
107   return g_test_run ();
108 }
109