org.gradle.configurationcache.serialization.codecs.UserTypesCodecTest.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle-api Show documentation
Show all versions of gradle-api Show documentation
Gradle 6.9.1 API redistribution.
/*
* Copyright 2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.gradle.configurationcache.serialization.codecs
import org.gradle.configurationcache.problems.PropertyTrace
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.CoreMatchers.sameInstance
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
class UserTypesCodecTest : AbstractUserTypeCodecTest() {
@Test
fun `can handle deeply nested graphs`() {
val deepGraph = Peano.fromInt(1024)
val read = configurationCacheRoundtripOf(deepGraph)
assertThat(
read.toInt(),
equalTo(deepGraph.toInt())
)
}
@Test
fun `internal types codec leaves not implemented trace for unsupported types`() {
val unsupportedBean = 42 to "42"
val problems = serializationProblemsOf(unsupportedBean, codecs().internalTypesCodec)
val problem = problems.single()
assertInstanceOf(
problem.trace
)
assertThat(
problem.message.toString(),
equalTo("objects of type 'kotlin.Pair' are not yet supported with the configuration cache.")
)
}
@Test
fun `can handle anonymous enum subtypes`() {
EnumSuperType.values().forEach {
assertThat(
configurationCacheRoundtripOf(it),
sameInstance(it)
)
}
}
enum class EnumSuperType {
SubType1 {
override fun displayName() = "one"
},
SubType2 {
override fun displayName() = "two"
};
abstract fun displayName(): String
}
@Test
fun `Peano sanity check`() {
assertThat(
Peano.fromInt(0),
equalTo(Peano.Z)
)
assertThat(
Peano.fromInt(1024).toInt(),
equalTo(1024)
)
}
sealed class Peano {
companion object {
fun fromInt(n: Int): Peano = (0 until n).fold(Z as Peano) { acc, _ -> S(acc) }
}
fun toInt(): Int = sequence().count() - 1
object Z : Peano() {
override fun toString() = "Z"
}
data class S(val n: Peano) : Peano() {
override fun toString() = "S($n)"
}
private
fun sequence() = generateSequence(this) { previous ->
when (previous) {
is Z -> null
is S -> previous.n
}
}
}
}