1 /*
2 * Copyright (C) 2020 Purism SPC
3 * SPDX-License-Identifier: GPL-3.0+
4 * Author: Guido Günther <agx@sigxcpu.org>
5 */
6
7 #include "fbd-event.h"
8 #include "fbd-feedback-dummy.h"
9
10 #define TEST_EVENT "window-close"
11
12 static void
test_fbd_event(void)13 test_fbd_event (void)
14 {
15 g_autoptr(FbdEvent) event = NULL;
16 g_autofree gchar *appid = NULL;
17 g_autofree gchar *name = NULL;
18 g_autofree gchar *sender = NULL;
19 FbdEventEndReason reason;
20 gint timeout;
21
22 event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, 2, "sender-id");
23
24 g_assert_true (FBD_IS_EVENT (event));
25 g_object_get (event,
26 "end-reason", &reason,
27 "event", &name,
28 "app-id", &appid,
29 "timeout", &timeout,
30 "sender", &sender,
31 NULL);
32
33 g_assert_cmpstr (fbd_event_get_event (event), ==, TEST_EVENT);
34 g_assert_cmpstr (name, ==, TEST_EVENT);
35
36 g_assert_cmpstr (fbd_event_get_app_id (event), ==, TEST_APP_ID);
37 g_assert_cmpstr (appid, ==, TEST_APP_ID);
38
39 g_assert_cmpint (fbd_event_get_timeout (event), ==, timeout);
40 g_assert_cmpint (timeout, ==, 2);
41
42 g_assert_cmpstr (fbd_event_get_sender (event), ==, sender);
43 g_assert_cmpstr (sender, ==, "sender-id");
44
45 g_assert_cmpint (fbd_event_get_end_reason (event), ==, FBD_EVENT_END_REASON_NATURAL);
46 g_assert_cmpint (reason, ==, FBD_EVENT_END_REASON_NATURAL);
47 }
48
49 static void
test_fbd_event_feedback(void)50 test_fbd_event_feedback (void)
51 {
52 GSList *feedbacks;
53 g_autoptr(FbdEvent) event = NULL;
54 g_autoptr(FbdFeedbackDummy) feedback1 = NULL;
55 g_autoptr(FbdFeedbackDummy) feedback2 = NULL;
56
57 event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, -1, NULL);
58 feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
59 feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
60
61 feedbacks = fbd_event_get_feedbacks (event);
62 g_assert_cmpint (g_slist_length (feedbacks), ==, 0);
63
64 fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1));
65 feedbacks = fbd_event_get_feedbacks (event);
66 g_assert_cmpint (g_slist_length (feedbacks), ==, 1);
67
68 /* Remove non existing feedback */
69 fbd_event_remove_feedback (event, FBD_FEEDBACK_BASE(feedback2));
70 feedbacks = fbd_event_get_feedbacks (event);
71 g_assert_cmpint (g_slist_length (feedbacks), ==, 1);
72
73 fbd_event_remove_feedback (event, FBD_FEEDBACK_BASE(feedback1));
74 feedbacks = fbd_event_get_feedbacks (event);
75 g_assert_cmpint (g_slist_length (feedbacks), ==, 0);
76
77 fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1));
78 fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback2));
79 feedbacks = fbd_event_get_feedbacks (event);
80 g_assert_cmpint (g_slist_length (feedbacks), ==, 2);
81
82 g_assert_false (fbd_event_get_feedbacks_ended (event));
83 fbd_event_end_feedbacks (event);
84 /* Dummy feedback ends immediately */
85 g_assert_true (fbd_event_get_feedbacks_ended (event));
86 }
87
88 static void
on_feedbacks_ended(FbdEvent * event,gboolean * ended)89 on_feedbacks_ended (FbdEvent *event, gboolean *ended)
90 {
91 FBD_IS_EVENT (event);
92
93 *ended = TRUE;
94 }
95
96 static void
test_fbd_event_feedback_ended(void)97 test_fbd_event_feedback_ended (void)
98 {
99 g_autoptr(FbdEvent) event = NULL;
100 g_autoptr(FbdFeedbackDummy) feedback1 = NULL;
101 g_autoptr(FbdFeedbackDummy) feedback2 = NULL;
102 gboolean ended = FALSE;
103
104 event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, FBD_EVENT_TIMEOUT_ONESHOT, NULL);
105 feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
106 fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1));
107 feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
108 fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback2));
109
110 g_signal_connect (event, "feedbacks-ended",
111 (GCallback)on_feedbacks_ended, &ended);
112
113 fbd_event_end_feedbacks (event);
114 g_assert_true (ended);
115 }
116
117 static void
test_fbd_event_feedback_loop(void)118 test_fbd_event_feedback_loop (void)
119 {
120 g_autoptr(FbdEvent) event = NULL;
121 g_autoptr(FbdFeedbackDummy) feedback1 = NULL;
122 g_autoptr(FbdFeedbackDummy) feedback2 = NULL;
123 gboolean ended = FALSE;
124
125 event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, FBD_EVENT_TIMEOUT_LOOP, NULL);
126 feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
127 fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1));
128 feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
129 fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback2));
130
131 g_signal_connect (event, "feedbacks-ended",
132 (GCallback)on_feedbacks_ended, &ended);
133 g_assert_false (ended);
134
135 fbd_event_end_feedbacks (event);
136 g_assert_true (ended);
137 }
138
139 static void
test_fbd_event_feedback_timeout(void)140 test_fbd_event_feedback_timeout (void)
141 {
142 g_autoptr(FbdEvent) event = NULL;
143 g_autoptr(FbdFeedbackDummy) feedback1 = NULL;
144 g_autoptr(FbdFeedbackDummy) feedback2 = NULL;
145 gboolean ended = FALSE;
146
147 event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, 1, NULL);
148 feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
149 fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1));
150 feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
151 fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback2));
152
153 g_signal_connect (event, "feedbacks-ended",
154 (GCallback)on_feedbacks_ended, &ended);
155 g_assert_false (ended);
156
157 fbd_event_end_feedbacks (event);
158 g_assert_true (ended);
159 }
160
161 gint
main(gint argc,gchar * argv[])162 main (gint argc, gchar *argv[])
163 {
164 g_test_init (&argc, &argv, NULL);
165
166 g_test_add_func("/feedbackd/fbd/event/new", test_fbd_event);
167 g_test_add_func("/feedbackd/fbd/event/feedbacks/props", test_fbd_event_feedback);
168 g_test_add_func("/feedbackd/fbd/event/feedbacks/ended", test_fbd_event_feedback_ended);
169 g_test_add_func("/feedbackd/fbd/event/feedbacks/loop", test_fbd_event_feedback_loop);
170 g_test_add_func("/feedbackd/fbd/event/feedbacks/timeout", test_fbd_event_feedback_timeout);
171
172 return g_test_run();
173 }
174