diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 31f624ba3ca..1b7b9b9939e 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -1520,6 +1520,10 @@ task kclassEnumArgument(type: KonanLocalTest) { source = "codegen/kclass/kClassEnumArgument.kt" } +task ktype1(type: KonanLocalTest) { + source = "codegen/ktype/ktype1.kt" +} + task associatedObjects1(type: KonanLocalTest) { source = "codegen/associatedObjects/associatedObjects1.kt" } diff --git a/backend.native/tests/codegen/ktype/ktype1.kt b/backend.native/tests/codegen/ktype/ktype1.kt new file mode 100644 index 00000000000..b6e66034816 --- /dev/null +++ b/backend.native/tests/codegen/ktype/ktype1.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the LICENSE file. + */ + +package codegen.ktype.ktype1 + +import kotlin.test.* +import kotlin.reflect.* + +@UseExperimental(ExperimentalStdlibApi::class) +inline fun kType() = typeOf() + +inline fun kType(obj: R) = kType() + +class C +class D + +fun kTypeForCWithTypeParameter() = kType>() + +class Outer { + companion object Friend + inner class Inner +} + +object Object + +private val pkg = "codegen.ktype.ktype1" + +@Test +fun testBasics1() { + assertEquals("$pkg.C", kType>().toString()) + assertEquals("$pkg.C<$pkg.C>", kType>>().toString()) + + assertEquals("$pkg.C", kTypeForCWithTypeParameter().toString()) + assertEquals("$pkg.Object", kType().toString()) + assertEquals("$pkg.Outer.Friend", kType().toString()) +} + +@Test +fun testInner() { + val innerKType = kType.Inner>() + assertEquals(Outer.Inner::class, innerKType.classifier) + assertEquals(String::class, innerKType.arguments.first().type!!.classifier) + assertEquals(D::class, innerKType.arguments.last().type!!.classifier) +} + +@Test +fun testAnonymousObject() { + val obj = object {} + val objType = kType(obj) + + assertEquals("(non-denotable type)", objType.toString()) + assertEquals(obj::class, objType.classifier) + + assertTrue(objType.arguments.isEmpty()) + assertFalse(objType.isMarkedNullable) +} \ No newline at end of file