X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftest%2FGuice.kt;h=b0bed5ca576083765a58b02978e55708b48431c5;hp=f5f52b875d1f38952754b5bfb8a2593f5841b7fd;hb=faf66247a34f64946990a985d2ea3003465969cb;hpb=ffd92ca2374c0b2218e583d02e0bdd24b8c110ae diff --git a/src/test/kotlin/net/pterodactylus/sone/test/Guice.kt b/src/test/kotlin/net/pterodactylus/sone/test/Guice.kt index f5f52b8..b0bed5c 100644 --- a/src/test/kotlin/net/pterodactylus/sone/test/Guice.kt +++ b/src/test/kotlin/net/pterodactylus/sone/test/Guice.kt @@ -1,22 +1,37 @@ package net.pterodactylus.sone.test -import com.google.inject.Injector -import com.google.inject.Module +import com.google.inject.* +import com.google.inject.name.* +import org.hamcrest.MatcherAssert.* +import org.hamcrest.Matchers.* +import org.mockito.* import javax.inject.Provider -import kotlin.reflect.KClass +import kotlin.reflect.* -fun KClass.isProvidedBy(instance: T) = Module { it.bind(this.java).toProvider { instance } } +fun KClass.isProvidedBy(instance: T) = Module { it.bind(this.java).toProvider(Provider { instance }) } +fun KClass.withNameIsProvidedBy(instance: T, name: String) = Module { it.bind(this.java).annotatedWith(Names.named(name)).toProvider(Provider { instance }) } fun KClass.isProvidedBy(provider: com.google.inject.Provider) = Module { it.bind(this.java).toProvider(provider) } fun KClass.isProvidedBy(provider: KClass>) = Module { it.bind(this.java).toProvider(provider.java) } -inline fun KClass.isProvidedByMock() = Module { it.bind(this.java).toProvider { mock() } } +inline fun KClass.isProvidedByMock() = Module { it.bind(this.java).toProvider(Provider { mock() }) } +inline fun KClass.isProvidedByDeepMock() = Module { it.bind(this.java).toProvider(Provider { deepMock() }) } -inline fun Injector.getInstance() = getInstance(T::class.java)!! +inline fun Injector.getInstance(annotation: Annotation? = null): T = annotation + ?.let { getInstance(Key.get(object : TypeLiteral() {}, it)) } + ?: getInstance(Key.get(object : TypeLiteral() {})) + + +inline fun Injector.verifySingletonInstance(annotation: Annotation? = null) { + val firstInstance = getInstance(annotation) + val secondInstance = getInstance(annotation) + assertThat(firstInstance, sameInstance(secondInstance)) +} fun supply(javaClass: Class): Source = object : Source { override fun fromInstance(instance: T) = Module { it.bind(javaClass).toInstance(instance) } - override fun byInstance(instance: T) = Module { it.bind(javaClass).toProvider { instance } } + override fun byInstance(instance: T) = Module { it.bind(javaClass).toProvider(Provider { instance }) } override fun byProvider(provider: com.google.inject.Provider) = Module { it.bind(javaClass).toProvider(provider) } override fun byProvider(provider: Class>) = Module { it.bind(javaClass).toProvider(provider) } + override fun byMock() = Module { it.bind(javaClass).toInstance(Mockito.mock(javaClass)) } } interface Source { @@ -24,4 +39,5 @@ interface Source { fun byInstance(instance: T): Module fun byProvider(provider: com.google.inject.Provider): Module fun byProvider(provider: Class>): Module + fun byMock(): Module }