Add test for guice creation of image loader
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 11 Nov 2016 17:38:48 +0000 (18:38 +0100)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 11 Nov 2016 17:38:48 +0000 (18:38 +0100)
src/main/kotlin/net/pterodactylus/sone/core/DefaultImageLoader.kt
src/main/kotlin/net/pterodactylus/sone/core/ImageLoader.kt
src/test/kotlin/net/pterodactylus/sone/core/ImageLoaderTest.kt [new file with mode: 0644]
src/test/kotlin/net/pterodactylus/sone/test/Mockotlin.kt

index 469feb8..01e177a 100644 (file)
@@ -4,11 +4,12 @@ import com.google.common.cache.CacheBuilder
 import freenet.keys.FreenetURI
 import java.io.ByteArrayInputStream
 import javax.imageio.ImageIO
+import javax.inject.Inject
 
 /**
  * [ImageLoader] implementation that uses a simple Guava [com.google.common.cache.Cache].
  */
-class DefaultImageLoader(private val freenetInterface: FreenetInterface) : ImageLoader {
+class DefaultImageLoader @Inject constructor(private val freenetInterface: FreenetInterface) : ImageLoader {
 
        private val imageCache = CacheBuilder.newBuilder().build<String, LoadedImage>()
        private val callback = object : FreenetInterface.BackgroundFetchCallback {
index 6d7fb36..5211015 100644 (file)
@@ -1,8 +1,11 @@
 package net.pterodactylus.sone.core
 
+import com.google.inject.ImplementedBy
+
 /**
  * Component that loads images and supplies information about them.
  */
+@ImplementedBy(DefaultImageLoader::class)
 interface ImageLoader {
 
        fun toLoadedImage(link: String): LoadedImage?
diff --git a/src/test/kotlin/net/pterodactylus/sone/core/ImageLoaderTest.kt b/src/test/kotlin/net/pterodactylus/sone/core/ImageLoaderTest.kt
new file mode 100644 (file)
index 0000000..d3a021c
--- /dev/null
@@ -0,0 +1,20 @@
+package net.pterodactylus.sone.core
+
+import com.google.inject.Guice.createInjector
+import net.pterodactylus.sone.test.bindMock
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.notNullValue
+import org.junit.Test
+
+/**
+ * Unit test for [ImageLoader].
+ */
+class ImageLoaderTest {
+
+       @Test
+       fun `default image loader can be loaded by guice`() {
+               val injector = createInjector(bindMock<FreenetInterface>())
+               assertThat(injector.getInstance(ImageLoader::class.java), notNullValue());
+       }
+
+}
index 5ce82df..8195021 100644 (file)
@@ -1,7 +1,14 @@
 package net.pterodactylus.sone.test
 
+import com.google.inject.Module
 import org.mockito.ArgumentCaptor
 import org.mockito.Mockito
 
 inline fun <reified T : Any> mock(): T = Mockito.mock<T>(T::class.java)!!
 inline fun <reified T : Any> capture(): ArgumentCaptor<T> = ArgumentCaptor.forClass(T::class.java)
+
+inline fun <reified T : Any> bind(implementation: T): Module =
+               Module { it!!.bind(T::class.java).toInstance(implementation) }
+
+inline fun <reified T : Any> bindMock(): Module =
+               Module { it!!.bind(T::class.java).toInstance(mock<T>()) }