1010#else
1111 #include <GLFW/glfw3.h>
1212#endif
13+ #include <assert.h>
1314#include <stdio.h>
15+ #include <stdbool.h>
1416#include <emscripten.h>
1517
1618#define MULTILINE (...) #__VA_ARGS__
@@ -82,79 +84,76 @@ test_t g_tests[] = {
8284 #endif
8385};
8486
85- static unsigned int g_test_actual = 0 ;
87+ static bool g_callback_received ;
88+ static unsigned int g_current_test ;
8689static unsigned int g_test_count = sizeof (g_tests ) / sizeof (test_t );
87- static unsigned int g_state = 0 ;
8890
8991#if USE_GLFW == 2
9092static void on_mouse_button_callback (int button , int action ) {
9193#else
9294static void on_mouse_button_callback (GLFWwindow * window , int button , int action , int modify ) {
9395#endif
94- test_args_t args = g_tests [g_test_actual ].args ;
95- if (args .button == button && args .action == action )
96- {
97- g_state |= 1 << g_test_actual ;
98- }
99- else
100- {
101- printf ("Test %d: FAIL\n" , g_test_actual );
102- }
96+ test_args_t args = g_tests [g_current_test ].args ;
97+ if (args .button == button && args .action == action ) {
98+ g_callback_received = true;
99+ } else {
100+ printf ("Test %d: FAIL\n" , g_current_test );
101+ exit (1 );
102+ }
103103}
104104
105105#if USE_GLFW == 2
106106static void on_mouse_move (int x , int y ) {
107107#else
108108static void on_mouse_move (GLFWwindow * window , double x , double y ) {
109109#endif
110- test_args_t args = g_tests [g_test_actual ].args ;
111- if (args .x == x && args .y == y )
112- {
113- g_state |= 1 << g_test_actual ;
114- }
115- else
116- {
117- printf ("Test %d: FAIL\n" , g_test_actual );
118- }
110+ test_args_t args = g_tests [g_current_test ].args ;
111+ if (args .x == x && args .y == y ) {
112+ g_callback_received = true;
113+ } else {
114+ printf ("Test %d: FAIL\n" , g_current_test );
115+ exit (1 );
116+ }
119117}
120118
121119#if USE_GLFW == 2
122120static void on_key_callback (int key , int action ) {
123121#else
124122static void on_key_callback (GLFWwindow * window , int key , int scancode , int action , int mods ) {
125123#endif
126- test_args_t args = g_tests [g_test_actual ].args ;
127- if (args .button == key && args .action == action )
128- {
129- g_state |= 1 << g_test_actual ;
130- }
131- else
132- {
133- printf ("Test %d: FAIL\n" , g_test_actual );
134- }
124+ test_args_t args = g_tests [g_current_test ].args ;
125+ if (args .button == key && args .action == action ) {
126+ g_callback_received = true;
127+ } else {
128+ printf ("Test %d: FAIL\n" , g_current_test );
129+ exit (1 );
130+ }
135131}
136132
137133#if USE_GLFW == 2
138134static void on_char_callback (int character , int action ) {
139135#else
140136static void on_char_callback (GLFWwindow * window , unsigned int character ) {
141137#endif
142- test_args_t args = g_tests [g_test_actual ].args ;
138+ printf ("got character: %d\n" , character );
139+ test_args_t args = g_tests [g_current_test ].args ;
143140 if (args .character != -1 && args .character == character ) {
144- g_state |= 1 << g_test_actual ;
141+ g_callback_received = true ;
145142 } else {
146- printf ("Test %d: FAIL\n" , g_test_actual );
143+ printf ("Test %d: FAIL\n" , g_current_test );
144+ exit (1 );
147145 }
148146
149147}
150148
151149#if USE_GLFW == 3
152150static void on_mouse_wheel (GLFWwindow * window , double x , double y ) {
153- test_args_t args = g_tests [g_test_actual ].args ;
151+ test_args_t args = g_tests [g_current_test ].args ;
154152 if (args .x == x && args .y == y ) {
155- g_state |= 1 << g_test_actual ;
153+ g_callback_received = true ;
156154 } else {
157- printf ("Test %d: FAIL\n" , g_test_actual );
155+ printf ("Test %d: FAIL\n" , g_current_test );
156+ exit (1 );
158157 }
159158}
160159
@@ -197,15 +196,12 @@ int main() {
197196 glfwSetMouseButtonCallback (_mainWindow , p == 0 ? NULL : on_mouse_button_callback );
198197 glfwSetKeyCallback (_mainWindow , p == 0 ? NULL : on_key_callback );
199198#endif
200- g_state = p == 0 ? success : 0 ;
201199
202200 for (int i = 0 ; i < g_test_count ; ++ i ) {
203- g_test_actual = i ;
204- test_t test = g_tests [g_test_actual ];
205-
206- if (test .args .character == -1 ) {
207- g_state |= 1 << g_test_actual ;
208- }
201+ g_current_test = i ;
202+ test_t test = g_tests [g_current_test ];
203+ g_callback_received = false;
204+ g_char_callback_received = false;
209205
210206 emscripten_run_script (test .cmd );
211207
@@ -215,8 +211,8 @@ int main() {
215211 #else
216212 if (glfwGetMouseButton (_mainWindow , test .args .button ) != test .args .action ) {
217213 #endif
218- printf ("Test %d: FAIL\n" , g_test_actual );
219- g_state &= ~( 1 << g_test_actual );
214+ printf ("Test %d: FAIL\n" , g_current_test );
215+ exit ( 1 );
220216 }
221217 } else {
222218 // Keyboard.
@@ -225,23 +221,22 @@ int main() {
225221 #else
226222 if (test .args .action != -1 && glfwGetKey (_mainWindow , test .args .button ) != test .args .action ) {
227223 #endif
228- printf ("Test %d: FAIL\n" , g_test_actual );
229- g_state &= ~( 1 << g_test_actual );
224+ printf ("Test %d: FAIL\n" , g_current_test );
225+ exit ( 1 );
230226 }
231227 }
232- }
233- if (g_state != success ) {
234- break ;
228+
229+ if (p == 1 ) {
230+ if (test .args .character != -1 && !g_callback_received ) {
231+ printf ("Test %d: FAIL (event not received)\n" , g_current_test );
232+ exit (1 );
233+ }
234+ printf ("Test %d: PASSED\n" , g_current_test );
235+ }
235236 }
236237 }
237238
238239 glfwTerminate ();
239-
240- printf ("%d == %d = %d" , g_state , success , g_state == success );
241- if (g_state != success ) {
242- printf ("test failed\n" );
243- return 1 ;
244- }
245- printf ("success\n" );
240+ printf ("done\n" );
246241 return 0 ;
247242}
0 commit comments