55 * found in the LICENSE file.
66 */
77
8+ #include <assert.h>
89#include <stdio.h>
910#include <emscripten.h>
1011#include <string.h>
@@ -34,8 +35,12 @@ const char *emscripten_result_to_string(EMSCRIPTEN_RESULT result) {
3435 return "Unknown EMSCRIPTEN_RESULT!" ;
3536}
3637
38+ // Report API failure
3739#define TEST_RESULT (x ) if (ret != EMSCRIPTEN_RESULT_SUCCESS) printf("%s returned %s.\n", #x, emscripten_result_to_string(ret));
3840
41+ // Like above above but also assert API success
42+ #define ASSERT_RESULT (x ) TEST_RESULT(x); assert(ret == EMSCRIPTEN_RESULT_SUCCESS);
43+
3944// The event handler functions can return 1 to suppress the event and disable the default action. That calls event.preventDefault();
4045// Returning 0 signals that the event was not consumed by the code, and will allow the event to pass on and bubble up normally.
4146bool key_callback (int eventType , const EmscriptenKeyboardEvent * e , void * userData ) {
@@ -230,67 +235,66 @@ void test_done(void *arg) {
230235
231236int main () {
232237 EMSCRIPTEN_RESULT ret = emscripten_set_keypress_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , key_callback );
233- TEST_RESULT (emscripten_set_keypress_callback );
238+ ASSERT_RESULT (emscripten_set_keypress_callback );
234239 ret = emscripten_set_keydown_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , key_callback );
235- TEST_RESULT (emscripten_set_keydown_callback );
240+ ASSERT_RESULT (emscripten_set_keydown_callback );
236241 ret = emscripten_set_keyup_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , key_callback );
237- TEST_RESULT (emscripten_set_keyup_callback );
242+ ASSERT_RESULT (emscripten_set_keyup_callback );
238243
239244 ret = emscripten_set_click_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , mouse_callback );
240- TEST_RESULT (emscripten_set_click_callback );
245+ ASSERT_RESULT (emscripten_set_click_callback );
241246 ret = emscripten_set_mousedown_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , mouse_callback );
242- TEST_RESULT (emscripten_set_mousedown_callback );
247+ ASSERT_RESULT (emscripten_set_mousedown_callback );
243248 ret = emscripten_set_mouseup_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , mouse_callback );
244- TEST_RESULT (emscripten_set_mouseup_callback );
249+ ASSERT_RESULT (emscripten_set_mouseup_callback );
245250 ret = emscripten_set_dblclick_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , mouse_callback );
246- TEST_RESULT (emscripten_set_dblclick_callback );
251+ ASSERT_RESULT (emscripten_set_dblclick_callback );
247252 ret = emscripten_set_mousemove_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , mouse_callback );
248- TEST_RESULT (emscripten_set_mousemove_callback );
253+ ASSERT_RESULT (emscripten_set_mousemove_callback );
249254 ret = emscripten_set_mouseenter_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , mouse_callback );
250- TEST_RESULT (emscripten_set_mouseenter_callback );
255+ ASSERT_RESULT (emscripten_set_mouseenter_callback );
251256 ret = emscripten_set_mouseleave_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , mouse_callback );
252- TEST_RESULT (emscripten_set_mouseleave_callback );
257+ ASSERT_RESULT (emscripten_set_mouseleave_callback );
253258 ret = emscripten_set_mouseover_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , mouse_callback );
254- TEST_RESULT (emscripten_set_mouseover_callback );
259+ ASSERT_RESULT (emscripten_set_mouseover_callback );
255260 ret = emscripten_set_mouseout_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , mouse_callback );
256- TEST_RESULT (emscripten_set_mouseout_callback );
261+ ASSERT_RESULT (emscripten_set_mouseout_callback );
257262
258263 ret = emscripten_set_wheel_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , wheel_callback );
259- TEST_RESULT (emscripten_set_wheel_callback );
264+ ASSERT_RESULT (emscripten_set_wheel_callback );
260265
261266 ret = emscripten_set_resize_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , uievent_callback );
262- TEST_RESULT (emscripten_set_resize_callback );
267+ ASSERT_RESULT (emscripten_set_resize_callback );
263268 ret = emscripten_set_scroll_callback (EMSCRIPTEN_EVENT_TARGET_DOCUMENT , 0 , 1 , uievent_callback );
264- TEST_RESULT (emscripten_set_scroll_callback );
269+ ASSERT_RESULT (emscripten_set_scroll_callback );
265270
266271 ret = emscripten_set_blur_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , focusevent_callback );
267- TEST_RESULT (emscripten_set_blur_callback );
272+ ASSERT_RESULT (emscripten_set_blur_callback );
268273 ret = emscripten_set_focus_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , focusevent_callback );
269- TEST_RESULT (emscripten_set_focus_callback );
274+ ASSERT_RESULT (emscripten_set_focus_callback );
270275 ret = emscripten_set_focusin_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , focusevent_callback );
271- TEST_RESULT (emscripten_set_focusin_callback );
276+ ASSERT_RESULT (emscripten_set_focusin_callback );
272277 ret = emscripten_set_focusout_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , focusevent_callback );
273- TEST_RESULT (emscripten_set_focusout_callback );
278+ ASSERT_RESULT (emscripten_set_focusout_callback );
274279
275280 ret = emscripten_set_deviceorientation_callback (0 , 1 , deviceorientation_callback );
276- TEST_RESULT (emscripten_set_deviceorientation_callback );
281+ ASSERT_RESULT (emscripten_set_deviceorientation_callback );
277282 ret = emscripten_set_devicemotion_callback (0 , 1 , devicemotion_callback );
278- TEST_RESULT (emscripten_set_devicemotion_callback );
283+ ASSERT_RESULT (emscripten_set_devicemotion_callback );
279284
280285 ret = emscripten_set_orientationchange_callback (0 , 1 , orientationchange_callback );
281- TEST_RESULT (emscripten_set_orientationchange_callback );
286+ ASSERT_RESULT (emscripten_set_orientationchange_callback );
282287
283288 // Test the polling of orientation.
284289 EmscriptenOrientationChangeEvent oce ;
285290 ret = emscripten_get_orientation_status (& oce );
286- TEST_RESULT (emscripten_get_orientation_status );
291+ ASSERT_RESULT (emscripten_get_orientation_status );
287292 if (ret == EMSCRIPTEN_RESULT_SUCCESS ) {
288293 printf ("The current orientation is:\n" );
289294 orientationchange_callback (EMSCRIPTEN_EVENT_ORIENTATIONCHANGE , & oce , 0 );
290295 }
291296
292- int newOrientation = (oce .orientationIndex == EMSCRIPTEN_ORIENTATION_PORTRAIT_PRIMARY
293- || oce .orientationIndex == EMSCRIPTEN_ORIENTATION_PORTRAIT_SECONDARY ) ? EMSCRIPTEN_ORIENTATION_LANDSCAPE_PRIMARY : EMSCRIPTEN_ORIENTATION_PORTRAIT_PRIMARY ;
297+ int newOrientation = (oce .orientationIndex == EMSCRIPTEN_ORIENTATION_PORTRAIT_PRIMARY || oce .orientationIndex == EMSCRIPTEN_ORIENTATION_PORTRAIT_SECONDARY ) ? EMSCRIPTEN_ORIENTATION_LANDSCAPE_PRIMARY : EMSCRIPTEN_ORIENTATION_PORTRAIT_PRIMARY ;
294298 // Test locking of orientation.
295299 ret = emscripten_lock_orientation (newOrientation );
296300 TEST_RESULT (emscripten_lock_orientation );
@@ -299,7 +303,7 @@ int main() {
299303 }
300304
301305 ret = emscripten_get_orientation_status (& oce );
302- TEST_RESULT (emscripten_get_orientation_status );
306+ ASSERT_RESULT (emscripten_get_orientation_status );
303307 if (ret == EMSCRIPTEN_RESULT_SUCCESS ) {
304308 printf ("The current orientation is after locking:\n" );
305309 orientationchange_callback (18 , & oce , 0 );
@@ -313,39 +317,39 @@ int main() {
313317
314318 EmscriptenFullscreenChangeEvent fsce ;
315319 ret = emscripten_get_fullscreen_status (& fsce );
316- TEST_RESULT (emscripten_get_fullscreen_status );
320+ ASSERT_RESULT (emscripten_get_fullscreen_status );
317321 if (ret == EMSCRIPTEN_RESULT_SUCCESS ) {
318322 printf ("The current fullscreen status is:\n" );
319323 fullscreenchange_callback (EMSCRIPTEN_EVENT_FULLSCREENCHANGE , & fsce , 0 );
320324 }
321325
322326 ret = emscripten_set_fullscreenchange_callback (EMSCRIPTEN_EVENT_TARGET_DOCUMENT , 0 , 1 , fullscreenchange_callback );
323- TEST_RESULT (emscripten_set_fullscreenchange_callback );
327+ ASSERT_RESULT (emscripten_set_fullscreenchange_callback );
324328
325329 // These won't do anything, since fullscreen must be requested in an event handler,
326330 // but call these anyways to confirm that they don't crash in an exception in the test suite.
327331 ret = emscripten_request_fullscreen ("#canvas" , 1 );
328332 TEST_RESULT (emscripten_request_fullscreen );
329333 ret = emscripten_exit_fullscreen ();
330- TEST_RESULT (emscripten_exit_fullscreen );
334+ ASSERT_RESULT (emscripten_exit_fullscreen );
331335
332336 EmscriptenPointerlockChangeEvent plce ;
333337 ret = emscripten_get_pointerlock_status (& plce );
334- TEST_RESULT (emscripten_get_pointerlock_status );
338+ ASSERT_RESULT (emscripten_get_pointerlock_status );
335339 if (ret == EMSCRIPTEN_RESULT_SUCCESS ) {
336340 printf ("The current pointerlock status is:\n" );
337341 pointerlockchange_callback (EMSCRIPTEN_EVENT_POINTERLOCKCHANGE , & plce , 0 );
338342 }
339343
340344 ret = emscripten_set_pointerlockchange_callback (EMSCRIPTEN_EVENT_TARGET_DOCUMENT , 0 , 1 , pointerlockchange_callback );
341- TEST_RESULT (emscripten_set_pointerlockchange_callback );
345+ ASSERT_RESULT (emscripten_set_pointerlockchange_callback );
342346
343347 // These won't do anything, since pointer lock must be requested in an event handler,
344348 // but call these anyways to confirm that they don't crash in an exception in the test suite.
345349 ret = emscripten_request_pointerlock ("#canvas" , 1 );
346350 TEST_RESULT (emscripten_request_pointerlock );
347351 ret = emscripten_exit_pointerlock ();
348- TEST_RESULT (emscripten_exit_pointerlock );
352+ ASSERT_RESULT (emscripten_exit_pointerlock );
349353
350354 int vibratePattern [] = {
351355 150 , 500 ,
@@ -357,27 +361,29 @@ int main() {
357361
358362 EmscriptenVisibilityChangeEvent vce ;
359363 ret = emscripten_get_visibility_status (& vce );
360- TEST_RESULT (emscripten_get_visibility_status );
364+ ASSERT_RESULT (emscripten_get_visibility_status );
361365 if (ret == EMSCRIPTEN_RESULT_SUCCESS ) {
362366 printf ("Current visibility status:\n" );
363367 visibilitychange_callback (EMSCRIPTEN_EVENT_VISIBILITYCHANGE , & vce , 0 );
364368 }
365369
366370 ret = emscripten_set_visibilitychange_callback (0 , 1 , visibilitychange_callback );
367- TEST_RESULT (emscripten_set_visibilitychange_callback );
371+ ASSERT_RESULT (emscripten_set_visibilitychange_callback );
368372
369373 ret = emscripten_set_touchstart_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , touch_callback );
370- TEST_RESULT (emscripten_set_touchstart_callback );
374+ ASSERT_RESULT (emscripten_set_touchstart_callback );
371375 ret = emscripten_set_touchend_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , touch_callback );
372- TEST_RESULT (emscripten_set_touchend_callback );
376+ ASSERT_RESULT (emscripten_set_touchend_callback );
373377 ret = emscripten_set_touchmove_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , touch_callback );
374- TEST_RESULT (emscripten_set_touchmove_callback );
378+ ASSERT_RESULT (emscripten_set_touchmove_callback );
375379 ret = emscripten_set_touchcancel_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW , 0 , 1 , touch_callback );
376- TEST_RESULT (emscripten_set_touchcancel_callback );
380+ ASSERT_RESULT (emscripten_set_touchcancel_callback );
377381
378382 ret = emscripten_set_beforeunload_callback (0 , beforeunload_callback );
379- TEST_RESULT (emscripten_set_beforeunload_callback );
383+ ASSERT_RESULT (emscripten_set_beforeunload_callback );
380384
385+ // Use TEST_RESULT rather than ASSERT_RESULT for battery status since
386+ // not all machines support this API.
381387 ret = emscripten_set_batterychargingchange_callback (0 , battery_callback );
382388 TEST_RESULT (emscripten_set_batterychargingchange_callback );
383389 ret = emscripten_set_batterylevelchange_callback (0 , battery_callback );
@@ -392,21 +398,21 @@ int main() {
392398 }
393399
394400 ret = emscripten_set_webglcontextlost_callback ("#canvas" , 0 , 1 , webglcontext_callback );
395- TEST_RESULT (emscripten_set_webglcontextlost_callback );
401+ ASSERT_RESULT (emscripten_set_webglcontextlost_callback );
396402 ret = emscripten_set_webglcontextrestored_callback ("#canvas" , 0 , 1 , webglcontext_callback );
397- TEST_RESULT (emscripten_set_webglcontextrestored_callback );
403+ ASSERT_RESULT (emscripten_set_webglcontextrestored_callback );
398404
399405 char * source_window_title = "test window title Äあ🙂" ;
400406 emscripten_set_window_title (source_window_title );
401407 char * current_window_title = emscripten_get_window_title ();
402408 ret = (strcmp (source_window_title , current_window_title ) == 0 \
403409 ? EMSCRIPTEN_RESULT_SUCCESS : EMSCRIPTEN_RESULT_FAILED );
404- TEST_RESULT (emscripten_get_window_title );
410+ ASSERT_RESULT (emscripten_get_window_title );
405411
406412 int width , height ;
407413 emscripten_get_screen_size (& width , & height );
408414 ret = (width && height ) ? EMSCRIPTEN_RESULT_SUCCESS : EMSCRIPTEN_RESULT_FAILED ;
409- TEST_RESULT (emscripten_get_screen_size );
415+ ASSERT_RESULT (emscripten_get_screen_size );
410416
411417#ifdef KEEP_ALIVE
412418 emscripten_exit_with_live_runtime ();
0 commit comments