@@ -288,7 +288,7 @@ def use_toggle(init=False):
288
288
return state , lambda : set_state (lambda old : not old )
289
289
290
290
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 ):
292
292
called_good_trigger = idom .Ref (False )
293
293
good_handler = StaticEventHandler ()
294
294
bad_handler = StaticEventHandler ()
@@ -330,6 +330,8 @@ def bad_trigger():
330
330
331
331
await layout .render ()
332
332
333
+ assert not caplog .records
334
+
333
335
334
336
async def test_model_key_preserves_callback_identity_for_components ():
335
337
called_good_trigger = idom .Ref (False )
@@ -495,3 +497,24 @@ def SomeComponent():
495
497
next (iter (caplog .records )).message
496
498
== f"Did not render component - { component_not_in_layout } already unmounted or does not belong to this layout"
497
499
)
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