add testcase for GAction
[platform/upstream/glib.git] / gio / tests / actions.c
1 #include <gio/gio.h>
2 #include <stdlib.h>
3
4 typedef struct
5 {
6   GVariant *params;
7   gboolean did_run;
8 } Activation;
9
10 static void
11 activate (GAction  *action,
12           GVariant *parameter,
13           gpointer  user_data)
14 {
15   Activation *activation = user_data;
16
17   if (parameter)
18     activation->params = g_variant_ref (parameter);
19   else
20     activation->params = NULL;
21   activation->did_run = TRUE;
22 }
23
24 static void
25 test_basic (void)
26 {
27   Activation a = { 0, };
28   GAction *action;
29
30   action = g_action_new ("foo", NULL);
31   g_signal_connect (action, "activate", G_CALLBACK (activate), &a);
32   g_assert (!a.did_run);
33   g_action_activate (action, NULL);
34   g_assert (a.did_run);
35   a.did_run = FALSE;
36
37   g_action_set_enabled (action, FALSE);
38   g_action_activate (action, NULL);
39   g_assert (!a.did_run);
40
41   if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
42     {
43       g_action_activate (action, g_variant_new_string ("xxx"));
44       exit (0);
45     }
46   g_test_trap_assert_failed ();
47
48   g_object_unref (action);
49   g_assert (!a.did_run);
50
51   action = g_action_new ("foo", G_VARIANT_TYPE_STRING);
52   g_signal_connect (action, "activate", G_CALLBACK (activate), &a);
53   g_assert (!a.did_run);
54   g_action_activate (action, g_variant_new_string ("Hello world"));
55   g_assert (a.did_run);
56   g_assert_cmpstr (g_variant_get_string (a.params, NULL), ==, "Hello world");
57   g_variant_unref (a.params);
58   a.did_run = FALSE;
59
60   if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
61     {
62       g_action_activate (action, NULL);
63       exit (0);
64     }
65
66   g_test_trap_assert_failed ();
67
68   g_object_unref (action);
69   g_assert (!a.did_run);
70 }
71
72 int
73 main (int argc, char **argv)
74 {
75   g_type_init ();
76   g_test_init (&argc, &argv, NULL);
77
78   g_test_add_func ("/actions/basic", test_basic);
79
80   return g_test_run ();
81 }