@@ -946,39 +946,6 @@ def test_context_repr():
946946 assert repr (sample_context ()) == f"ContextProvider({ sample_context } )"
947947
948948
949- async def test_use_context_only_renders_for_value_change ():
950- Context = idom .create_context (None )
951-
952- provider_hook = HookCatcher ()
953- render_count = idom .Ref (0 )
954- set_state = idom .Ref ()
955-
956- @idom .component
957- @provider_hook .capture
958- def ComponentProvidesContext ():
959- state , set_state .current = idom .use_state (0 )
960- return Context (ComponentInContext (), value = state )
961-
962- @idom .component
963- def ComponentInContext ():
964- render_count .current += 1
965- return html .div ()
966-
967- async with idom .Layout (ComponentProvidesContext ()) as layout :
968- await layout .render ()
969- assert render_count .current == 1
970-
971- set_state .current (1 )
972-
973- await layout .render ()
974- assert render_count .current == 2
975-
976- provider_hook .latest .schedule_render ()
977-
978- await layout .render ()
979- assert render_count .current == 2
980-
981-
982949async def test_use_context_updates_components_even_if_memoized ():
983950 Context = idom .create_context (None )
984951
@@ -1019,114 +986,26 @@ def MemoizedComponentUsesContext():
1019986 assert value .current == 2
1020987
1021988
1022- async def test_nested_contexts_do_not_conflict ():
989+ async def test_context_values_are_scoped ():
1023990 Context = idom .create_context (None )
1024991
1025- outer_value = idom .Ref (None )
1026- inner_value = idom .Ref (None )
1027- outer_render_count = idom .Ref (0 )
1028- inner_render_count = idom .Ref (0 )
1029- set_outer_value = idom .Ref ()
1030- set_root_value = idom .Ref ()
1031-
1032- @idom .component
1033- def Root ():
1034- outer_value , set_root_value .current = idom .use_state (- 1 )
1035- return Context (Outer (), value = outer_value )
1036-
1037- @idom .component
1038- def Outer ():
1039- inner_value , set_outer_value .current = idom .use_state (1 )
1040- outer_value .current = idom .use_context (Context )
1041- outer_render_count .current += 1
1042- return Context (Inner (), value = inner_value )
1043-
1044- @idom .component
1045- def Inner ():
1046- inner_value .current = idom .use_context (Context )
1047- inner_render_count .current += 1
1048- return html .div ()
1049-
1050- async with idom .Layout (Root ()) as layout :
1051- await layout .render ()
1052- assert outer_render_count .current == 1
1053- assert inner_render_count .current == 1
1054- assert outer_value .current == - 1
1055- assert inner_value .current == 1
1056-
1057- set_root_value .current (- 2 )
1058-
1059- await layout .render ()
1060- assert outer_render_count .current == 2
1061- assert inner_render_count .current == 1
1062- assert outer_value .current == - 2
1063- assert inner_value .current == 1
1064-
1065- set_outer_value .current (2 )
1066-
1067- await layout .render ()
1068- assert outer_render_count .current == 3
1069- assert inner_render_count .current == 2
1070- assert outer_value .current == - 2
1071- assert inner_value .current == 2
1072-
1073-
1074- async def test_neighboring_contexts_do_not_conflict ():
1075- LeftContext = idom .create_context (None )
1076- RightContext = idom .create_context (None )
1077-
1078- set_left = idom .Ref ()
1079- set_right = idom .Ref ()
1080- left_used_value = idom .Ref ()
1081- right_used_value = idom .Ref ()
1082- left_render_count = idom .Ref (0 )
1083- right_render_count = idom .Ref (0 )
1084-
1085992 @idom .component
1086- def Root ():
1087- left_value , set_left .current = idom .use_state (1 )
1088- right_value , set_right .current = idom .use_state (1 )
1089- return idom .html .div (
1090- LeftContext (Left (), value = left_value ),
1091- RightContext (Right (), value = right_value ),
993+ def Parent ():
994+ return html ._ (
995+ Context (Context (Child1 (), value = 1 ), value = "something-else" ),
996+ Context (Child2 (), value = 2 ),
1092997 )
1093998
1094999 @idom .component
1095- def Left ():
1096- left_render_count .current += 1
1097- left_used_value .current = idom .use_context (LeftContext )
1098- return idom .html .div ()
1000+ def Child1 ():
1001+ assert idom .use_context (Context ) == 1
10991002
11001003 @idom .component
1101- def Right ():
1102- right_render_count .current += 1
1103- right_used_value .current = idom .use_context (RightContext )
1104- return idom .html .div ()
1004+ def Child2 ():
1005+ assert idom .use_context (Context ) == 2
11051006
1106- async with idom . Layout (Root ()) as layout :
1007+ async with Layout (Parent ()) as layout :
11071008 await layout .render ()
1108- assert left_render_count .current == 1
1109- assert right_render_count .current == 1
1110- assert left_used_value .current == 1
1111- assert right_used_value .current == 1
1112-
1113- for i in range (2 , 5 ):
1114- set_left .current (i )
1115-
1116- await layout .render ()
1117- assert left_render_count .current == i
1118- assert right_render_count .current == 1
1119- assert left_used_value .current == i
1120- assert right_used_value .current == 1
1121-
1122- for j in range (2 , 5 ):
1123- set_right .current (j )
1124-
1125- await layout .render ()
1126- assert left_render_count .current == i
1127- assert right_render_count .current == j
1128- assert left_used_value .current == i
1129- assert right_used_value .current == j
11301009
11311010
11321011async def test_error_in_effect_cleanup_is_gracefully_handled ():
@@ -1357,30 +1236,6 @@ def incr_effect_count():
13571236 assert effect_count .current == 1
13581237
13591238
1360- @pytest .mark .parametrize ("get_value" , STRICT_EQUALITY_VALUE_CONSTRUCTORS )
1361- async def test_use_context_compares_with_strict_equality (get_value ):
1362- hook = HookCatcher ()
1363- context = idom .create_context (None )
1364- inner_render_count = idom .Ref (0 )
1365-
1366- @idom .component
1367- @hook .capture
1368- def OuterComponent ():
1369- return context (InnerComponent (), value = get_value ())
1370-
1371- @idom .component
1372- def InnerComponent ():
1373- idom .use_context (context )
1374- inner_render_count .current += 1
1375-
1376- async with idom .Layout (OuterComponent ()) as layout :
1377- await layout .render ()
1378- assert inner_render_count .current == 1
1379- hook .latest .schedule_render ()
1380- await layout .render ()
1381- assert inner_render_count .current == 1
1382-
1383-
13841239async def test_use_state_named_tuple ():
13851240 state = idom .Ref ()
13861241
0 commit comments