|
1 | 1 | package software.amazon.smithy.swift.codegen.integration |
2 | 2 |
|
3 | 3 | import software.amazon.smithy.model.node.ObjectNode |
| 4 | +import software.amazon.smithy.model.shapes.MemberShape |
4 | 5 | import software.amazon.smithy.model.shapes.ShapeId |
| 6 | +import software.amazon.smithy.model.shapes.StructureShape |
| 7 | +import software.amazon.smithy.model.traits.StreamingTrait |
5 | 8 | import software.amazon.smithy.smoketests.traits.SmokeTestCase |
6 | 9 | import software.amazon.smithy.smoketests.traits.SmokeTestsTrait |
7 | 10 | import software.amazon.smithy.swift.codegen.ShapeValueGenerator |
8 | 11 | import software.amazon.smithy.swift.codegen.SwiftWriter |
| 12 | +import software.amazon.smithy.swift.codegen.model.expectShape |
9 | 13 | import software.amazon.smithy.swift.codegen.model.expectTrait |
10 | 14 | import software.amazon.smithy.swift.codegen.model.hasTrait |
11 | 15 | import software.amazon.smithy.swift.codegen.swiftmodules.ClientRuntimeTypes |
12 | 16 | import software.amazon.smithy.swift.codegen.swiftmodules.FoundationTypes |
13 | 17 | import software.amazon.smithy.swift.codegen.utils.toLowerCamelCase |
14 | 18 | import software.amazon.smithy.swift.codegen.utils.toUpperCamelCase |
| 19 | +import kotlin.jvm.optionals.getOrNull |
15 | 20 |
|
16 | 21 | open class SmokeTestGenerator( |
17 | 22 | private val ctx: ProtocolGenerator.GenerationContext, |
@@ -55,7 +60,13 @@ open class SmokeTestGenerator( |
55 | 60 | private fun getOperationShapeIdToTestCasesMapping(serviceName: String): Map<ShapeId, List<SmokeTestCase>> { |
56 | 61 | val operationShapeIdToTestCases = mutableMapOf<ShapeId, List<SmokeTestCase>>() |
57 | 62 | ctx.model.operationShapes.forEach { op -> |
58 | | - if (ctx.model.expectShape(op.id).hasTrait<SmokeTestsTrait>()) { |
| 63 | + val input = op.input.getOrNull()?.let { ctx.model.expectShape<StructureShape>(it) } |
| 64 | + val output = op.output.getOrNull()?.let { ctx.model.expectShape<StructureShape>(it) } |
| 65 | + val operationHasEventStreams = |
| 66 | + ((input?.members() ?: listOf<MemberShape>()) + (output?.members() ?: listOf())).any { member -> |
| 67 | + ctx.model.expectShape(member.target).hasTrait<StreamingTrait>() |
| 68 | + } |
| 69 | + if (op.hasTrait<SmokeTestsTrait>() && !operationHasEventStreams) { |
59 | 70 | val testCases = mutableListOf<SmokeTestCase>() |
60 | 71 | val smokeTestTrait = ctx.model.expectShape(op.id).expectTrait<SmokeTestsTrait>() |
61 | 72 | smokeTestTrait.testCases.forEach { testCase -> |
|
0 commit comments