@@ -47,6 +47,8 @@ def schema_process(self):
4747 'order' : 2 ,
4848 'expected' : [
4949 {'full' : 'process.parent' , 'at' : 'process' , 'as' : 'parent' },
50+ {'full' : 'reuse.process' , 'at' : 'reuse' , 'as' : 'process' },
51+ {'full' : 'reuse.process.parent' , 'at' : 'reuse.process' , 'as' : 'parent' },
5052 ]
5153 }
5254 },
@@ -143,30 +145,57 @@ def schema_server(self):
143145 }
144146 }
145147
148+ def schema_process_reuse (self ):
149+ return {
150+ 'reuse' : {
151+ 'schema_details' : {
152+ 'title' : 'Reuse' ,
153+ 'root' : False
154+ },
155+ 'field_details' : {
156+ 'name' : 'Reuse' ,
157+ 'node_name' : 'Reuse' ,
158+ 'short' : 'reuse example' ,
159+ },
160+ 'fields' : {
161+ 'pid' : {
162+ 'field_details' : {
163+ 'name' : 'pid' ,
164+ 'node_name' : 'pid' ,
165+ }
166+ }
167+ }
168+ }
169+ }
170+
146171 # perform_reuse
147172
148173 def test_perform_reuse_with_foreign_reuse_and_self_reuse (self ):
149- fields = {** self .schema_user (), ** self .schema_server (), ** self .schema_process ()}
174+ fields = {** self .schema_user (), ** self .schema_server (), ** self .schema_process (), ** self . schema_process_reuse () }
150175 # If the test had multiple foreign destinations for user fields, we could compare them together instead
151176 finalizer .perform_reuse (fields )
152177 process_fields = fields ['process' ]['fields' ]
153178 server_fields = fields ['server' ]['fields' ]
154179 user_fields = fields ['user' ]['fields' ]
180+ process_reuse_fields = fields ['reuse' ]['fields' ]['process' ]['fields' ]
155181 # Expected reuse
156182 self .assertIn ('parent' , process_fields )
157183 self .assertIn ('user' , server_fields )
158184 self .assertIn ('target' , user_fields )
159185 self .assertIn ('effective' , user_fields )
186+ self .assertIn ('parent' , process_reuse_fields )
160187 # Sanity check for presence of leaf fields, after performing reuse
161188 self .assertIn ('name' , user_fields ['target' ]['fields' ])
162189 self .assertIn ('name' , user_fields ['effective' ]['fields' ])
163190 self .assertIn ('name' , server_fields ['user' ]['fields' ])
164191 self .assertIn ('pid' , process_fields ['parent' ]['fields' ])
192+ self .assertIn ('pid' , process_reuse_fields ['parent' ]['fields' ])
165193 # Ensure the parent field of reused fields is marked as intermediate
166194 self .assertTrue (server_fields ['user' ]['field_details' ]['intermediate' ])
167195 self .assertTrue (process_fields ['parent' ]['field_details' ]['intermediate' ])
168196 self .assertTrue (user_fields ['target' ]['field_details' ]['intermediate' ])
169197 self .assertTrue (user_fields ['effective' ]['field_details' ]['intermediate' ])
198+ self .assertTrue (process_reuse_fields ['parent' ]['field_details' ]['intermediate' ])
170199 # No unexpected cross-nesting
171200 self .assertNotIn ('target' , user_fields ['target' ]['fields' ])
172201 self .assertNotIn ('target' , user_fields ['effective' ]['fields' ])
@@ -176,6 +205,7 @@ def test_perform_reuse_with_foreign_reuse_and_self_reuse(self):
176205 self .assertIn ('user.effective' , fields ['user' ]['schema_details' ]['nestings' ])
177206 self .assertIn ('user.target' , fields ['user' ]['schema_details' ]['nestings' ])
178207 self .assertIn ('server.user' , fields ['server' ]['schema_details' ]['nestings' ])
208+ self .assertIn ('reuse.process.parent' , fields ['reuse' ]['schema_details' ]['nestings' ])
179209 # Attribute 'reused_here' lists nestings inside a destination schema
180210 self .assertIn ({'full' : 'process.parent' , 'schema_name' : 'process' , 'short' : 'short desc' },
181211 fields ['process' ]['schema_details' ]['reused_here' ])
@@ -185,6 +215,8 @@ def test_perform_reuse_with_foreign_reuse_and_self_reuse(self):
185215 fields ['user' ]['schema_details' ]['reused_here' ])
186216 self .assertIn ({'full' : 'server.user' , 'schema_name' : 'user' , 'short' : 'short desc' },
187217 fields ['server' ]['schema_details' ]['reused_here' ])
218+ self .assertIn ({'full' : 'reuse.process.parent' , 'schema_name' : 'process' , 'short' : 'short desc' },
219+ fields ['reuse' ]['schema_details' ]['reused_here' ])
188220 # Reused fields have an indication they're reused
189221 self .assertEqual (process_fields ['parent' ]['field_details' ]['original_fieldset' ], 'process' ,
190222 "The parent field of reused fields should have 'original_fieldset' populated" )
@@ -193,6 +225,8 @@ def test_perform_reuse_with_foreign_reuse_and_self_reuse(self):
193225 self .assertEqual (server_fields ['user' ]['field_details' ]['original_fieldset' ], 'user' ,
194226 "The parent field of foreign reused fields should have 'original_fieldset' populated" )
195227 self .assertEqual (server_fields ['user' ]['fields' ]['name' ]['field_details' ]['original_fieldset' ], 'user' )
228+ self .assertEqual (process_reuse_fields ['parent' ]['field_details' ]['original_fieldset' ], 'process' ,
229+ "The parent field of reused fields should have 'original_fieldset' populated" )
196230 # Original fieldset's fields must not be marked with 'original_fieldset='
197231 self .assertNotIn ('original_fieldset' , user_fields ['name' ]['field_details' ])
198232 self .assertNotIn ('original_fieldset' , process_fields ['pid' ]['field_details' ])
0 commit comments