@@ -946,39 +946,6 @@ def test_context_repr():
946
946
assert repr (sample_context ()) == f"ContextProvider({ sample_context } )"
947
947
948
948
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
-
982
949
async def test_use_context_updates_components_even_if_memoized ():
983
950
Context = idom .create_context (None )
984
951
@@ -1019,114 +986,26 @@ def MemoizedComponentUsesContext():
1019
986
assert value .current == 2
1020
987
1021
988
1022
- async def test_nested_contexts_do_not_conflict ():
989
+ async def test_context_values_are_scoped ():
1023
990
Context = idom .create_context (None )
1024
991
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
-
1085
992
@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 ),
1092
997
)
1093
998
1094
999
@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
1099
1002
1100
1003
@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
1105
1006
1106
- async with idom . Layout (Root ()) as layout :
1007
+ async with Layout (Parent ()) as layout :
1107
1008
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
1130
1009
1131
1010
1132
1011
async def test_error_in_effect_cleanup_is_gracefully_handled ():
@@ -1357,30 +1236,6 @@ def incr_effect_count():
1357
1236
assert effect_count .current == 1
1358
1237
1359
1238
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
-
1384
1239
async def test_use_state_named_tuple ():
1385
1240
state = idom .Ref ()
1386
1241
0 commit comments