X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftest%2FGuice.kt;h=e6c0fdb15869f4c75a77d64033bdf2a883380e0a;hb=3ef366568695ff12fd945a506e53d6279b2337c5;hp=c8f241757461e074689969644ab17bb9dfbfb67c;hpb=b447a1e0b8ce1fb977faf3fc5a7f4c24ac4639ff;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 c8f2417..e6c0fdb 100644 --- a/src/test/kotlin/net/pterodactylus/sone/test/Guice.kt +++ b/src/test/kotlin/net/pterodactylus/sone/test/Guice.kt @@ -1,22 +1,38 @@ package net.pterodactylus.sone.test -import com.google.inject.* -import com.google.inject.name.* -import org.mockito.* +import com.google.inject.Injector +import com.google.inject.Key +import com.google.inject.Module +import com.google.inject.TypeLiteral +import com.google.inject.name.Names +import org.hamcrest.MatcherAssert.assertThat +import org.hamcrest.Matchers.sameInstance +import org.mockito.Mockito import javax.inject.Provider -import kotlin.reflect.* +import kotlin.reflect.KClass 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) } +fun Key.isProvidedBy(instance: T) = Module { it.bind(this).toProvider(Provider { instance }) } 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 key(): Key = Key.get(object : TypeLiteral() {}) +inline fun key(annotation: Annotation): Key = Key.get(object : TypeLiteral() {}, annotation) + 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(Provider { instance }) }