diff --git a/settings.gradle.kts b/settings.gradle.kts index dc2418bfe1d..350416e7d40 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -59,6 +59,7 @@ include(":tests:e2e-test-util") include(":tests:codegen:smoke-tests") include(":tests:codegen:smoke-tests:services") include(":tests:codegen:checksums") +include(":tests:codegen:union-example") // generated services val File.isServiceDir: Boolean diff --git a/tests/codegen/union-example/build.gradle.kts b/tests/codegen/union-example/build.gradle.kts new file mode 100644 index 00000000000..e168201507d --- /dev/null +++ b/tests/codegen/union-example/build.gradle.kts @@ -0,0 +1,37 @@ +import aws.sdk.kotlin.gradle.codegen.dsl.smithyKotlinPlugin +import aws.sdk.kotlin.gradle.codegen.smithyKotlinProjectionSrcDir +import aws.sdk.kotlin.tests.codegen.CodegenTest +import aws.sdk.kotlin.tests.codegen.Model + +description = "AWS SDK for Kotlin's union codegen test suite" + +val tests = listOf( + CodegenTest("unions", Model("unions.smithy"), "aws.sdk.kotlin.test#TestService"), +) + +smithyBuild { + this@Build_gradle.tests.forEach { test -> + projections.register(test.name) { + imports = listOf(layout.projectDirectory.file(test.model.path + test.model.fileName).asFile.absolutePath) + smithyKotlinPlugin { + serviceShapeId = test.serviceShapeId + packageName = "aws.sdk.kotlin.test.${test.name.lowercase()}" + packageVersion = "1.0" + buildSettings { + generateFullProject = false + generateDefaultBuildFiles = false + optInAnnotations = listOf( + "aws.smithy.kotlin.runtime.InternalApi", + "aws.sdk.kotlin.runtime.InternalSdkApi", + ) + } + } + } + } +} + +kotlin.sourceSets.getByName("test") { + smithyBuild.projections.forEach { + kotlin.srcDir(smithyBuild.smithyKotlinProjectionSrcDir(it.name)) + } +} diff --git a/tests/codegen/union-example/src/test/kotlin/aws/sdk/kotlin/tests/codegen/unionexample/UnionTest.kt b/tests/codegen/union-example/src/test/kotlin/aws/sdk/kotlin/tests/codegen/unionexample/UnionTest.kt new file mode 100644 index 00000000000..d293270d494 --- /dev/null +++ b/tests/codegen/union-example/src/test/kotlin/aws/sdk/kotlin/tests/codegen/unionexample/UnionTest.kt @@ -0,0 +1,11 @@ +package aws.sdk.kotlin.tests.codegen.unionexample + +import aws.sdk.kotlin.test.unions.model.Foo +import kotlin.test.Test + +class UnionTest { + @Test + fun `try code generating a union with a member that has the same name as it, then use it`() { + Foo.Foo(true).asFoo() + } +} diff --git a/tests/codegen/union-example/src/test/resources/unions.smithy b/tests/codegen/union-example/src/test/resources/unions.smithy new file mode 100644 index 00000000000..77f1bef63ec --- /dev/null +++ b/tests/codegen/union-example/src/test/resources/unions.smithy @@ -0,0 +1,26 @@ +$version: "2" +namespace aws.sdk.kotlin.test + +use aws.protocols#awsJson1_0 +use smithy.rules#operationContextParams +use smithy.rules#endpointRuleSet +use aws.api#service + +@awsJson1_0 +@service(sdkId: "UnionOperationTest") +service TestService { + operations: [DeleteObjects], + version: "1" +} + +operation DeleteObjects { + input: DeleteObjectsRequest +} + +structure DeleteObjectsRequest { + Delete: Foo +} + +union Foo { + foo: Boolean +}