1- from idom .core .element import element
21import re
32
43import pytest
@@ -519,12 +518,46 @@ async def ElementWithUseReduce():
519518 assert first_dispatch is d
520519
521520
522- def test_use_callback_identity ():
523- assert False
521+ async def test_use_callback_identity ():
522+ element_hook = HookCatcher ()
523+ used_callbacks = []
524524
525+ @idom .element
526+ async def ElementWithRef ():
527+ used_callbacks .append (idom .hooks .use_callback (lambda : None ))
528+ return idom .html .div ()
525529
526- def test_use_callback_memoization ():
527- assert False
530+ async with idom .Layout (ElementWithRef ()) as layout :
531+ await layout .render ()
532+ element_hook .schedule_render ()
533+ await layout .render ()
534+
535+ assert used_callbacks [0 ] is used_callbacks [1 ]
536+ assert len (used_callbacks ) == 2
537+
538+
539+ async def test_use_callback_memoization ():
540+ element_hook = HookCatcher ()
541+ set_state_hook = idom .Ref (None )
542+ used_callbacks = []
543+
544+ @idom .element
545+ @element_hook .capture
546+ async def ElementWithRef ():
547+ state , set_state_hook .current = idom .hooks .use_state (0 )
548+ used_callbacks .append (idom .hooks .use_callback (lambda : None , [state ]))
549+ return idom .html .div ()
550+
551+ async with idom .Layout (ElementWithRef ()) as layout :
552+ await layout .render ()
553+ set_state_hook .current (1 )
554+ await layout .render ()
555+ element_hook .schedule_render ()
556+ await layout .render ()
557+
558+ assert used_callbacks [0 ] is not used_callbacks [1 ]
559+ assert used_callbacks [1 ] is used_callbacks [2 ]
560+ assert len (used_callbacks ) == 3
528561
529562
530563def test_use_memo ():
@@ -543,5 +576,19 @@ def test_use_memo_decorator_and_non_decorator_usage():
543576 assert False
544577
545578
546- def test_use_ref ():
547- assert False
579+ async def test_use_ref ():
580+ element_hook = HookCatcher ()
581+ used_refs = []
582+
583+ @idom .element
584+ async def ElementWithRef ():
585+ used_refs .append (idom .hooks .use_ref (1 ))
586+ return idom .html .div ()
587+
588+ async with idom .Layout (ElementWithRef ()) as layout :
589+ await layout .render ()
590+ element_hook .schedule_render ()
591+ await layout .render ()
592+
593+ assert used_refs [0 ] is used_refs [1 ]
594+ assert len (used_refs ) == 2
0 commit comments