/* * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. */ package kotlinx.serialization.json.polymorphic import kotlinx.serialization.* import kotlinx.serialization.json.* import kotlinx.serialization.modules.* import kotlin.test.* class JsonProhibitedPolymorphicKindsTest : JsonTestBase() { @Serializable sealed class Base { @Serializable class Impl(val data: Int) : Base() } @Serializable enum class MyEnum @Test fun testSealedSubclass() { assertFailsWith { Json(true) { subclass(Base::class) } } assertFailsWith { Json(false) { subclass(Base::class) } } } @Test fun testPrimitive() { assertFailsWith { Json(false) { subclass(Int::class) } } // Doesn't fail Json(true) { subclass(Int::class) } } @Test fun testEnum() { assertFailsWith { Json(false) { subclass(MyEnum::class) } } Json(true) { subclass(MyEnum::class) } } @Test fun testStructures() { assertFailsWith { Json(false) { subclass(serializer>()) } } assertFailsWith { Json(false) { subclass(serializer>()) } } Json(true) { subclass(serializer>()) } Json(true) { subclass(serializer>()) } } private fun Json(useArrayPolymorphism: Boolean, builderAction: PolymorphicModuleBuilder.() -> Unit) = Json { this.useArrayPolymorphism = useArrayPolymorphism serializersModule = SerializersModule { polymorphic(Any::class) { builderAction() } } } }