@@ -52,6 +52,29 @@ async def SimpleStatefulElement():
5252 ]
5353
5454
55+ async def test_set_state_callback_identity_is_preserved ():
56+ saved_set_state_hooks = []
57+
58+ @idom .element
59+ async def SimpleStatefulElement ():
60+ index , set_index = idom .hooks .use_state (0 )
61+ saved_set_state_hooks .append (set_index )
62+ set_index (index + 1 )
63+ return idom .html .div (index )
64+
65+ sse = SimpleStatefulElement ()
66+
67+ async with idom .Layout (sse ) as layout :
68+ await layout .render ()
69+ await layout .render ()
70+ await layout .render ()
71+ await layout .render ()
72+
73+ first_hook = saved_set_state_hooks [0 ]
74+ for h in saved_set_state_hooks [1 :]:
75+ assert first_hook is h
76+
77+
5578def test_use_state_with_constructor (driver , display , driver_wait ):
5679 constructor_call_count = idom .Ref (0 )
5780
@@ -113,7 +136,15 @@ async def on_click(event):
113136 assert count .get_attribute ("innerHTML" ) == "1"
114137
115138
116- def test_simple_input (driver , display ):
139+ def test_set_state_with_reducer_instead_of_value ():
140+ assert False
141+
142+
143+ def test_set_state_checks_identity_not_equality ():
144+ assert False
145+
146+
147+ def test_simple_input_with_use_state (driver , display ):
117148 message_ref = idom .Ref (None )
118149
119150 @idom .element
@@ -139,12 +170,49 @@ async def on_change(event):
139170 assert message_ref .current == "this is a test"
140171
141172
173+ def test_use_effect_callback_occurs_after_full_layout_update_is_complete ():
174+ # TODO: right now it runs after the element is rendered, not the full layout update
175+ assert False
176+
177+
178+ def test_use_effect_cleanup_occurs_on_will_render ():
179+ assert False
180+
181+
182+ def test_use_effect_cleanup_occurs_on_will_unmount ():
183+ assert False
184+
185+
186+ def test_use_effect_memoization ():
187+ assert False
188+
189+
190+ def test_use_reducer ():
191+ assert False
192+
193+
194+ def test_use_reducer_dispatch_callback_identity_is_preserved ():
195+ assert False
196+
197+
198+ def test_use_callback_identity ():
199+ assert False
200+
201+
202+ def test_use_callback_memoization ():
203+ assert False
204+
205+
142206def test_use_memo (display , driver , driver_wait ):
143207 trigger_count = 0
144208
209+ # use constants to ensure identity comparison works as expected
210+ left_const = "left"
211+ right_const = "right"
212+
145213 @idom .element
146214 async def ComponentWithMemo ():
147- location , set_location = idom .hooks .use_state ("left" )
215+ location , set_location = idom .hooks .use_state (left_const )
148216
149217 @idom .hooks .use_memo (args = location )
150218 def count ():
@@ -153,10 +221,10 @@ def count():
153221 return trigger_count
154222
155223 async def on_left_button_click (event ):
156- set_location ("left" )
224+ set_location (left_const )
157225
158226 async def on_right_button_click (event ):
159- set_location ("right" )
227+ set_location (right_const )
160228
161229 return idom .html .div (
162230 idom .html .button (
@@ -181,3 +249,19 @@ async def on_right_button_click(event):
181249 right_client_button .click () # trigger: yes
182250
183251 driver_wait .until (lambda drv : trigger_count == 4 )
252+
253+
254+ def test_use_memo_always_runs_if_args_are_none ():
255+ assert False
256+
257+
258+ def test_use_memo_never_runs_if_args_args_empty_list ():
259+ assert False
260+
261+
262+ def test_use_memo_decorator_and_non_decorator_usage ():
263+ assert False
264+
265+
266+ def test_use_ref ():
267+ assert False
0 commit comments