1 | /** |
2 | * Events test suite |
3 | */ |
4 | |
5 | #include <stdio.h> |
6 | |
7 | #include "SDL.h" |
8 | #include "SDL_test.h" |
9 | |
10 | /* ================= Test Case Implementation ================== */ |
11 | |
12 | /* Test case functions */ |
13 | |
14 | /* Flag indicating if the userdata should be checked */ |
15 | int _userdataCheck = 0; |
16 | |
17 | /* Userdata value to check */ |
18 | int _userdataValue = 0; |
19 | |
20 | /* Flag indicating that the filter was called */ |
21 | int _eventFilterCalled = 0; |
22 | |
23 | /* Userdata values for event */ |
24 | int _userdataValue1 = 1; |
25 | int _userdataValue2 = 2; |
26 | |
27 | /* Event filter that sets some flags and optionally checks userdata */ |
28 | int SDLCALL _events_sampleNullEventFilter(void *userdata, SDL_Event *event) |
29 | { |
30 | _eventFilterCalled = 1; |
31 | |
32 | if (_userdataCheck != 0) { |
33 | SDLTest_AssertCheck(userdata != NULL, "Check userdata pointer, expected: non-NULL, got: %s" , (userdata != NULL) ? "non-NULL" : "NULL" ); |
34 | if (userdata != NULL) { |
35 | SDLTest_AssertCheck(*(int *)userdata == _userdataValue, "Check userdata value, expected: %i, got: %i" , _userdataValue, *(int *)userdata); |
36 | } |
37 | } |
38 | |
39 | return 0; |
40 | } |
41 | |
42 | /** |
43 | * @brief Test pumping and peeking events. |
44 | * |
45 | * @sa http://wiki.libsdl.org/SDL_PumpEvents |
46 | * @sa http://wiki.libsdl.org/SDL_PollEvent |
47 | */ |
48 | int |
49 | events_pushPumpAndPollUserevent(void *arg) |
50 | { |
51 | SDL_Event event1; |
52 | SDL_Event event2; |
53 | int result; |
54 | |
55 | /* Create user event */ |
56 | event1.type = SDL_USEREVENT; |
57 | event1.user.code = SDLTest_RandomSint32(); |
58 | event1.user.data1 = (void *)&_userdataValue1; |
59 | event1.user.data2 = (void *)&_userdataValue2; |
60 | |
61 | /* Push a user event onto the queue and force queue update */ |
62 | SDL_PushEvent(&event1); |
63 | SDLTest_AssertPass("Call to SDL_PushEvent()" ); |
64 | SDL_PumpEvents(); |
65 | SDLTest_AssertPass("Call to SDL_PumpEvents()" ); |
66 | |
67 | /* Poll for user event */ |
68 | result = SDL_PollEvent(&event2); |
69 | SDLTest_AssertPass("Call to SDL_PollEvent()" ); |
70 | SDLTest_AssertCheck(result == 1, "Check result from SDL_PollEvent, expected: 1, got: %d" , result); |
71 | |
72 | return TEST_COMPLETED; |
73 | } |
74 | |
75 | |
76 | /** |
77 | * @brief Adds and deletes an event watch function with NULL userdata |
78 | * |
79 | * @sa http://wiki.libsdl.org/SDL_AddEventWatch |
80 | * @sa http://wiki.libsdl.org/SDL_DelEventWatch |
81 | * |
82 | */ |
83 | int |
84 | events_addDelEventWatch(void *arg) |
85 | { |
86 | SDL_Event event; |
87 | |
88 | /* Create user event */ |
89 | event.type = SDL_USEREVENT; |
90 | event.user.code = SDLTest_RandomSint32(); |
91 | event.user.data1 = (void *)&_userdataValue1; |
92 | event.user.data2 = (void *)&_userdataValue2; |
93 | |
94 | /* Disable userdata check */ |
95 | _userdataCheck = 0; |
96 | |
97 | /* Reset event filter call tracker */ |
98 | _eventFilterCalled = 0; |
99 | |
100 | /* Add watch */ |
101 | SDL_AddEventWatch(_events_sampleNullEventFilter, NULL); |
102 | SDLTest_AssertPass("Call to SDL_AddEventWatch()" ); |
103 | |
104 | /* Push a user event onto the queue and force queue update */ |
105 | SDL_PushEvent(&event); |
106 | SDLTest_AssertPass("Call to SDL_PushEvent()" ); |
107 | SDL_PumpEvents(); |
108 | SDLTest_AssertPass("Call to SDL_PumpEvents()" ); |
109 | SDLTest_AssertCheck(_eventFilterCalled == 1, "Check that event filter was called" ); |
110 | |
111 | /* Delete watch */ |
112 | SDL_DelEventWatch(_events_sampleNullEventFilter, NULL); |
113 | SDLTest_AssertPass("Call to SDL_DelEventWatch()" ); |
114 | |
115 | /* Push a user event onto the queue and force queue update */ |
116 | _eventFilterCalled = 0; |
117 | SDL_PushEvent(&event); |
118 | SDLTest_AssertPass("Call to SDL_PushEvent()" ); |
119 | SDL_PumpEvents(); |
120 | SDLTest_AssertPass("Call to SDL_PumpEvents()" ); |
121 | SDLTest_AssertCheck(_eventFilterCalled == 0, "Check that event filter was NOT called" ); |
122 | |
123 | return TEST_COMPLETED; |
124 | } |
125 | |
126 | /** |
127 | * @brief Adds and deletes an event watch function with userdata |
128 | * |
129 | * @sa http://wiki.libsdl.org/SDL_AddEventWatch |
130 | * @sa http://wiki.libsdl.org/SDL_DelEventWatch |
131 | * |
132 | */ |
133 | int |
134 | events_addDelEventWatchWithUserdata(void *arg) |
135 | { |
136 | SDL_Event event; |
137 | |
138 | /* Create user event */ |
139 | event.type = SDL_USEREVENT; |
140 | event.user.code = SDLTest_RandomSint32(); |
141 | event.user.data1 = (void *)&_userdataValue1; |
142 | event.user.data2 = (void *)&_userdataValue2; |
143 | |
144 | /* Enable userdata check and set a value to check */ |
145 | _userdataCheck = 1; |
146 | _userdataValue = SDLTest_RandomIntegerInRange(-1024, 1024); |
147 | |
148 | /* Reset event filter call tracker */ |
149 | _eventFilterCalled = 0; |
150 | |
151 | /* Add watch */ |
152 | SDL_AddEventWatch(_events_sampleNullEventFilter, (void *)&_userdataValue); |
153 | SDLTest_AssertPass("Call to SDL_AddEventWatch()" ); |
154 | |
155 | /* Push a user event onto the queue and force queue update */ |
156 | SDL_PushEvent(&event); |
157 | SDLTest_AssertPass("Call to SDL_PushEvent()" ); |
158 | SDL_PumpEvents(); |
159 | SDLTest_AssertPass("Call to SDL_PumpEvents()" ); |
160 | SDLTest_AssertCheck(_eventFilterCalled == 1, "Check that event filter was called" ); |
161 | |
162 | /* Delete watch */ |
163 | SDL_DelEventWatch(_events_sampleNullEventFilter, (void *)&_userdataValue); |
164 | SDLTest_AssertPass("Call to SDL_DelEventWatch()" ); |
165 | |
166 | /* Push a user event onto the queue and force queue update */ |
167 | _eventFilterCalled = 0; |
168 | SDL_PushEvent(&event); |
169 | SDLTest_AssertPass("Call to SDL_PushEvent()" ); |
170 | SDL_PumpEvents(); |
171 | SDLTest_AssertPass("Call to SDL_PumpEvents()" ); |
172 | SDLTest_AssertCheck(_eventFilterCalled == 0, "Check that event filter was NOT called" ); |
173 | |
174 | return TEST_COMPLETED; |
175 | } |
176 | |
177 | |
178 | /* ================= Test References ================== */ |
179 | |
180 | /* Events test cases */ |
181 | static const SDLTest_TestCaseReference eventsTest1 = |
182 | { (SDLTest_TestCaseFp)events_pushPumpAndPollUserevent, "events_pushPumpAndPollUserevent" , "Pushes, pumps and polls a user event" , TEST_ENABLED }; |
183 | |
184 | static const SDLTest_TestCaseReference eventsTest2 = |
185 | { (SDLTest_TestCaseFp)events_addDelEventWatch, "events_addDelEventWatch" , "Adds and deletes an event watch function with NULL userdata" , TEST_ENABLED }; |
186 | |
187 | static const SDLTest_TestCaseReference eventsTest3 = |
188 | { (SDLTest_TestCaseFp)events_addDelEventWatchWithUserdata, "events_addDelEventWatchWithUserdata" , "Adds and deletes an event watch function with userdata" , TEST_ENABLED }; |
189 | |
190 | /* Sequence of Events test cases */ |
191 | static const SDLTest_TestCaseReference *eventsTests[] = { |
192 | &eventsTest1, &eventsTest2, &eventsTest3, NULL |
193 | }; |
194 | |
195 | /* Events test suite (global) */ |
196 | SDLTest_TestSuiteReference eventsTestSuite = { |
197 | "Events" , |
198 | NULL, |
199 | eventsTests, |
200 | NULL |
201 | }; |
202 | |