@ -6,6 +6,7 @@ package org.mozilla.fenix.tabstray
import android.content.res.Configuration
import android.util.DisplayMetrics
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_COLLAPSED
@ -14,18 +15,18 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDE
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_SETTLING
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
import io.mockk.Called
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
import io.mockk.slot
import io.mockk.spyk
import io.mockk.unmockkStatic
import io.mockk.verify
import mozilla.components.support.ktx.android.util.dpToPx
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assert Same
import org.junit.Assert.assert Null
import org.junit.Assert.assertTrue
import org.junit.Test
@ -34,7 +35,7 @@ class TabSheetBehaviorManagerTest {
@Test
fun `WHEN state is hidden THEN invoke interactor` ( ) {
val interactor = mockk < NavigationInteractor > ( relaxed = true )
val callback = TraySheetBehaviorCallback ( mockk ( ) , interactor )
val callback = TraySheetBehaviorCallback ( mockk ( ) , interactor , mockk ( ) , mockk ( ) )
callback . onStateChanged ( mockk ( ) , STATE _HIDDEN )
@ -44,7 +45,7 @@ class TabSheetBehaviorManagerTest {
@Test
fun `WHEN state is half-expanded THEN close the tray` ( ) {
val behavior = mockk < BottomSheetBehavior < ConstraintLayout > > ( relaxed = true )
val callback = TraySheetBehaviorCallback ( behavior , mockk ( ) )
val callback = TraySheetBehaviorCallback ( behavior , mockk ( ) , mockk ( ) , mockk ( ) )
callback . onStateChanged ( mockk ( ) , STATE _HALF _EXPANDED )
@ -55,7 +56,7 @@ class TabSheetBehaviorManagerTest {
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 )
val callback = TraySheetBehaviorCallback ( behavior , interactor , mockk ( ) , mockk ( ) )
callback . onStateChanged ( mockk ( ) , STATE _COLLAPSED )
callback . onStateChanged ( mockk ( ) , STATE _DRAGGING )
@ -67,27 +68,359 @@ class TabSheetBehaviorManagerTest {
}
@Test
fun `GIVEN a behavior WHEN TabSheetBehaviorManager is initialized THEN it sets a TraySheetBehaviorCallback on that behavior` ( ) {
val behavior : BottomSheetBehavior < ConstraintLayout > = mockk ( relaxed = true )
val navigationInteractor : NavigationInteractor = mockk ( )
val callbackCaptor = slot < TraySheetBehaviorCallback > ( )
fun `GIVEN converted dim value is more than max dim WHEN onSlide is called THEN it does not set the dialog dim amount` ( ) {
val behavior = mockk < BottomSheetBehavior < ConstraintLayout > > ( relaxed = true )
val tabsTrayDialog = mockk < TabsTrayDialog > ( relaxed = true )
val rootView = mockk < View > ( relaxed = true )
every { rootView . bottom } returns 1000
val fab = mockk < ExtendedFloatingActionButton > ( relaxed = true )
every { fab . rootView } returns rootView
val callback = TraySheetBehaviorCallback ( behavior , mockk ( ) , tabsTrayDialog , fab )
val bottomSheet = mockk < View > ( relaxed = true )
every { bottomSheet . top } returns 300 // (1000 - 300) / 1000 = 0.7
callback . onSlide ( bottomSheet , 1f )
verify ( exactly = 0 ) { tabsTrayDialog . window ?. setDimAmount ( any ( ) ) }
}
@Test
fun `GIVEN converted dim value is at max dim WHEN onSlide is called THEN it does not set the dialog dim amount` ( ) {
val behavior = mockk < BottomSheetBehavior < ConstraintLayout > > ( relaxed = true )
val tabsTrayDialog = mockk < TabsTrayDialog > ( relaxed = true )
val rootView = mockk < View > ( relaxed = true )
every { rootView . bottom } returns 1000
val fab = mockk < ExtendedFloatingActionButton > ( relaxed = true )
every { fab . rootView } returns rootView
val callback = TraySheetBehaviorCallback ( behavior , mockk ( ) , tabsTrayDialog , fab )
val bottomSheet = mockk < View > ( relaxed = true )
every { bottomSheet . top } returns 400 // (1000 - 400) / 1000 = 0.6
callback . onSlide ( bottomSheet , 1f )
verify ( exactly = 0 ) { tabsTrayDialog . window ?. setDimAmount ( any ( ) ) }
}
@Test
fun `GIVEN converted dim value is less than max dim WHEN onSlide is called THEN it sets the dialog dim amount` ( ) {
val behavior = mockk < BottomSheetBehavior < ConstraintLayout > > ( relaxed = true )
val tabsTrayDialog = mockk < TabsTrayDialog > ( relaxed = true )
val rootView = mockk < View > ( relaxed = true )
every { rootView . bottom } returns 1000
val fab = mockk < ExtendedFloatingActionButton > ( relaxed = true )
every { fab . rootView } returns rootView
val callback = TraySheetBehaviorCallback ( behavior , mockk ( ) , tabsTrayDialog , fab )
val bottomSheet = mockk < View > ( relaxed = true )
every { bottomSheet . top } returns 500 // (1000 - 500) / 1000 = 0.5
callback . onSlide ( bottomSheet , 1f )
verify ( exactly = 1 ) { tabsTrayDialog . window ?. setDimAmount ( any ( ) ) }
}
@Test
fun `GIVEN behaviour state is 'dragging' & draggedLowestSheetTop is null WHEN onSlide is called THEN draggedLowestSheetTop is set to currentBottomSheetTop` ( ) {
val behavior = mockk < BottomSheetBehavior < ConstraintLayout > > ( relaxed = true )
every { behavior . state } returns STATE _DRAGGING
val tabsTrayDialog = mockk < TabsTrayDialog > ( relaxed = true )
val rootView = mockk < View > ( relaxed = true )
every { rootView . bottom } returns 1000
val fab = mockk < ExtendedFloatingActionButton > ( relaxed = true )
every { fab . rootView } returns rootView
every { fab . top } returns 900
val callback = TraySheetBehaviorCallback ( behavior , mockk ( ) , tabsTrayDialog , fab )
val bottomSheetTop = 10
// draggedLowestSheetTop is null
val bottomSheet = mockk < View > ( relaxed = true )
every { bottomSheet . top } returns bottomSheetTop
callback . onSlide ( bottomSheet , 1f )
verify { fab . y = 900f }
assertEquals ( bottomSheetTop , callback . draggedLowestSheetTop )
}
@Test
fun `GIVEN behaviour state is 'dragging' & currentBottomSheetTop is same as draggedLowestSheetTop WHEN onSlide is called THEN draggedLowestSheetTop is same value` ( ) {
val behavior = mockk < BottomSheetBehavior < ConstraintLayout > > ( relaxed = true )
every { behavior . state } returns STATE _DRAGGING
val tabsTrayDialog = mockk < TabsTrayDialog > ( relaxed = true )
val rootView = mockk < View > ( relaxed = true )
every { rootView . bottom } returns 1000
val fab = mockk < ExtendedFloatingActionButton > ( relaxed = true )
every { fab . rootView } returns rootView
every { fab . top } returns 900
val callback = TraySheetBehaviorCallback ( behavior , mockk ( ) , tabsTrayDialog , fab )
val bottomSheetTop = 10
// draggedLowestSheetTop is null
val bottomSheet1 = mockk < View > ( relaxed = true )
every { bottomSheet1 . top } returns bottomSheetTop
callback . onSlide ( bottomSheet1 , 1f )
verify { fab . y = 900f }
// currentBottomSheetTop is same as draggedLowestSheetTop
val bottomSheet2 = mockk < View > ( relaxed = true )
every { bottomSheet2 . top } returns bottomSheetTop
callback . onSlide ( bottomSheet2 , 1f )
verify { fab . y = 900f }
assertEquals ( bottomSheetTop , callback . draggedLowestSheetTop )
}
@Test
fun `GIVEN behaviour state is 'dragging' & currentBottomSheetTop is more than draggedLowestSheetTop WHEN onSlide is called THEN draggedLowestSheetTop is same value` ( ) {
val behavior = mockk < BottomSheetBehavior < ConstraintLayout > > ( relaxed = true )
every { behavior . state } returns STATE _DRAGGING
val tabsTrayDialog = mockk < TabsTrayDialog > ( relaxed = true )
val rootView = mockk < View > ( relaxed = true )
every { rootView . bottom } returns 1000
val fab = mockk < ExtendedFloatingActionButton > ( relaxed = true )
every { fab . rootView } returns rootView
every { fab . top } returns 900
val callback = TraySheetBehaviorCallback ( behavior , mockk ( ) , tabsTrayDialog , fab )
val originalBottomSheetTop = 10
// draggedLowestSheetTop is null
val bottomSheet1 = mockk < View > ( relaxed = true )
every { bottomSheet1 . top } returns originalBottomSheetTop
callback . onSlide ( bottomSheet1 , 1f )
verify { fab . y = 900f }
// currentBottomSheetTop is same as draggedLowestSheetTop
val newBottomSheetTop = originalBottomSheetTop + 1
val bottomSheet2 = mockk < View > ( relaxed = true )
every { bottomSheet2 . top } returns newBottomSheetTop
callback . onSlide ( bottomSheet2 , 1f )
verify { fab . y = 901f }
assertEquals ( originalBottomSheetTop , callback . draggedLowestSheetTop )
}
@Test
fun `GIVEN behaviour state is 'dragging' & currentBottomSheetTop less than draggedLowestSheetTop WHEN onSlide is called THEN draggedLowestSheetTop is set to currentBottomSheetTop` ( ) {
val behavior = mockk < BottomSheetBehavior < ConstraintLayout > > ( relaxed = true )
every { behavior . state } returns STATE _DRAGGING
val tabsTrayDialog = mockk < TabsTrayDialog > ( relaxed = true )
val rootView = mockk < View > ( relaxed = true )
every { rootView . bottom } returns 1000
val fab = mockk < ExtendedFloatingActionButton > ( relaxed = true )
every { fab . rootView } returns rootView
every { fab . top } returns 900
val callback = TraySheetBehaviorCallback ( behavior , mockk ( ) , tabsTrayDialog , fab )
// draggedLowestSheetTop is null
val bottomSheet1 = mockk < View > ( relaxed = true )
every { bottomSheet1 . top } returns 10
callback . onSlide ( bottomSheet1 , 1f )
verify { fab . y = 900f }
// currentBottomSheetTop is less than draggedLowestSheetTop
val newBottomSheetTop = 9
val bottomSheet2 = mockk < View > ( relaxed = true )
every { bottomSheet2 . top } returns newBottomSheetTop
callback . onSlide ( bottomSheet2 , 1f )
verify { fab . y = 900f }
assertEquals ( newBottomSheetTop , callback . draggedLowestSheetTop )
}
@Test
fun `GIVEN behaviour state is 'settling' & draggedLowestSheetTop is null WHEN onSlide is called THEN draggedLowestSheetTop is set to fab y is set` ( ) {
val behavior = mockk < BottomSheetBehavior < ConstraintLayout > > ( relaxed = true )
every { behavior . state } returns STATE _SETTLING
val tabsTrayDialog = mockk < TabsTrayDialog > ( relaxed = true )
val rootView = mockk < View > ( relaxed = true )
every { rootView . bottom } returns 1000
val fab = mockk < ExtendedFloatingActionButton > ( relaxed = true )
every { fab . rootView } returns rootView
every { fab . top } returns 900
val callback = TraySheetBehaviorCallback ( behavior , mockk ( ) , tabsTrayDialog , fab )
// draggedLowestSheetTop is null
val bottomSheet = mockk < View > ( relaxed = true )
every { bottomSheet . top } returns 10
callback . onSlide ( bottomSheet , 1f )
verify { fab . y = 900f }
assertNull ( callback . draggedLowestSheetTop )
}
@Test
fun `GIVEN behaviour state is 'settling' & currentBottomSheetTop is same as draggedLowestSheetTop WHEN onSlide is called THEN fab y is set` ( ) {
val behavior = mockk < BottomSheetBehavior < ConstraintLayout > > ( relaxed = true )
every { behavior . state } returns STATE _SETTLING
val tabsTrayDialog = mockk < TabsTrayDialog > ( relaxed = true )
val rootView = mockk < View > ( relaxed = true )
every { rootView . bottom } returns 1000
val fab = mockk < ExtendedFloatingActionButton > ( relaxed = true )
every { fab . rootView } returns rootView
every { fab . top } returns 900
val callback = TraySheetBehaviorCallback ( behavior , mockk ( ) , tabsTrayDialog , fab )
val bottomSheetTop = 10
// draggedLowestSheetTop is null
val bottomSheet1 = mockk < View > ( relaxed = true )
every { bottomSheet1 . top } returns bottomSheetTop
callback . onSlide ( bottomSheet1 , 1f )
verify { fab . y = 900f }
// currentBottomSheetTop is same as draggedLowestSheetTop
val bottomSheet2 = mockk < View > ( relaxed = true )
every { bottomSheet2 . top } returns bottomSheetTop
callback . onSlide ( bottomSheet2 , 1f )
verify { fab . y = 900f }
assertNull ( callback . draggedLowestSheetTop )
}
@Test
fun `GIVEN behaviour state is 'settling' & currentBottomSheetTop is more than draggedLowestSheetTop WHEN onSlide is called THEN fab y is set` ( ) {
val behavior = mockk < BottomSheetBehavior < ConstraintLayout > > ( relaxed = true )
every { behavior . state } returns STATE _SETTLING
val tabsTrayDialog = mockk < TabsTrayDialog > ( relaxed = true )
val rootView = mockk < View > ( relaxed = true )
every { rootView . bottom } returns 1000
val fab = mockk < ExtendedFloatingActionButton > ( relaxed = true )
every { fab . rootView } returns rootView
every { fab . top } returns 900
val callback = TraySheetBehaviorCallback ( behavior , mockk ( ) , tabsTrayDialog , fab )
// draggedLowestSheetTop is null
val bottomSheet1 = mockk < View > ( relaxed = true )
every { bottomSheet1 . top } returns 10
callback . onSlide ( bottomSheet1 , 1f )
verify { fab . y = 900f }
// currentBottomSheetTop is same as draggedLowestSheetTop
val bottomSheet2 = mockk < View > ( relaxed = true )
every { bottomSheet2 . top } returns 11
callback . onSlide ( bottomSheet2 , 1f )
verify { fab . y = 900f }
assertNull ( callback . draggedLowestSheetTop )
}
@Test
fun `GIVEN behaviour state is 'settling' & currentBottomSheetTop less than draggedLowestSheetTop WHEN onSlide is called THEN fab y is set` ( ) {
val behavior = mockk < BottomSheetBehavior < ConstraintLayout > > ( relaxed = true )
every { behavior . state } returns STATE _SETTLING
val tabsTrayDialog = mockk < TabsTrayDialog > ( relaxed = true )
val rootView = mockk < View > ( relaxed = true )
every { rootView . bottom } returns 1000
val fab = mockk < ExtendedFloatingActionButton > ( relaxed = true )
every { fab . rootView } returns rootView
every { fab . top } returns 900
val callback = TraySheetBehaviorCallback ( behavior , mockk ( ) , tabsTrayDialog , fab )
// draggedLowestSheetTop is null
val bottomSheet1 = mockk < View > ( relaxed = true )
every { bottomSheet1 . top } returns 10
callback . onSlide ( bottomSheet1 , 1f )
verify { fab . y = 900f }
// currentBottomSheetTop is less than draggedLowestSheetTop
val bottomSheet2 = mockk < View > ( relaxed = true )
every { bottomSheet2 . top } returns 9
callback . onSlide ( bottomSheet2 , 1f )
verify { fab . y = 900f }
assertNull ( callback . draggedLowestSheetTop )
}
@Test
fun `GIVEN behaviour state is 'state expanded' WHEN onStateChanged is called THEN draggedLowestSheetTop is set to null` ( ) {
val bottomSheet = mockk < View > ( relaxed = true )
val callback = TraySheetBehaviorCallback ( mockk ( ) , mockk ( ) , mockk ( ) , mockk ( ) )
callback . draggedLowestSheetTop = 1
assertEquals ( 1 , callback . draggedLowestSheetTop )
callback . onStateChanged ( bottomSheet , STATE _EXPANDED )
assertNull ( callback . draggedLowestSheetTop )
}
@Test
fun `GIVEN behaviour state is 'state collapsed' WHEN onStateChanged is called THEN draggedLowestSheetTop is set to null` ( ) {
val bottomSheet = mockk < View > ( relaxed = true )
val callback = TraySheetBehaviorCallback ( mockk ( ) , mockk ( ) , mockk ( ) , mockk ( ) )
callback . draggedLowestSheetTop = 1
assertEquals ( 1 , callback . draggedLowestSheetTop )
TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _UNDEFINED , 2 , 2 , navigationInteractor , mockk ( ) )
callback. onStateChanged ( bottomSheet , STATE _COLLAPSED )
verify { behavior . addBottomSheetCallback ( capture ( callbackCaptor ) ) }
assertSame ( behavior , callbackCaptor . captured . behavior )
assertSame ( navigationInteractor , callbackCaptor . captured . trayInteractor )
assertNull ( callback . draggedLowestSheetTop )
}
@Test
fun `WHEN TabSheetBehaviorManager is initialized THEN it caches the orientation parameter value` ( ) {
val manager0 = TabSheetBehaviorManager ( mockk ( relaxed = true ) , Configuration . ORIENTATION _UNDEFINED , 5 , 4 , mockk ( ) , mockk ( ) )
val manager0 = TabSheetBehaviorManager (
mockk ( relaxed = true ) ,
Configuration . ORIENTATION _UNDEFINED ,
5 ,
4 ,
mockk ( ) ,
)
assertEquals ( Configuration . ORIENTATION _UNDEFINED , manager0 . currentOrientation )
val manager1 = TabSheetBehaviorManager ( mockk ( relaxed = true ) , Configuration . ORIENTATION _PORTRAIT , 5 , 4 , mockk ( relaxed = true ) , mockk ( ) )
val manager1 = TabSheetBehaviorManager (
mockk ( relaxed = true ) ,
Configuration . ORIENTATION _PORTRAIT ,
5 ,
4 ,
mockk ( ) ,
)
assertEquals ( Configuration . ORIENTATION _PORTRAIT , manager1 . currentOrientation )
val manager2 = TabSheetBehaviorManager ( mockk ( relaxed = true ) , Configuration . ORIENTATION _LANDSCAPE , 5 , 4 , mockk ( ) , mockk ( ) )
val manager2 = TabSheetBehaviorManager (
mockk ( relaxed = true ) ,
Configuration . ORIENTATION _LANDSCAPE ,
5 ,
4 ,
mockk ( ) ,
)
assertEquals ( Configuration . ORIENTATION _LANDSCAPE , manager2 . currentOrientation )
}
@ -95,7 +428,13 @@ class TabSheetBehaviorManagerTest {
fun `GIVEN more tabs opened than the expanding limit and portrait orientation WHEN TabSheetBehaviorManager is initialized THEN the behavior is set as expanded` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _PORTRAIT , 5 , 4 , mockk ( ) , mockk ( ) )
TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _PORTRAIT ,
5 ,
4 ,
mockk ( ) ,
)
assertEquals ( STATE _EXPANDED , behavior . state )
}
@ -104,7 +443,13 @@ class TabSheetBehaviorManagerTest {
fun `GIVEN the number of tabs opened is exactly the expanding limit and portrait orientation WHEN TabSheetBehaviorManager is initialized THEN the behavior is set as expanded` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _PORTRAIT , 5 , 5 , mockk ( ) , mockk ( ) )
TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _PORTRAIT ,
5 ,
5 ,
mockk ( ) ,
)
assertEquals ( STATE _EXPANDED , behavior . state )
}
@ -113,7 +458,13 @@ class TabSheetBehaviorManagerTest {
fun `GIVEN fewer tabs opened than the expanding limit and portrait orientation WHEN TabSheetBehaviorManager is initialized THEN the behavior is set as collapsed` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _PORTRAIT , 4 , 5 , mockk ( ) , mockk ( ) )
TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _PORTRAIT ,
4 ,
5 ,
mockk ( ) ,
)
assertEquals ( STATE _COLLAPSED , behavior . state )
}
@ -122,7 +473,13 @@ class TabSheetBehaviorManagerTest {
fun `GIVEN more tabs opened than the expanding limit and undefined orientation WHEN TabSheetBehaviorManager is initialized THEN the behavior is set as expanded` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _UNDEFINED , 5 , 4 , mockk ( ) , mockk ( ) )
TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _UNDEFINED ,
5 ,
4 ,
mockk ( ) ,
)
assertEquals ( STATE _EXPANDED , behavior . state )
}
@ -131,7 +488,13 @@ class TabSheetBehaviorManagerTest {
fun `GIVEN the number of tabs opened is exactly the expanding limit and undefined orientation WHEN TabSheetBehaviorManager is initialized THEN the behavior is set as expanded` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _UNDEFINED , 5 , 5 , mockk ( ) , mockk ( ) )
TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _UNDEFINED ,
5 ,
5 ,
mockk ( ) ,
)
assertEquals ( STATE _EXPANDED , behavior . state )
}
@ -140,7 +503,13 @@ class TabSheetBehaviorManagerTest {
fun `GIVEN fewer tabs opened than the expanding limit and undefined orientation WHEN TabSheetBehaviorManager is initialized THEN the behavior is set as collapsed` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _UNDEFINED , 4 , 5 , mockk ( ) , mockk ( ) )
TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _UNDEFINED ,
4 ,
5 ,
mockk ( ) ,
)
assertEquals ( STATE _COLLAPSED , behavior . state )
}
@ -149,7 +518,13 @@ class TabSheetBehaviorManagerTest {
fun `GIVEN more tabs opened than the expanding limit and landscape orientation WHEN TabSheetBehaviorManager is initialized THEN the behavior is set as expanded` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _LANDSCAPE , 5 , 4 , mockk ( ) , mockk ( ) )
TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _LANDSCAPE ,
5 ,
4 ,
mockk ( ) ,
)
assertEquals ( STATE _EXPANDED , behavior . state )
}
@ -158,7 +533,13 @@ class TabSheetBehaviorManagerTest {
fun `GIVEN the number of tabs opened is exactly the expanding limit and landscape orientation WHEN TabSheetBehaviorManager is initialized THEN the behavior is set as expanded` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _LANDSCAPE , 5 , 5 , mockk ( ) , mockk ( ) )
TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _LANDSCAPE ,
5 ,
5 ,
mockk ( ) ,
)
assertEquals ( STATE _EXPANDED , behavior . state )
}
@ -167,7 +548,13 @@ class TabSheetBehaviorManagerTest {
fun `GIVEN fewer tabs opened than the expanding limit and landscape orientation WHEN TabSheetBehaviorManager is initialized THEN the behavior is set as expanded` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _LANDSCAPE , 4 , 5 , mockk ( ) , mockk ( ) )
TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _LANDSCAPE ,
4 ,
5 ,
mockk ( ) ,
)
assertEquals ( STATE _EXPANDED , behavior . state )
}
@ -175,7 +562,13 @@ class TabSheetBehaviorManagerTest {
@Test
fun `GIVEN more tabs opened than the expanding limit and not landscape orientation WHEN updateBehaviorState is called THEN the behavior is set as expanded` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
val manager = TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _UNDEFINED , 5 , 4 , mockk ( ) , mockk ( ) )
val manager = TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _UNDEFINED ,
5 ,
4 ,
mockk ( ) ,
)
manager . updateBehaviorState ( false )
@ -185,7 +578,13 @@ class TabSheetBehaviorManagerTest {
@Test
fun `GIVEN the number of tabs opened is exactly the expanding limit and portrait orientation WHEN updateBehaviorState is called THEN the behavior is set as expanded` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
val manager = TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _UNDEFINED , 5 , 5 , mockk ( ) , mockk ( ) )
val manager = TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _UNDEFINED ,
5 ,
5 ,
mockk ( ) ,
)
manager . updateBehaviorState ( false )
@ -195,7 +594,13 @@ class TabSheetBehaviorManagerTest {
@Test
fun `GIVEN fewer tabs opened than the expanding limit and portrait orientation WHEN updateBehaviorState is called THEN the behavior is set as collapsed` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
val manager = TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _UNDEFINED , 4 , 5 , mockk ( ) , mockk ( ) )
val manager = TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _UNDEFINED ,
4 ,
5 ,
mockk ( ) ,
)
manager . updateBehaviorState ( false )
@ -205,7 +610,13 @@ class TabSheetBehaviorManagerTest {
@Test
fun `GIVEN more tabs opened than the expanding limit and landscape orientation WHEN updateBehaviorState is called THEN the behavior is set as expanded` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
val manager = TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _UNDEFINED , 5 , 4 , mockk ( ) , mockk ( ) )
val manager = TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _UNDEFINED ,
5 ,
4 ,
mockk ( ) ,
)
manager . updateBehaviorState ( true )
@ -215,7 +626,13 @@ class TabSheetBehaviorManagerTest {
@Test
fun `GIVEN the number of tabs opened is exactly the expanding limit and landscape orientation WHEN updateBehaviorState is called THEN the behavior is set as expanded` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
val manager = TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _UNDEFINED , 5 , 5 , mockk ( ) , mockk ( ) )
val manager = TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _UNDEFINED ,
5 ,
5 ,
mockk ( ) ,
)
manager . updateBehaviorState ( true )
@ -225,7 +642,13 @@ class TabSheetBehaviorManagerTest {
@Test
fun `GIVEN fewer tabs opened than the expanding limit and landscape orientation WHEN updateBehaviorState is called THEN the behavior is set as expanded` ( ) {
val behavior = BottomSheetBehavior < ConstraintLayout > ( )
val manager = TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _UNDEFINED , 4 , 5 , mockk ( ) , mockk ( ) )
val manager = TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _UNDEFINED ,
4 ,
5 ,
mockk ( ) ,
)
manager . updateBehaviorState ( true )
@ -234,7 +657,15 @@ class TabSheetBehaviorManagerTest {
@Test
fun `WHEN updateDependingOnOrientation is called with the same orientation as the current one THEN nothing happens` ( ) {
val manager = spyk ( TabSheetBehaviorManager ( mockk ( relaxed = true ) , Configuration . ORIENTATION _PORTRAIT , 4 , 5 , mockk ( ) , mockk ( ) ) )
val manager = spyk (
TabSheetBehaviorManager (
mockk ( relaxed = true ) ,
Configuration . ORIENTATION _PORTRAIT ,
4 ,
5 ,
mockk ( ) ,
) ,
)
manager . updateDependingOnOrientation ( Configuration . ORIENTATION _PORTRAIT )
@ -245,7 +676,15 @@ class TabSheetBehaviorManagerTest {
@Test
fun `WHEN updateDependingOnOrientation is called with a new orientation THEN this is cached and updateBehaviorState is called` ( ) {
val manager = spyk ( TabSheetBehaviorManager ( mockk ( relaxed = true ) , Configuration . ORIENTATION _PORTRAIT , 4 , 5 , mockk ( ) , mockk ( ) ) )
val manager = spyk (
TabSheetBehaviorManager (
mockk ( relaxed = true ) ,
Configuration . ORIENTATION _PORTRAIT ,
4 ,
5 ,
mockk ( ) ,
) ,
)
manager . updateDependingOnOrientation ( Configuration . ORIENTATION _UNDEFINED )
assertEquals ( Configuration . ORIENTATION _UNDEFINED , manager . currentOrientation )
@ -260,21 +699,45 @@ class TabSheetBehaviorManagerTest {
@Test
fun `WHEN isLandscape is called with Configuration#ORIENTATION_LANDSCAPE THEN it returns true` ( ) {
val manager = spyk ( TabSheetBehaviorManager ( mockk ( relaxed = true ) , Configuration . ORIENTATION _PORTRAIT , 4 , 5 , mockk ( ) , mockk ( ) ) )
val manager = spyk (
TabSheetBehaviorManager (
mockk ( relaxed = true ) ,
Configuration . ORIENTATION _PORTRAIT ,
4 ,
5 ,
mockk ( ) ,
) ,
)
assertTrue ( manager . isLandscape ( Configuration . ORIENTATION _LANDSCAPE ) )
}
@Test
fun `WHEN isLandscape is called with Configuration#ORIENTATION_PORTRAIT THEN it returns false` ( ) {
val manager = spyk ( TabSheetBehaviorManager ( mockk ( relaxed = true ) , Configuration . ORIENTATION _PORTRAIT , 4 , 5 , mockk ( ) , mockk ( ) ) )
val manager = spyk (
TabSheetBehaviorManager (
mockk ( relaxed = true ) ,
Configuration . ORIENTATION _PORTRAIT ,
4 ,
5 ,
mockk ( ) ,
) ,
)
assertFalse ( manager . isLandscape ( Configuration . ORIENTATION _PORTRAIT ) )
}
@Test
fun `WHEN isLandscape is called with Configuration#ORIENTATION_UNDEFINED THEN it returns false` ( ) {
val manager = spyk ( TabSheetBehaviorManager ( mockk ( relaxed = true ) , Configuration . ORIENTATION _PORTRAIT , 4 , 5 , mockk ( ) , mockk ( ) ) )
val manager = spyk (
TabSheetBehaviorManager (
mockk ( relaxed = true ) ,
Configuration . ORIENTATION _PORTRAIT ,
4 ,
5 ,
mockk ( ) ,
) ,
)
assertFalse ( manager . isLandscape ( Configuration . ORIENTATION _UNDEFINED ) )
}
@ -290,7 +753,13 @@ class TabSheetBehaviorManagerTest {
mockkStatic ( " mozilla.components.support.ktx.android.util.DisplayMetricsKt " )
every { EXPANDED_OFFSET_IN_LANDSCAPE_DP . dpToPx ( displayMetrics ) } returns EXPANDED _OFFSET _IN _LANDSCAPE _DP
TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _LANDSCAPE , 5 , 4 , mockk ( ) , displayMetrics )
TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _LANDSCAPE ,
5 ,
4 ,
displayMetrics ,
)
} finally {
unmockkStatic ( " mozilla.components.support.ktx.android.util.DisplayMetricsKt " )
}
@ -309,7 +778,13 @@ class TabSheetBehaviorManagerTest {
mockkStatic ( " mozilla.components.support.ktx.android.util.DisplayMetricsKt " )
every { EXPANDED_OFFSET_IN_PORTRAIT_DP . dpToPx ( displayMetrics ) } returns EXPANDED _OFFSET _IN _PORTRAIT _DP
TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _PORTRAIT , 5 , 4 , mockk ( ) , displayMetrics )
TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _PORTRAIT ,
5 ,
4 ,
displayMetrics ,
)
} finally {
unmockkStatic ( " mozilla.components.support.ktx.android.util.DisplayMetricsKt " )
}
@ -328,7 +803,13 @@ class TabSheetBehaviorManagerTest {
mockkStatic ( " mozilla.components.support.ktx.android.util.DisplayMetricsKt " )
every { EXPANDED_OFFSET_IN_PORTRAIT_DP . dpToPx ( displayMetrics ) } returns EXPANDED _OFFSET _IN _PORTRAIT _DP
TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _UNDEFINED , 5 , 4 , mockk ( ) , displayMetrics )
TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _UNDEFINED ,
5 ,
4 ,
displayMetrics ,
)
} finally {
unmockkStatic ( " mozilla.components.support.ktx.android.util.DisplayMetricsKt " )
}
@ -346,7 +827,13 @@ class TabSheetBehaviorManagerTest {
try {
mockkStatic ( " mozilla.components.support.ktx.android.util.DisplayMetricsKt " )
every { EXPANDED_OFFSET_IN_PORTRAIT_DP . dpToPx ( displayMetrics ) } returns EXPANDED _OFFSET _IN _PORTRAIT _DP
val manager = TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _LANDSCAPE , 5 , 4 , mockk ( ) , displayMetrics )
val manager = TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _LANDSCAPE ,
5 ,
4 ,
displayMetrics ,
)
manager . updateDependingOnOrientation ( Configuration . ORIENTATION _PORTRAIT )
} finally {
@ -366,7 +853,13 @@ class TabSheetBehaviorManagerTest {
try {
mockkStatic ( " mozilla.components.support.ktx.android.util.DisplayMetricsKt " )
every { EXPANDED_OFFSET_IN_PORTRAIT_DP . dpToPx ( displayMetrics ) } returns EXPANDED _OFFSET _IN _PORTRAIT _DP
val manager = TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _LANDSCAPE , 5 , 4 , mockk ( ) , displayMetrics )
val manager = TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _LANDSCAPE ,
5 ,
4 ,
displayMetrics ,
)
manager . updateDependingOnOrientation ( Configuration . ORIENTATION _UNDEFINED )
} finally {
@ -386,7 +879,13 @@ class TabSheetBehaviorManagerTest {
try {
mockkStatic ( " mozilla.components.support.ktx.android.util.DisplayMetricsKt " )
every { EXPANDED_OFFSET_IN_LANDSCAPE_DP . dpToPx ( displayMetrics ) } returns EXPANDED _OFFSET _IN _LANDSCAPE _DP
val manager = TabSheetBehaviorManager ( behavior , Configuration . ORIENTATION _UNDEFINED , 5 , 4 , mockk ( ) , displayMetrics )
val manager = TabSheetBehaviorManager (
behavior ,
Configuration . ORIENTATION _UNDEFINED ,
5 ,
4 ,
displayMetrics ,
)
manager . updateDependingOnOrientation ( Configuration . ORIENTATION _LANDSCAPE )
} finally {