@@ -498,6 +498,36 @@ static em_promise_result_t test_race(void** result, void* data, void* value) {
498498 return EM_PROMISE_MATCH_RELEASE ;
499499}
500500
501+ static em_promise_result_t test_null_handlers (void * * result , void * data , void * value ) {
502+ emscripten_console_log ("test_null_handlers" );
503+ assert (data == (void * )8 );
504+
505+ em_promise_t fulfilled = emscripten_promise_create ();
506+ emscripten_promise_resolve (fulfilled , EM_PROMISE_FULFILL , (void * )42 );
507+ // Pass NULL as onFulfilled, it should just pass through the value.
508+ em_promise_t next1 = emscripten_promise_then (fulfilled , NULL , fail , NULL );
509+ em_promise_t next2 = emscripten_promise_then (next1 , expect_success , fail , NULL );
510+
511+ em_promise_t rejected = emscripten_promise_create ();
512+ emscripten_promise_resolve (rejected , EM_PROMISE_REJECT , (void * )43 );
513+ // Pass NULL as onRejected, it should just pass through the error.
514+ em_promise_t next3 = emscripten_promise_then (rejected , fail , NULL , NULL );
515+ em_promise_t next4 = emscripten_promise_then (next3 , fail , expect_error , NULL );
516+
517+ em_promise_t to_finish [2 ] = {next2 , next4 };
518+ em_promise_t finish_test_null = emscripten_promise_all (to_finish , NULL , 2 );
519+
520+ emscripten_promise_destroy (fulfilled );
521+ emscripten_promise_destroy (next1 );
522+ emscripten_promise_destroy (next2 );
523+ emscripten_promise_destroy (rejected );
524+ emscripten_promise_destroy (next3 );
525+ emscripten_promise_destroy (next4 );
526+
527+ * result = finish_test_null ;
528+ return EM_PROMISE_MATCH_RELEASE ;
529+ }
530+
501531static em_promise_result_t finish (void * * result , void * data , void * value ) {
502532 emscripten_console_logf ("finish" );
503533
@@ -547,8 +577,10 @@ int main() {
547577 em_promise_t test6 = emscripten_promise_then (test5 , test_any , fail , (void * )6 );
548578 em_promise_t test7 =
549579 emscripten_promise_then (test6 , test_race , fail , (void * )7 );
580+ em_promise_t test8 =
581+ emscripten_promise_then (test7 , test_null_handlers , fail , (void * )8 );
550582 em_promise_t assert_stack =
551- emscripten_promise_then (test7 , check_stack , fail , NULL );
583+ emscripten_promise_then (test8 , check_stack , fail , NULL );
552584 em_promise_t end = emscripten_promise_then (assert_stack , finish , fail , NULL );
553585
554586 emscripten_promise_resolve (start , EM_PROMISE_FULFILL , NULL );
@@ -562,6 +594,7 @@ int main() {
562594 emscripten_promise_destroy (test5 );
563595 emscripten_promise_destroy (test6 );
564596 emscripten_promise_destroy (test7 );
597+ emscripten_promise_destroy (test8 );
565598 emscripten_promise_destroy (assert_stack );
566599 emscripten_promise_destroy (end );
567600
0 commit comments