diff --git a/kotlin/codegen/src/test/java/com/squareup/moshi/kotlin/codegen/JsonClassCodegenProcessorTest.kt b/kotlin/codegen/src/test/java/com/squareup/moshi/kotlin/codegen/JsonClassCodegenProcessorTest.kt index 03cb650..5d425cc 100644 --- a/kotlin/codegen/src/test/java/com/squareup/moshi/kotlin/codegen/JsonClassCodegenProcessorTest.kt +++ b/kotlin/codegen/src/test/java/com/squareup/moshi/kotlin/codegen/JsonClassCodegenProcessorTest.kt @@ -16,6 +16,8 @@ package com.squareup.moshi.kotlin.codegen import com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader import com.tschuchort.compiletesting.KotlinCompilation import com.tschuchort.compiletesting.SourceFile import com.tschuchort.compiletesting.SourceFile.Companion.kotlin @@ -24,6 +26,14 @@ import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder +import kotlin.reflect.KClass +import kotlin.reflect.KClassifier +import kotlin.reflect.KType +import kotlin.reflect.KTypeProjection +import kotlin.reflect.KVariance +import kotlin.reflect.KVariance.INVARIANT +import kotlin.reflect.full.createType +import kotlin.reflect.full.declaredMemberProperties /** Execute kotlinc to confirm that either files are generated or errors are printed. */ @UseExperimental(KotlinPoetMetadataPreview::class) @@ -364,8 +374,6 @@ class JsonClassCodegenProcessorTest { assertThat(result.messages).contains("JsonQualifier @UpperCase must have RUNTIME retention") } - @Ignore("Toe-hold test for when " + - "https://github.com/tschuchortdev/kotlin-compile-testing/issues/28 is resolved.") @Test fun `TypeAliases with the same backing type should share the same adapter`() { val result = compile(kotlin("source.kt", @@ -380,12 +388,14 @@ class JsonClassCodegenProcessorTest { """ )) assertThat(result.exitCode).isEqualTo(KotlinCompilation.ExitCode.OK) - val adapterSource = result.generatedFiles.find { it.name == "PersonJsonAdapter.kt" }!! - //language=kotlin - assertThat(adapterSource.readText()).isEqualTo(""" - // TODO implement this - """.trimIndent()) + // We're checking here that we only generate one `stringAdapter` that's used for both the + // regular string properties as well as the the aliased ones. + val adapterClass = result.classLoader.loadClass("PersonJsonAdapter").kotlin + assertThat(adapterClass.declaredMemberProperties.map { it.returnType }).containsExactly( + JsonReader.Options::class.createType(), + JsonAdapter::class.parameterizedBy(String::class) + ) } private fun prepareCompilation(vararg sourceFiles: SourceFile): KotlinCompilation { @@ -403,4 +413,18 @@ class JsonClassCodegenProcessorTest { return prepareCompilation(*sourceFiles).compile() } + private fun KClassifier.parameterizedBy(vararg types: KClass<*>): KType { + return parameterizedBy(*types.map { it.createType() }.toTypedArray()) + } + + private fun KClassifier.parameterizedBy(vararg types: KType): KType { + return createType( + types.map { it.asProjection() } + ) + } + + private fun KType.asProjection(variance: KVariance? = INVARIANT): KTypeProjection { + return KTypeProjection(variance, this) + } + } diff --git a/pom.xml b/pom.xml index be61f5e..27e729f 100644 --- a/pom.xml +++ b/pom.xml @@ -36,7 +36,7 @@ 0.2 1.16.0 2.1.0 - 1.3.50 + 1.3.60 1.4.4 0.1.0 3.1.0 @@ -45,7 +45,7 @@ 3.11.1 0.15 4.12 - 1.2.3 + 1.2.5 1.0