You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.5 KiB
Kotlin
94 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.tabstray
|
|
|
|
import androidx.constraintlayout.widget.ConstraintLayout
|
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
|
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_HALF_EXPANDED
|
|
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_HIDDEN
|
|
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_COLLAPSED
|
|
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_DRAGGING
|
|
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_SETTLING
|
|
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED
|
|
import io.mockk.Called
|
|
import io.mockk.mockk
|
|
import io.mockk.spyk
|
|
import io.mockk.verify
|
|
import org.junit.Test
|
|
|
|
class TraySheetBehaviorCallbackTest {
|
|
|
|
@Test
|
|
fun `WHEN state is hidden THEN invoke interactor`() {
|
|
val interactor = mockk<NavigationInteractor>(relaxed = true)
|
|
val callback = TraySheetBehaviorCallback(mockk(), interactor)
|
|
|
|
callback.onStateChanged(mockk(), STATE_HIDDEN)
|
|
|
|
verify { interactor.onTabTrayDismissed() }
|
|
}
|
|
|
|
@Test
|
|
fun `WHEN state is half-expanded THEN close the tray`() {
|
|
val behavior = mockk<BottomSheetBehavior<ConstraintLayout>>(relaxed = true)
|
|
val callback = TraySheetBehaviorCallback(behavior, mockk())
|
|
|
|
callback.onStateChanged(mockk(), STATE_HALF_EXPANDED)
|
|
|
|
verify { behavior.state = STATE_HIDDEN }
|
|
}
|
|
|
|
@Test
|
|
fun `WHEN other states are invoked THEN do nothing`() {
|
|
val behavior = mockk<BottomSheetBehavior<ConstraintLayout>>(relaxed = true)
|
|
val interactor = mockk<NavigationInteractor>(relaxed = true)
|
|
val callback = TraySheetBehaviorCallback(behavior, interactor)
|
|
|
|
callback.onStateChanged(mockk(), STATE_COLLAPSED)
|
|
callback.onStateChanged(mockk(), STATE_DRAGGING)
|
|
callback.onStateChanged(mockk(), STATE_SETTLING)
|
|
callback.onStateChanged(mockk(), STATE_EXPANDED)
|
|
|
|
verify { behavior wasNot Called }
|
|
verify { interactor wasNot Called }
|
|
}
|
|
|
|
@Test
|
|
fun `GIVEN portraitMode and 5 tabs WHEN setUpTrayBehavior THEN add TraySheetBehaviorCallback and STATE_COLLAPSED`() {
|
|
// given
|
|
val behavior = spyk(BottomSheetBehavior<ConstraintLayout>())
|
|
val interactor = mockk<DefaultNavigationInteractor>(relaxed = true)
|
|
|
|
// when
|
|
behavior.setUpTrayBehavior(
|
|
isLandscape = false,
|
|
maxNumberOfTabs = 5,
|
|
numberForExpandingTray = TabsTrayFragment.EXPAND_AT_LIST_SIZE,
|
|
navigationInteractor = interactor
|
|
)
|
|
|
|
// then
|
|
assert(behavior.state == STATE_EXPANDED)
|
|
}
|
|
|
|
@Test
|
|
fun `GIVEN portraitMode and 2 tabs WHEN setUpTrayBehavior THEN add TraySheetBehaviorCallback and STATE_COLLAPSED`() {
|
|
// given
|
|
val behavior = spyk(BottomSheetBehavior<ConstraintLayout>())
|
|
val interactor = mockk<DefaultNavigationInteractor>(relaxed = true)
|
|
|
|
// when
|
|
behavior.setUpTrayBehavior(
|
|
isLandscape = false,
|
|
maxNumberOfTabs = 2,
|
|
numberForExpandingTray = TabsTrayFragment.EXPAND_AT_LIST_SIZE,
|
|
navigationInteractor = interactor
|
|
)
|
|
|
|
// then
|
|
assert(behavior.state == STATE_COLLAPSED)
|
|
}
|
|
}
|