@@ -15,10 +15,14 @@ import software.amazon.smithy.model.Model
1515import software.amazon.smithy.model.shapes.ListShape
1616import software.amazon.smithy.model.shapes.MapShape
1717import software.amazon.smithy.model.shapes.MemberShape
18+ import software.amazon.smithy.model.shapes.OperationShape
19+ import software.amazon.smithy.model.shapes.ServiceShape
1820import software.amazon.smithy.model.shapes.SetShape
1921import software.amazon.smithy.model.shapes.StructureShape
22+ import software.amazon.smithy.model.traits.ErrorTrait
2023import software.amazon.smithy.swift.codegen.SwiftCodegenPlugin
2124import software.amazon.smithy.swift.codegen.SymbolVisitor
25+ import software.amazon.smithy.swift.codegen.model.NestedShapeTransformer
2226import software.amazon.smithy.swift.codegen.model.defaultValue
2327import software.amazon.smithy.swift.codegen.model.isBoxed
2428
@@ -220,12 +224,93 @@ class SymbolProviderTest {
220224
221225 for (validName in validNames) {
222226 val isSwiftIdentifierValid = SymbolVisitor .isValidSwiftIdentifier(validName)
223- assertTrue(isSwiftIdentifierValid, " $validName is wrongly interpretted as invalid swift identifier" )
227+ assertTrue(isSwiftIdentifierValid, " $validName is wrongly interpreted as invalid swift identifier" )
224228 }
225229
226230 for (invalidName in invalidNames) {
227231 val isSwiftIdentifierValid = SymbolVisitor .isValidSwiftIdentifier(invalidName)
228- assertFalse(isSwiftIdentifierValid, " $invalidName is wrongly interpretted as valid swift identifier" )
232+ assertFalse(isSwiftIdentifierValid, " $invalidName is wrongly interpreted as valid swift identifier" )
229233 }
230234 }
235+
236+ @Test
237+ fun `it adds namespace to nested structure` () {
238+ val memberQuux = MemberShape .builder()
239+ .id(" foo.bar#Struct1\$ quux" )
240+ .target(" smithy.api#String" )
241+ .build()
242+ val struct1 = StructureShape .builder()
243+ .id(" foo.bar#Struct1" )
244+ .addMember(memberQuux)
245+ .build()
246+ val struct1AsMember = MemberShape .builder()
247+ .id(" foo.bar#InputStruct\$ foo" )
248+ .target(struct1)
249+ .build()
250+ val input = StructureShape .builder()
251+ .id(" foo.bar#InputStruct" )
252+ .addMember(struct1AsMember)
253+ .build()
254+ val operation = OperationShape .builder()
255+ .id(" foo.bar#TestOperation" )
256+ .input(input)
257+ .build()
258+ val service = ServiceShape .builder()
259+ .id(" foo.bar#QuuxService" )
260+ .version(" 1.0" )
261+ .addOperation(operation)
262+ .build()
263+ val model = Model .assembler()
264+ .addShapes(struct1, memberQuux, struct1AsMember, input, operation, service)
265+ .assemble()
266+ .unwrap()
267+
268+ val updatedModel = NestedShapeTransformer .transform(model, service)
269+ val provider: SymbolProvider = SwiftCodegenPlugin .createSymbolProvider(updatedModel, updatedModel.defaultSettings(service.id.toString(), sdkId = " Quux" ))
270+ val updatedStruct = updatedModel.expectShape(struct1.id)
271+ val updatedStructSymbol = provider.toSymbol(updatedStruct)
272+
273+ assertEquals(" QuuxClientTypes" , updatedStructSymbol.namespace)
274+ }
275+
276+ @Test
277+ fun `it does not add namespace to error structure` () {
278+ val memberQuux = MemberShape .builder()
279+ .id(" foo.bar#ErrorStruct\$ quux" )
280+ .target(" smithy.api#String" )
281+ .build()
282+ val struct1Error = StructureShape .builder()
283+ .id(" foo.bar#ErrorStruct" )
284+ .addMember(memberQuux)
285+ .addTrait(ErrorTrait (" client" ))
286+ .build()
287+ val struct1AsMember = MemberShape .builder()
288+ .id(" foo.bar#InputStruct\$ foo" )
289+ .target(struct1Error)
290+ .build()
291+ val input = StructureShape .builder()
292+ .id(" foo.bar#InputStruct" )
293+ .addMember(struct1AsMember)
294+ .build()
295+ val operation = OperationShape .builder()
296+ .id(" foo.bar#TestOperation" )
297+ .input(input)
298+ .build()
299+ val service = ServiceShape .builder()
300+ .id(" foo.bar#QuuxService" )
301+ .version(" 1.0" )
302+ .addOperation(operation)
303+ .build()
304+ val model = Model .assembler()
305+ .addShapes(struct1Error, memberQuux, struct1AsMember, input, operation, service)
306+ .assemble()
307+ .unwrap()
308+
309+ val updatedModel = NestedShapeTransformer .transform(model, service)
310+ val provider: SymbolProvider = SwiftCodegenPlugin .createSymbolProvider(updatedModel, updatedModel.defaultSettings(service.id.toString(), sdkId = " Quux" ))
311+ val updatedStruct = updatedModel.expectShape(struct1Error.id)
312+ val updatedStructSymbol = provider.toSymbol(updatedStruct)
313+
314+ assertEquals(" " , updatedStructSymbol.namespace)
315+ }
231316}
0 commit comments