@@ -61,6 +61,11 @@ def test_shared_mapping_alias_is_valid_but_recursive_alias_is_rejected_with_path
6161 provenance : dict [str , str ] = {}
6262 _merge_mapping (values , provenance , valid , "user" )
6363 self .assertEqual (values , {"left" : shared , "right" : shared })
64+ self .assertIsNot (values ["left" ], shared )
65+ self .assertIsNot (values ["left" ], values ["right" ])
66+ assert isinstance (values ["left" ], dict )
67+ values ["left" ]["answer" ] = 7
68+ self .assertEqual (values ["right" ], {"answer" : 42 })
6469 self .assertEqual (provenance , {"left.answer" : "user" , "right.answer" : "user" })
6570
6671 with tempfile .TemporaryDirectory () as tmpdir :
@@ -69,6 +74,18 @@ def test_shared_mapping_alias_is_valid_but_recursive_alias_is_rejected_with_path
6974 with self .assertRaisesRegex (base_cli .ConfigurationError , "recursive.yaml.*recursive value.*nested.child" ):
7075 BatteriesIncludedConfigLoader (user_config_dir = Path (tmpdir ) / "user" ).load (None , path )
7176
77+ def test_nested_mapping_aliases_are_isolated_across_layers (self ) -> None :
78+ shared = {"limits" : {"retries" : 2 }}
79+ values : dict [str , object ] = {}
80+ provenance : dict [str , str ] = {}
81+
82+ _merge_mapping (values , provenance , {"first" : shared , "second" : shared }, "user" )
83+ _merge_mapping (values , provenance , {"first" : {"limits" : {"timeout" : 30 }}}, "project" )
84+
85+ self .assertEqual (values ["first" ], {"limits" : {"retries" : 2 , "timeout" : 30 }})
86+ self .assertEqual (values ["second" ], {"limits" : {"retries" : 2 }})
87+ self .assertEqual (shared , {"limits" : {"retries" : 2 }})
88+
7289 def test_mapping_depth_is_bounded_before_recursive_merge_or_provenance (self ) -> None :
7390 nested : dict [str , object ] = {"value" : 1 }
7491 for index in range (65 ):
0 commit comments