--- /dev/null
+package net.pterodactylus.sone.template
+
+import net.pterodactylus.sone.data.Album
+import net.pterodactylus.sone.data.Image
+import net.pterodactylus.sone.test.mock
+import net.pterodactylus.sone.test.whenever
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.equalTo
+import org.hamcrest.Matchers.nullValue
+import org.junit.Before
+import org.junit.Test
+
+/**
+ * Unit test for [ImageAccessor].
+ */
+class ImageAccessorTest {
+
+ private val accessor = ImageAccessor()
+ private val album = mock<Album>()
+ private val images = listOf(mock<Image>(), mock<Image>())
+
+ @Before
+ fun setupImages() {
+ whenever(album.images).thenReturn(images)
+ images.forEach {
+ whenever(it.album).thenReturn(album)
+ }
+ }
+
+ @Test
+ fun `accessor returns next image for first image`() {
+ assertThat(accessor.get(null, images[0], "next"), equalTo<Any>(images[1]))
+ }
+
+ @Test
+ fun `accessor returns null for next image of second image`() {
+ assertThat(accessor.get(null, images[1], "next"), nullValue())
+ }
+
+ @Test
+ fun `accessor returns previous image for second image`() {
+ assertThat(accessor.get(null, images[1], "previous"), equalTo<Any>(images[0]))
+ }
+
+ @Test
+ fun `accessor returns null for previous image of first image`() {
+ assertThat(accessor.get(null, images[0], "previous"), nullValue())
+ }
+
+ @Test
+ fun `accessor uses reflection accessor for all other members`() {
+ assertThat(accessor.get(null, images[0], "hashCode"), equalTo<Any>(images[0].hashCode()))
+ }
+
+}