2
* Unit tests for GEIS v2.0 subsciption module
7
#include "libgeis/geis_test_api.h"
18
g_geis = geis_new(GEIS_INIT_MOCK_BACKEND,
19
GEIS_INIT_TRACK_DEVICES,
20
GEIS_INIT_TRACK_GESTURE_CLASSES,
24
/* fixture teardown */
32
/* compile-time test to ensure required types are defined */
33
START_TEST(subscription_constants)
35
GeisSubscriptionFlags f;
36
f = GEIS_SUBSCRIPTION_NONE
37
| GEIS_SUBSCRIPTION_GRAB
38
| GEIS_SUBSCRIPTION_CONT;
42
START_TEST(construction)
44
GeisSubscription sub = geis_subscription_new(g_geis,
46
GEIS_SUBSCRIPTION_NONE);
47
fail_unless(sub != NULL,
48
"failed to create subscription");
49
fail_unless(0 == strcmp(geis_subscription_name(sub), "name"),
50
"unexpected subscription name returned");
51
fail_unless(GEIS_STATUS_SUCCESS == geis_subscription_activate(sub),
52
"unable to activate subscription");
53
fail_unless(GEIS_STATUS_SUCCESS == geis_subscription_deactivate(sub),
54
"unable to deactivate subscription");
55
geis_subscription_delete(sub);
62
GeisFilter filter = geis_filter_new(g_geis, "filter");
63
GeisSubscription sub = geis_subscription_new(g_geis,
65
GEIS_SUBSCRIPTION_NONE);
66
fail_unless(GEIS_STATUS_SUCCESS == geis_subscription_add_filter(sub, filter),
69
filter = geis_subscription_filter_by_name(sub, "bogus");
70
fail_unless(filter == NULL,
71
"bogus filter retrieval fail");
72
filter = geis_subscription_filter_by_name(sub, "filter");
73
fail_unless(filter != NULL,
74
"filter retrieval fail");
76
fail_unless(GEIS_STATUS_SUCCESS == geis_subscription_remove_filter(sub, filter),
77
"filter remove fail");
82
START_TEST(device_filter)
87
GeisSubscription sub = geis_subscription_new(g_geis,
89
GEIS_SUBSCRIPTION_NONE);
91
while (geis_dispatch_events(g_geis) == GEIS_STATUS_CONTINUE)
93
status = geis_next_event(g_geis, &event);
94
while (status == GEIS_STATUS_SUCCESS || status == GEIS_STATUS_CONTINUE)
96
if (geis_event_type(event) == GEIS_EVENT_DEVICE_AVAILABLE)
103
attr = geis_event_attr_by_name(event, GEIS_EVENT_ATTRIBUTE_DEVICE);
104
fail_if (!attr, "geis-device attr not found in device event");
106
device = geis_attr_value_to_pointer(attr);
107
fail_if (!device, "geis device not found in device event");
109
filter = geis_filter_new(g_geis, "device filter");
110
fail_if(!filter, "can not create filter");
112
fs = geis_filter_add_term(filter, GEIS_FILTER_DEVICE,
113
GEIS_DEVICE_ATTRIBUTE_NAME, GEIS_FILTER_OP_NE, geis_device_name(device),
115
fail_if(fs != GEIS_STATUS_SUCCESS, "can not add device to filter");
117
fs = geis_subscription_add_filter(sub, filter);
118
fail_if(fs != GEIS_STATUS_SUCCESS, "can not subscribe filter");
120
else if (geis_event_type(event) == GEIS_EVENT_CLASS_AVAILABLE)
123
GeisGestureClass gesture_class;
127
attr = geis_event_attr_by_name(event, GEIS_EVENT_ATTRIBUTE_CLASS);
128
fail_if (!attr, "attr not found in class event");
130
gesture_class = geis_attr_value_to_pointer(attr);
131
fail_if (!gesture_class, "geis class not found in class event");
133
filter = geis_filter_new(g_geis, "class filter");
134
fail_if(!filter, "can not create filter");
136
fs = geis_filter_add_term(filter, GEIS_FILTER_CLASS,
137
GEIS_CLASS_ATTRIBUTE_NAME, GEIS_FILTER_OP_NE, geis_gesture_class_name(gesture_class),
139
fail_if(fs != GEIS_STATUS_SUCCESS, "can not add class to filter");
141
fs = geis_subscription_add_filter(sub, filter);
142
fail_if(fs != GEIS_STATUS_SUCCESS, "can not subscribe filter");
144
geis_event_delete(event);
146
if (status == GEIS_STATUS_CONTINUE)
148
status = geis_next_event(g_geis, &event);
156
fail_unless(GEIS_STATUS_SUCCESS == geis_subscription_activate(sub),
157
"unable to activate subscription");
164
geis2_subscription_suite_new()
168
Suite *s = suite_create("geis2_subscriptions");
170
create = tcase_create("subscription-constants");
171
tcase_add_test(create, subscription_constants);
172
suite_add_tcase(s, create);
174
usage = tcase_create("subscription-usage");
175
tcase_add_checked_fixture(usage, construct_geis, destroy_geis);
176
tcase_add_test(usage, construction);
177
tcase_add_test(usage, filter);
178
tcase_add_test(usage, device_filter);
179
suite_add_tcase(s, usage);