X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftest%2FGuice.kt;h=f5f52b875d1f38952754b5bfb8a2593f5841b7fd;hb=fecc40a37c481ea7c8d0aa5d13331834d165de6a;hp=f8feeefa70a6159a62a9b4410fac8620e7733761;hpb=2d15e85a3ea6c752a792aa918bbb5938760d69ac;p=Sone.git diff --git a/src/test/kotlin/net/pterodactylus/sone/test/Guice.kt b/src/test/kotlin/net/pterodactylus/sone/test/Guice.kt index f8feeef..f5f52b8 100644 --- a/src/test/kotlin/net/pterodactylus/sone/test/Guice.kt +++ b/src/test/kotlin/net/pterodactylus/sone/test/Guice.kt @@ -1,6 +1,27 @@ package net.pterodactylus.sone.test +import com.google.inject.Injector import com.google.inject.Module +import javax.inject.Provider import kotlin.reflect.KClass -fun T.bindAs(bindClass: KClass) = Module { it.bind(bindClass.java).toInstance(this@bindAs) } +fun KClass.isProvidedBy(instance: T) = Module { it.bind(this.java).toProvider { 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 Injector.getInstance() = getInstance(T::class.java)!! + +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 byProvider(provider: com.google.inject.Provider) = Module { it.bind(javaClass).toProvider(provider) } + override fun byProvider(provider: Class>) = Module { it.bind(javaClass).toProvider(provider) } +} + +interface Source { + fun fromInstance(instance: T): Module + fun byInstance(instance: T): Module + fun byProvider(provider: com.google.inject.Provider): Module + fun byProvider(provider: Class>): Module +}