@@ -288,7 +288,7 @@ def use_toggle(init=False):
288288 return state , lambda : set_state (lambda old : not old )
289289
290290
291- async def test_model_key_preserves_callback_identity_for_common_elements ():
291+ async def test_model_key_preserves_callback_identity_for_common_elements (caplog ):
292292 called_good_trigger = idom .Ref (False )
293293 good_handler = StaticEventHandler ()
294294 bad_handler = StaticEventHandler ()
@@ -330,6 +330,8 @@ def bad_trigger():
330330
331331 await layout .render ()
332332
333+ assert not caplog .records
334+
333335
334336async def test_model_key_preserves_callback_identity_for_components ():
335337 called_good_trigger = idom .Ref (False )
@@ -495,3 +497,24 @@ def SomeComponent():
495497 next (iter (caplog .records )).message
496498 == f"Did not render component - { component_not_in_layout } already unmounted or does not belong to this layout"
497499 )
500+
501+
502+ async def test_log_error_on_bad_event_handler (caplog ):
503+ bad_handler = StaticEventHandler ()
504+
505+ @idom .component
506+ def ComponentWithBadEventHandler ():
507+ @bad_handler .use
508+ def raise_error ():
509+ raise Exception ("bad event handler" )
510+
511+ return idom .html .button ({"onClick" : raise_error })
512+
513+ with idom .Layout (ComponentWithBadEventHandler ()) as layout :
514+ await layout .render ()
515+ event = LayoutEvent (bad_handler .target , [])
516+ await layout .dispatch (event )
517+
518+ assert next (iter (caplog .records )).message .startswith (
519+ "Failed to execute event handler"
520+ )
0 commit comments