Skip to content

Commit 129f9e6

Browse files
committed
Merge pull request #28 from nhaarman/create-class-objects
Account for Class<T> when creating instances.
2 parents a013a48 + ae4ab17 commit 129f9e6

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

mockito-kotlin/src/main/kotlin/com/nhaarman/mockito_kotlin/CreateInstance.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import kotlin.reflect.KType
3737
import kotlin.reflect.defaultType
3838
import kotlin.reflect.jvm.isAccessible
3939
import kotlin.reflect.jvm.javaType
40+
import kotlin.reflect.jvm.jvmName
4041

4142
/**
4243
* A collection of functions that tries to create an instance of
@@ -54,6 +55,7 @@ fun <T : Any> createInstance(kClass: KClass<T>): T {
5455
kClass.isPrimitive() -> kClass.toDefaultPrimitiveValue()
5556
kClass.isEnum() -> kClass.java.enumConstants.first()
5657
kClass.isArray() -> kClass.toArrayInstance()
58+
kClass.isClassObject() -> kClass.toClassObject()
5759
else -> kClass.easiestConstructor().newInstance()
5860
}
5961
}
@@ -84,6 +86,7 @@ private fun KClass<*>.hasObjectInstance() = objectInstance != null
8486
private fun KClass<*>.isMockable() = !Modifier.isFinal(java.modifiers)
8587
private fun KClass<*>.isEnum() = java.isEnum
8688
private fun KClass<*>.isArray() = java.isArray
89+
private fun KClass<*>.isClassObject() = jvmName.equals("java.lang.Class")
8790
private fun KClass<*>.isPrimitive() =
8891
java.isPrimitive || !defaultType.isMarkedNullable && simpleName in arrayOf(
8992
"Boolean",
@@ -124,6 +127,11 @@ private fun <T : Any> KClass<T>.toArrayInstance(): T {
124127
} as T
125128
}
126129

130+
@Suppress("UNCHECKED_CAST")
131+
private fun <T : Any> KClass<T>.toClassObject(): T {
132+
return Class.forName("java.lang.Object") as T
133+
}
134+
127135
private fun <T : Any> KFunction<T>.newInstance(): T {
128136
isAccessible = true
129137
return callBy(parameters.associate {

mockito-kotlin/src/test/kotlin/CreateInstanceTest.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import com.nhaarman.expect.expect
2727
import com.nhaarman.mockito_kotlin.createInstance
2828
import org.junit.Test
2929
import java.util.*
30+
import kotlin.reflect.KClass
3031

3132
class CreateInstanceTest {
3233

@@ -369,6 +370,24 @@ class CreateInstanceTest {
369370
expect(result).toNotBeNull()
370371
}
371372

373+
@Test
374+
fun classObject() {
375+
/* When */
376+
val result = createInstance<Class<String>>()
377+
378+
/* Then */
379+
expect(result).toNotBeNull()
380+
}
381+
382+
@Test
383+
fun kClassObject() {
384+
/* When */
385+
val result = createInstance<KClass<String>>()
386+
387+
/* Then */
388+
expect(result).toNotBeNull()
389+
}
390+
372391
@Test
373392
fun uuid() {
374393
/**

0 commit comments

Comments
 (0)