Files
2023-07-21 14:48:30 +00:00

66 lines
2.1 KiB
Kotlin

/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package test.reflection
import test.*
import kotlin.reflect.*
import kotlin.test.*
class KClassTest {
@Test
fun className() {
assertEquals("KClassTest", KClassTest::class.simpleName)
// assertEquals(null, object {}::class.simpleName) // doesn't work as documented in JDK < 9, see KT-23072
}
@Test
fun extendsKClassifier() {
assertStaticAndRuntimeTypeIs<KClassifier>(KClassTest::class)
}
@Test
fun isInstanceCastSafeCast() {
fun <T : Any> checkIsInstance(kclass: KClass<T>, value: Any?, expectedResult: Boolean) {
if (expectedResult) {
assertTrue(kclass.isInstance(value))
assertSame(value, kclass.safeCast(value))
assertSame(value, kclass.cast(value))
} else {
assertFalse(kclass.isInstance(value))
assertNull(kclass.safeCast(value))
assertFailsWith<ClassCastException> { kclass.cast(value) }
}
}
val numberClass = Number::class
checkIsInstance(numberClass, 1, true)
checkIsInstance(numberClass, 1.0, true)
checkIsInstance(numberClass, null, false)
checkIsInstance(numberClass, "42", false)
}
@Test
fun testKClassEquals() {
assertFalse(Nothing::class == KClassTest::class)
assertFalse(KClassTest::class == Nothing::class)
assertFalse(String::class == Nothing::class)
assertFalse(Nothing::class == String::class)
assertFalse(Unit::class == Nothing::class)
assertFalse(Nothing::class == Unit::class)
assertFalse(KClassTest::class == String::class)
assertFalse(String::class == KClassTest::class)
assertTrue(Nothing::class == Nothing::class)
assertTrue(Unit::class == Unit::class)
assertTrue(String::class == String::class)
assertTrue(KClassTest::class == KClassTest::class)
}
}