Loading app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryAdapterTest.kt 0 → 100644 +96 −0 Original line number Diff line number Diff line /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.fenix.tabhistory import android.text.Spanned import android.widget.FrameLayout import androidx.appcompat.view.ContextThemeWrapper import androidx.core.text.HtmlCompat import io.mockk.mockk import kotlinx.android.synthetic.main.history_list_item.* import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.R import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) class TabHistoryAdapterTest { private lateinit var parent: FrameLayout private lateinit var interactor: TabHistoryInteractor private lateinit var adapter: TabHistoryAdapter private val selectedItem = TabHistoryItem( title = "Mozilla", url = "https://mozilla.org", index = 0, isSelected = true ) private val unselectedItem = TabHistoryItem( title = "Firefox", url = "https://firefox.com", index = 1, isSelected = false ) @Before fun setup() { parent = FrameLayout(ContextThemeWrapper(testContext, R.style.NormalTheme)) interactor = mockk() adapter = TabHistoryAdapter(interactor) } @Test fun `creates and binds view holder`() { adapter.submitList(listOf(selectedItem, unselectedItem)) val holder = adapter.createViewHolder(parent, 0) adapter.bindViewHolder(holder, 0) val htmlSelected = HtmlCompat.toHtml(holder.history_layout.titleView.text as Spanned, 0) assertTrue(htmlSelected, "<b>Mozilla</b>" in htmlSelected) adapter.bindViewHolder(holder, 1) assertFalse(holder.history_layout.titleView.text is Spanned) assertEquals("Firefox", holder.history_layout.titleView.text) } @Test fun `items are the same if they have matching URLs`() { assertTrue(TabHistoryAdapter.DiffCallback.areItemsTheSame( selectedItem, selectedItem )) assertTrue(TabHistoryAdapter.DiffCallback.areItemsTheSame( unselectedItem, unselectedItem.copy(title = "Waterbug", index = 2, isSelected = true) )) assertFalse(TabHistoryAdapter.DiffCallback.areItemsTheSame( unselectedItem, unselectedItem.copy(url = "https://firefox.com/subpage") )) } @Test fun `equal items have the same contents`() { assertTrue(TabHistoryAdapter.DiffCallback.areContentsTheSame( selectedItem, selectedItem )) assertFalse(TabHistoryAdapter.DiffCallback.areContentsTheSame( selectedItem, selectedItem.copy(title = "Waterbug", index = 2, isSelected = false) )) assertFalse(TabHistoryAdapter.DiffCallback.areContentsTheSame( unselectedItem, selectedItem )) } } app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryControllerTest.kt +8 −6 Original line number Diff line number Diff line Loading @@ -10,19 +10,20 @@ import io.mockk.verify import mozilla.components.browser.session.SessionManager import mozilla.components.feature.session.SessionUseCases import org.junit.Test import org.mozilla.fenix.R class TabHistoryControllerTest { val sessionManager: SessionManager = mockk(relaxed = true) val navController: NavController = mockk(relaxed = true) val sessionUseCases = SessionUseCases(sessionManager) val goToHistoryIndexUseCase = sessionUseCases.goToHistoryIndex val controller = DefaultTabHistoryController( private val sessionManager: SessionManager = mockk(relaxed = true) private val navController: NavController = mockk(relaxed = true) private val sessionUseCases = SessionUseCases(sessionManager) private val goToHistoryIndexUseCase = sessionUseCases.goToHistoryIndex private val controller = DefaultTabHistoryController( navController = navController, goToHistoryIndexUseCase = goToHistoryIndexUseCase ) val currentItem = TabHistoryItem( private val currentItem = TabHistoryItem( index = 0, title = "", url = "", Loading @@ -33,6 +34,7 @@ class TabHistoryControllerTest { fun handleGoToHistoryIndex() { controller.handleGoToHistoryItem(currentItem) verify { navController.popBackStack(R.id.browserFragment, false) } verify { goToHistoryIndexUseCase.invoke(currentItem.index) } } } app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryViewHolderTest.kt 0 → 100644 +62 −0 Original line number Diff line number Diff line package org.mozilla.fenix.tabhistory import android.view.View import io.mockk.CapturingSlot import io.mockk.MockKAnnotations import io.mockk.Runs import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.just import io.mockk.mockk import io.mockk.slot import io.mockk.verify import org.junit.Before import org.junit.Test import org.mozilla.fenix.R import org.mozilla.fenix.library.LibrarySiteItemView class TabHistoryViewHolderTest { @MockK private lateinit var view: View @MockK private lateinit var interactor: TabHistoryViewInteractor @MockK(relaxed = true) private lateinit var siteItemView: LibrarySiteItemView private lateinit var holder: TabHistoryViewHolder private lateinit var onClick: CapturingSlot<View.OnClickListener> @Before fun setup() { MockKAnnotations.init(this) onClick = slot() every { view.setOnClickListener(capture(onClick)) } just Runs every { view.findViewById<LibrarySiteItemView>(R.id.history_layout) } returns siteItemView holder = TabHistoryViewHolder(view, interactor) } @Test fun `calls interactor on click`() { every { interactor.goToHistoryItem(any()) } just Runs val item = mockk<TabHistoryItem>(relaxed = true) holder.bind(item) onClick.captured.onClick(mockk()) verify { interactor.goToHistoryItem(item) } } @Test fun `binds title and url`() { val item = TabHistoryItem( title = "Firefox", url = "https://firefox.com", index = 1, isSelected = false ) holder.bind(item) verify { siteItemView.displayAs(LibrarySiteItemView.ItemType.SITE) } verify { siteItemView.titleView.text = "Firefox" } verify { siteItemView.urlView.text = "https://firefox.com" } verify { siteItemView.loadFavicon("https://firefox.com") } } } Loading
app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryAdapterTest.kt 0 → 100644 +96 −0 Original line number Diff line number Diff line /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.fenix.tabhistory import android.text.Spanned import android.widget.FrameLayout import androidx.appcompat.view.ContextThemeWrapper import androidx.core.text.HtmlCompat import io.mockk.mockk import kotlinx.android.synthetic.main.history_list_item.* import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.R import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) class TabHistoryAdapterTest { private lateinit var parent: FrameLayout private lateinit var interactor: TabHistoryInteractor private lateinit var adapter: TabHistoryAdapter private val selectedItem = TabHistoryItem( title = "Mozilla", url = "https://mozilla.org", index = 0, isSelected = true ) private val unselectedItem = TabHistoryItem( title = "Firefox", url = "https://firefox.com", index = 1, isSelected = false ) @Before fun setup() { parent = FrameLayout(ContextThemeWrapper(testContext, R.style.NormalTheme)) interactor = mockk() adapter = TabHistoryAdapter(interactor) } @Test fun `creates and binds view holder`() { adapter.submitList(listOf(selectedItem, unselectedItem)) val holder = adapter.createViewHolder(parent, 0) adapter.bindViewHolder(holder, 0) val htmlSelected = HtmlCompat.toHtml(holder.history_layout.titleView.text as Spanned, 0) assertTrue(htmlSelected, "<b>Mozilla</b>" in htmlSelected) adapter.bindViewHolder(holder, 1) assertFalse(holder.history_layout.titleView.text is Spanned) assertEquals("Firefox", holder.history_layout.titleView.text) } @Test fun `items are the same if they have matching URLs`() { assertTrue(TabHistoryAdapter.DiffCallback.areItemsTheSame( selectedItem, selectedItem )) assertTrue(TabHistoryAdapter.DiffCallback.areItemsTheSame( unselectedItem, unselectedItem.copy(title = "Waterbug", index = 2, isSelected = true) )) assertFalse(TabHistoryAdapter.DiffCallback.areItemsTheSame( unselectedItem, unselectedItem.copy(url = "https://firefox.com/subpage") )) } @Test fun `equal items have the same contents`() { assertTrue(TabHistoryAdapter.DiffCallback.areContentsTheSame( selectedItem, selectedItem )) assertFalse(TabHistoryAdapter.DiffCallback.areContentsTheSame( selectedItem, selectedItem.copy(title = "Waterbug", index = 2, isSelected = false) )) assertFalse(TabHistoryAdapter.DiffCallback.areContentsTheSame( unselectedItem, selectedItem )) } }
app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryControllerTest.kt +8 −6 Original line number Diff line number Diff line Loading @@ -10,19 +10,20 @@ import io.mockk.verify import mozilla.components.browser.session.SessionManager import mozilla.components.feature.session.SessionUseCases import org.junit.Test import org.mozilla.fenix.R class TabHistoryControllerTest { val sessionManager: SessionManager = mockk(relaxed = true) val navController: NavController = mockk(relaxed = true) val sessionUseCases = SessionUseCases(sessionManager) val goToHistoryIndexUseCase = sessionUseCases.goToHistoryIndex val controller = DefaultTabHistoryController( private val sessionManager: SessionManager = mockk(relaxed = true) private val navController: NavController = mockk(relaxed = true) private val sessionUseCases = SessionUseCases(sessionManager) private val goToHistoryIndexUseCase = sessionUseCases.goToHistoryIndex private val controller = DefaultTabHistoryController( navController = navController, goToHistoryIndexUseCase = goToHistoryIndexUseCase ) val currentItem = TabHistoryItem( private val currentItem = TabHistoryItem( index = 0, title = "", url = "", Loading @@ -33,6 +34,7 @@ class TabHistoryControllerTest { fun handleGoToHistoryIndex() { controller.handleGoToHistoryItem(currentItem) verify { navController.popBackStack(R.id.browserFragment, false) } verify { goToHistoryIndexUseCase.invoke(currentItem.index) } } }
app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryViewHolderTest.kt 0 → 100644 +62 −0 Original line number Diff line number Diff line package org.mozilla.fenix.tabhistory import android.view.View import io.mockk.CapturingSlot import io.mockk.MockKAnnotations import io.mockk.Runs import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.just import io.mockk.mockk import io.mockk.slot import io.mockk.verify import org.junit.Before import org.junit.Test import org.mozilla.fenix.R import org.mozilla.fenix.library.LibrarySiteItemView class TabHistoryViewHolderTest { @MockK private lateinit var view: View @MockK private lateinit var interactor: TabHistoryViewInteractor @MockK(relaxed = true) private lateinit var siteItemView: LibrarySiteItemView private lateinit var holder: TabHistoryViewHolder private lateinit var onClick: CapturingSlot<View.OnClickListener> @Before fun setup() { MockKAnnotations.init(this) onClick = slot() every { view.setOnClickListener(capture(onClick)) } just Runs every { view.findViewById<LibrarySiteItemView>(R.id.history_layout) } returns siteItemView holder = TabHistoryViewHolder(view, interactor) } @Test fun `calls interactor on click`() { every { interactor.goToHistoryItem(any()) } just Runs val item = mockk<TabHistoryItem>(relaxed = true) holder.bind(item) onClick.captured.onClick(mockk()) verify { interactor.goToHistoryItem(item) } } @Test fun `binds title and url`() { val item = TabHistoryItem( title = "Firefox", url = "https://firefox.com", index = 1, isSelected = false ) holder.bind(item) verify { siteItemView.displayAs(LibrarySiteItemView.ItemType.SITE) } verify { siteItemView.titleView.text = "Firefox" } verify { siteItemView.urlView.text = "https://firefox.com" } verify { siteItemView.loadFavicon("https://firefox.com") } } }