@@ -252,6 +252,42 @@ async def on_change(event):
252252 assert message_ref .current == "this is a test"
253253
254254
255+ def test_double_set_state (driver , display ):
256+ @idom .component
257+ def SomeComponent ():
258+ state_1 , set_state_1 = idom .hooks .use_state (0 )
259+ state_2 , set_state_2 = idom .hooks .use_state (0 )
260+
261+ def double_set_state (event ):
262+ set_state_1 (state_1 + 1 )
263+ set_state_2 (state_2 + 1 )
264+
265+ return idom .html .div (
266+ idom .html .div ({"id" : "first" , "value" : state_1 }, f"value is: { state_1 } " ),
267+ idom .html .div ({"id" : "second" , "value" : state_2 }, f"value is: { state_2 } " ),
268+ idom .html .button ({"id" : "button" , "onClick" : double_set_state }, "click me" ),
269+ )
270+
271+ display (SomeComponent )
272+
273+ button = driver .find_element_by_id ("button" )
274+ first = driver .find_element_by_id ("first" )
275+ second = driver .find_element_by_id ("second" )
276+
277+ assert first .get_attribute ("value" ) == "0"
278+ assert second .get_attribute ("value" ) == "0"
279+
280+ button .click ()
281+
282+ assert first .get_attribute ("value" ) == "1"
283+ assert second .get_attribute ("value" ) == "1"
284+
285+ button .click ()
286+
287+ assert first .get_attribute ("value" ) == "2"
288+ assert second .get_attribute ("value" ) == "2"
289+
290+
255291async def test_use_effect_callback_occurs_after_full_render_is_complete ():
256292 effect_triggered = idom .Ref (False )
257293 effect_triggers_after_final_render = idom .Ref (None )
0 commit comments