115 lines
3.5 KiB
Kotlin
115 lines
3.5 KiB
Kotlin
/* 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.content.Context
|
|
import android.widget.FrameLayout
|
|
import androidx.appcompat.view.ContextThemeWrapper
|
|
import io.mockk.MockKAnnotations
|
|
import io.mockk.every
|
|
import io.mockk.impl.annotations.MockK
|
|
import io.mockk.mockk
|
|
import io.mockk.spyk
|
|
import io.mockk.verify
|
|
import mozilla.components.browser.icons.BrowserIcons
|
|
import mozilla.components.support.test.robolectric.testContext
|
|
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.ext.components
|
|
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
|
|
|
@RunWith(FenixRobolectricTestRunner::class)
|
|
class TabHistoryAdapterTest {
|
|
|
|
@MockK
|
|
private lateinit var interactor: TabHistoryInteractor
|
|
private lateinit var context: Context
|
|
private lateinit var parent: FrameLayout
|
|
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() {
|
|
MockKAnnotations.init(this)
|
|
context = ContextThemeWrapper(testContext, R.style.NormalTheme)
|
|
parent = FrameLayout(context)
|
|
adapter = TabHistoryAdapter(interactor)
|
|
}
|
|
|
|
@Test
|
|
fun `creates and binds view holder`() {
|
|
every { testContext.components.core.icons } returns BrowserIcons(testContext, mockk(relaxed = true))
|
|
adapter.submitList(listOf(selectedItem, unselectedItem))
|
|
|
|
val holder = spyk(adapter.createViewHolder(parent, 0))
|
|
|
|
adapter.bindViewHolder(holder, 0)
|
|
verify { holder.bind(selectedItem) }
|
|
|
|
adapter.bindViewHolder(holder, 1)
|
|
verify { holder.bind(unselectedItem) }
|
|
}
|
|
|
|
@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,
|
|
),
|
|
)
|
|
}
|
|
}
|