Migrate Kotlin tests to use mockito-kotlin2.

Test: atest
Bug: 300509464
Flag: No
Change-Id: I5e0d0f1f29d51cdbfacd51f7229afddf8bd66f7e
This commit is contained in:
Brian Isganitis
2023-10-03 16:02:39 -04:00
parent fe38407873
commit 06139e079c
13 changed files with 239 additions and 354 deletions
@@ -24,11 +24,11 @@ import com.android.quickstep.fallback.RecentsState
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
import org.mockito.Mock
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.mock
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
@RunWith(AndroidJUnit4::class)
class FallbackTaskbarUIControllerTest : TaskbarBaseTestCase() {
@@ -36,8 +36,8 @@ class FallbackTaskbarUIControllerTest : TaskbarBaseTestCase() {
lateinit var fallbackTaskbarUIController: FallbackTaskbarUIController
lateinit var stateListener: StateManager.StateListener<RecentsState>
@Mock lateinit var recentsActivity: RecentsActivity
@Mock lateinit var stateManager: StateManager<RecentsState>
private val recentsActivity: RecentsActivity = mock()
private val stateManager: StateManager<RecentsState> = mock()
@Before
override fun setup() {
@@ -46,10 +46,10 @@ class FallbackTaskbarUIControllerTest : TaskbarBaseTestCase() {
fallbackTaskbarUIController = FallbackTaskbarUIController(recentsActivity)
// Capture registered state listener to send events to in our tests
val captor = ArgumentCaptor.forClass(StateManager.StateListener::class.java)
val captor = argumentCaptor<StateManager.StateListener<RecentsState>>()
fallbackTaskbarUIController.init(taskbarControllers)
verify(stateManager).addStateListener(captor.capture())
stateListener = captor.value as StateManager.StateListener<RecentsState>
stateListener = captor.lastValue
}
@Test
@@ -23,17 +23,17 @@ import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_B
import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED
import org.junit.Before
import org.junit.Test
import org.mockito.Mock
import org.mockito.Mockito.anyBoolean
import org.mockito.Mockito.never
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever
import org.mockito.kotlin.any
import org.mockito.kotlin.mock
import org.mockito.kotlin.never
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
class TaskbarKeyguardControllerTest : TaskbarBaseTestCase() {
@Mock lateinit var baseDragLayer: TaskbarDragLayer
@Mock lateinit var keyguardManager: KeyguardManager
private val baseDragLayer: TaskbarDragLayer = mock()
private val keyguardManager: KeyguardManager = mock()
@Before
override fun setup() {
@@ -50,7 +50,7 @@ class TaskbarKeyguardControllerTest : TaskbarBaseTestCase() {
@Test
fun uninterestingFlags_noActions() {
setFlags(0)
verify(navbarButtonsViewController, never()).setKeyguardVisible(anyBoolean(), anyBoolean())
verify(navbarButtonsViewController, never()).setKeyguardVisible(any(), any())
}
@Test
@@ -19,32 +19,29 @@ import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever
@RunWith(AndroidJUnit4::class)
class NavButtonLayoutFactoryTest {
@Mock lateinit var mockDeviceProfile: DeviceProfile
@Mock lateinit var mockParentButtonContainer: FrameLayout
@Mock lateinit var mockNavLayout: LinearLayout
@Mock lateinit var mockStartContextualLayout: ViewGroup
@Mock lateinit var mockEndContextualLayout: ViewGroup
@Mock lateinit var mockResources: Resources
@Mock lateinit var mockBackButton: ImageView
@Mock lateinit var mockRecentsButton: ImageView
@Mock lateinit var mockHomeButton: ImageView
@Mock lateinit var mockImeSwitcher: ImageView
@Mock lateinit var mockRotationButton: RotationButton
@Mock lateinit var mockA11yButton: ImageView
private val mockDeviceProfile: DeviceProfile = mock()
private val mockParentButtonContainer: FrameLayout = mock()
private val mockNavLayout: LinearLayout = mock()
private val mockStartContextualLayout: ViewGroup = mock()
private val mockEndContextualLayout: ViewGroup = mock()
private val mockResources: Resources = mock()
private val mockBackButton: ImageView = mock()
private val mockRecentsButton: ImageView = mock()
private val mockHomeButton: ImageView = mock()
private val mockImeSwitcher: ImageView = mock()
private val mockRotationButton: RotationButton = mock()
private val mockA11yButton: ImageView = mock()
private var surfaceRotation = Surface.ROTATION_0
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
// Init end nav buttons
whenever(mockNavLayout.childCount).thenReturn(3)
whenever(mockNavLayout.findViewById<View>(R.id.back)).thenReturn(mockBackButton)
@@ -155,13 +152,13 @@ class NavButtonLayoutFactoryTest {
mockDeviceProfile.isTaskbarPresent = false
setDeviceProfileLandscape()
val layoutter: NavButtonLayoutFactory.NavButtonLayoutter =
getLayoutter(
isKidsMode = false,
isInSetup = false,
isThreeButtonNav = true,
phoneMode = true,
surfaceRotation = ROTATION_270
)
getLayoutter(
isKidsMode = false,
isInSetup = false,
isThreeButtonNav = true,
phoneMode = true,
surfaceRotation = ROTATION_270
)
assert(layoutter is PhoneSeascapeNavLayoutter)
}
@@ -32,39 +32,36 @@ import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.MockitoAnnotations
import org.mockito.Mockito.`when` as whenever
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever
@RunWith(AndroidJUnit4::class)
class SplitAnimationControllerTest {
private val taskId = 9
@Mock lateinit var mockSplitSelectStateController: SplitSelectStateController
private val mockSplitSelectStateController: SplitSelectStateController = mock()
// TaskView
@Mock lateinit var mockTaskView: TaskView
@Mock lateinit var mockThumbnailView: TaskThumbnailView
@Mock lateinit var mockBitmap: Bitmap
@Mock lateinit var mockIconView: IconView
@Mock lateinit var mockTaskViewDrawable: Drawable
private val mockTaskView: TaskView = mock()
private val mockThumbnailView: TaskThumbnailView = mock()
private val mockBitmap: Bitmap = mock()
private val mockIconView: IconView = mock()
private val mockTaskViewDrawable: Drawable = mock()
// GroupedTaskView
@Mock lateinit var mockGroupedTaskView: GroupedTaskView
@Mock lateinit var mockTask: Task
@Mock lateinit var mockTaskKey: Task.TaskKey
@Mock lateinit var mockTaskIdAttributeContainer: TaskIdAttributeContainer
private val mockGroupedTaskView: GroupedTaskView = mock()
private val mockTask: Task = mock()
private val mockTaskKey: Task.TaskKey = mock()
private val mockTaskIdAttributeContainer: TaskIdAttributeContainer = mock()
// SplitSelectSource
@Mock lateinit var splitSelectSource: SplitConfigurationOptions.SplitSelectSource
@Mock lateinit var mockSplitSourceDrawable: Drawable
@Mock lateinit var mockSplitSourceView: View
private val splitSelectSource: SplitConfigurationOptions.SplitSelectSource = mock()
private val mockSplitSourceDrawable: Drawable = mock()
private val mockSplitSourceView: View = mock()
lateinit var splitAnimationController: SplitAnimationController
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
whenever(mockTaskView.thumbnail).thenReturn(mockThumbnailView)
whenever(mockThumbnailView.thumbnail).thenReturn(mockBitmap)
whenever(mockTaskView.iconView).thenReturn(mockIconView)
@@ -85,12 +82,14 @@ class SplitAnimationControllerTest {
// Missing taskView icon
whenever(mockIconView.drawable).thenReturn(null)
val splitAnimInitProps : SplitAnimationController.Companion.SplitAnimInitProps =
splitAnimationController.getFirstAnimInitViews(
{ mockTaskView }, { splitSelectSource })
val splitAnimInitProps: SplitAnimationController.Companion.SplitAnimInitProps =
splitAnimationController.getFirstAnimInitViews({ mockTaskView }, { splitSelectSource })
assertEquals("Did not fallback to use splitSource icon drawable",
mockSplitSourceDrawable, splitAnimInitProps.iconDrawable)
assertEquals(
"Did not fallback to use splitSource icon drawable",
mockSplitSourceDrawable,
splitAnimInitProps.iconDrawable
)
}
@Test
@@ -99,12 +98,14 @@ class SplitAnimationControllerTest {
whenever(mockSplitSelectStateController.isAnimateCurrentTaskDismissal).thenReturn(true)
whenever(mockSplitSelectStateController.isDismissingFromSplitPair).thenReturn(false)
val splitAnimInitProps : SplitAnimationController.Companion.SplitAnimInitProps =
splitAnimationController.getFirstAnimInitViews(
{ mockTaskView }, { splitSelectSource })
val splitAnimInitProps: SplitAnimationController.Companion.SplitAnimInitProps =
splitAnimationController.getFirstAnimInitViews({ mockTaskView }, { splitSelectSource })
assertEquals("Did not use taskView icon drawable", mockTaskViewDrawable,
splitAnimInitProps.iconDrawable)
assertEquals(
"Did not use taskView icon drawable",
mockTaskViewDrawable,
splitAnimInitProps.iconDrawable
)
}
@Test
@@ -116,12 +117,14 @@ class SplitAnimationControllerTest {
// Set split source to null
whenever(splitSelectSource.drawable).thenReturn(null)
val splitAnimInitProps : SplitAnimationController.Companion.SplitAnimInitProps =
splitAnimationController.getFirstAnimInitViews(
{ mockTaskView }, { splitSelectSource })
val splitAnimInitProps: SplitAnimationController.Companion.SplitAnimInitProps =
splitAnimationController.getFirstAnimInitViews({ mockTaskView }, { splitSelectSource })
assertEquals("Did not use taskView icon drawable", mockTaskViewDrawable,
splitAnimInitProps.iconDrawable)
assertEquals(
"Did not use taskView icon drawable",
mockTaskViewDrawable,
splitAnimInitProps.iconDrawable
)
}
@Test
@@ -130,12 +133,14 @@ class SplitAnimationControllerTest {
whenever(mockSplitSelectStateController.isAnimateCurrentTaskDismissal).thenReturn(false)
whenever(mockSplitSelectStateController.isDismissingFromSplitPair).thenReturn(false)
val splitAnimInitProps : SplitAnimationController.Companion.SplitAnimInitProps =
splitAnimationController.getFirstAnimInitViews(
{ mockTaskView }, { splitSelectSource })
val splitAnimInitProps: SplitAnimationController.Companion.SplitAnimInitProps =
splitAnimationController.getFirstAnimInitViews({ mockTaskView }, { splitSelectSource })
assertEquals("Did not use splitSource icon drawable", mockSplitSourceDrawable,
splitAnimInitProps.iconDrawable)
assertEquals(
"Did not use splitSource icon drawable",
mockSplitSourceDrawable,
splitAnimInitProps.iconDrawable
)
}
@Test
@@ -154,12 +159,17 @@ class SplitAnimationControllerTest {
whenever(mockTaskKey.getId()).thenReturn(taskId)
whenever(mockSplitSelectStateController.initialTaskId).thenReturn(taskId)
whenever(mockGroupedTaskView.taskIdAttributeContainers)
.thenReturn(Array(1) { mockTaskIdAttributeContainer })
val splitAnimInitProps : SplitAnimationController.Companion.SplitAnimInitProps =
splitAnimationController.getFirstAnimInitViews(
{ mockGroupedTaskView }, { splitSelectSource })
.thenReturn(Array(1) { mockTaskIdAttributeContainer })
val splitAnimInitProps: SplitAnimationController.Companion.SplitAnimInitProps =
splitAnimationController.getFirstAnimInitViews(
{ mockGroupedTaskView },
{ splitSelectSource }
)
assertEquals("Did not use splitSource icon drawable", mockSplitSourceDrawable,
splitAnimInitProps.iconDrawable)
assertEquals(
"Did not use splitSource icon drawable",
mockSplitSourceDrawable,
splitAnimInitProps.iconDrawable
)
}
}
}
@@ -33,11 +33,11 @@ import com.android.launcher3.statemanager.StateManager
import com.android.launcher3.statemanager.StatefulActivity
import com.android.launcher3.util.ComponentKey
import com.android.launcher3.util.SplitConfigurationOptions
import com.android.launcher3.util.withArgCaptor
import com.android.quickstep.RecentsModel
import com.android.quickstep.SystemUiProxy
import com.android.systemui.shared.recents.model.Task
import com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_50_50
import java.util.function.Consumer
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNull
@@ -45,23 +45,22 @@ import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import java.util.function.Consumer
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
@RunWith(AndroidJUnit4::class)
class SplitSelectStateControllerTest {
@Mock lateinit var systemUiProxy: SystemUiProxy
@Mock lateinit var depthController: DepthController
@Mock lateinit var statsLogManager: StatsLogManager
@Mock lateinit var stateManager: StateManager<LauncherState>
@Mock lateinit var handler: Handler
@Mock lateinit var context: StatefulActivity<*>
@Mock lateinit var recentsModel: RecentsModel
@Mock lateinit var pendingIntent: PendingIntent
private val systemUiProxy: SystemUiProxy = mock()
private val depthController: DepthController = mock()
private val statsLogManager: StatsLogManager = mock()
private val stateManager: StateManager<LauncherState> = mock()
private val handler: Handler = mock()
private val context: StatefulActivity<*> = mock()
private val recentsModel: RecentsModel = mock()
private val pendingIntent: PendingIntent = mock()
lateinit var splitSelectStateController: SplitSelectStateController
@@ -69,11 +68,12 @@ class SplitSelectStateControllerTest {
private val nonPrimaryUserHandle = UserHandle(ActivityManager.RunningTaskInfo().userId + 10)
private var taskIdCounter = 0
private fun getUniqueId(): Int { return ++taskIdCounter }
private fun getUniqueId(): Int {
return ++taskIdCounter
}
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
splitSelectStateController =
SplitSelectStateController(
context,
@@ -111,13 +111,14 @@ class SplitSelectStateControllerTest {
// Capture callback from recentsModel#getTasks()
val consumer =
withArgCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(nonMatchingComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
argumentCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(nonMatchingComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
.lastValue
// Send our mocked tasks
consumer.accept(tasks)
@@ -162,13 +163,14 @@ class SplitSelectStateControllerTest {
// Capture callback from recentsModel#getTasks()
val consumer =
withArgCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(matchingComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
argumentCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(matchingComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
.lastValue
// Send our mocked tasks
consumer.accept(tasks)
@@ -201,13 +203,14 @@ class SplitSelectStateControllerTest {
// Capture callback from recentsModel#getTasks()
val consumer =
withArgCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(nonPrimaryUserComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
argumentCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(nonPrimaryUserComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
.lastValue
// Send our mocked tasks
consumer.accept(tasks)
@@ -255,13 +258,14 @@ class SplitSelectStateControllerTest {
// Capture callback from recentsModel#getTasks()
val consumer =
withArgCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(nonPrimaryUserComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
argumentCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(nonPrimaryUserComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
.lastValue
// Send our mocked tasks
consumer.accept(tasks)
@@ -306,13 +310,14 @@ class SplitSelectStateControllerTest {
// Capture callback from recentsModel#getTasks()
val consumer =
withArgCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(matchingComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
argumentCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(matchingComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
.lastValue
// Send our mocked tasks
consumer.accept(tasks)
@@ -327,10 +332,7 @@ class SplitSelectStateControllerTest {
ComponentKey(ComponentName(matchingPackage, matchingClass), primaryUserHandle)
val groupTask1 =
generateGroupTask(
ComponentName("hotdog", "pie"),
ComponentName("pumpkin", "pie")
)
generateGroupTask(ComponentName("hotdog", "pie"), ComponentName("pumpkin", "pie"))
val groupTask2 =
generateGroupTask(
ComponentName("pomegranate", "juice"),
@@ -361,13 +363,14 @@ class SplitSelectStateControllerTest {
// Capture callback from recentsModel#getTasks()
val consumer =
withArgCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(nonMatchingComponent, matchingComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
argumentCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(nonMatchingComponent, matchingComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
.lastValue
// Send our mocked tasks
consumer.accept(tasks)
@@ -381,10 +384,7 @@ class SplitSelectStateControllerTest {
ComponentKey(ComponentName(matchingPackage, matchingClass), primaryUserHandle)
val groupTask1 =
generateGroupTask(
ComponentName("hotdog", "pie"),
ComponentName("pumpkin", "pie")
)
generateGroupTask(ComponentName("hotdog", "pie"), ComponentName("pumpkin", "pie"))
val groupTask2 =
generateGroupTask(
ComponentName("pomegranate", "juice"),
@@ -415,13 +415,14 @@ class SplitSelectStateControllerTest {
// Capture callback from recentsModel#getTasks()
val consumer =
withArgCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(matchingComponent, matchingComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
argumentCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(matchingComponent, matchingComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
.lastValue
// Send our mocked tasks
consumer.accept(tasks)
@@ -479,13 +480,14 @@ class SplitSelectStateControllerTest {
// Capture callback from recentsModel#getTasks()
val consumer =
withArgCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(matchingComponent, matchingComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
argumentCaptor<Consumer<ArrayList<GroupTask>>> {
splitSelectStateController.findLastActiveTasksAndRunCallback(
listOf(matchingComponent, matchingComponent),
taskConsumer
)
verify(recentsModel).getTasks(capture())
}
.lastValue
// Send our mocked tasks
consumer.accept(tasks)
@@ -531,7 +533,7 @@ class SplitSelectStateControllerTest {
@Test
fun secondPendingIntentSet() {
val itemInfo = ItemInfo()
`when`(pendingIntent.creatorUserHandle).thenReturn(primaryUserHandle)
whenever(pendingIntent.creatorUserHandle).thenReturn(primaryUserHandle)
splitSelectStateController.setInitialTaskSelect(null, 0, itemInfo, null, 1)
splitSelectStateController.setSecondTask(pendingIntent)
assertTrue(splitSelectStateController.isBothSplitAppsConfirmed)
@@ -21,19 +21,17 @@ import android.testing.TestableLooper
import android.testing.TestableLooper.RunWithLooper
import android.util.Log
import androidx.test.filters.SmallTest
import com.android.launcher3.util.any
import com.android.launcher3.util.mock
import com.android.systemui.unfold.UnfoldTransitionProgressProvider
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.anyBoolean
import org.mockito.Mockito.anyFloat
import org.mockito.Mockito.inOrder
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
import org.mockito.kotlin.any
import org.mockito.kotlin.inOrder
import org.mockito.kotlin.mock
import org.mockito.kotlin.never
import org.mockito.kotlin.verify
@SmallTest
@RunWith(AndroidTestingRunner::class)
@@ -74,7 +72,7 @@ class PreemptiveUnfoldTransitionProgressProviderTest {
provider.preemptivelyStartTransition(initialProgress = null)
verify(listener).onTransitionStarted()
verify(listener, never()).onTransitionProgress(anyFloat())
verify(listener, never()).onTransitionProgress(any())
}
@Test
@@ -90,7 +88,7 @@ class PreemptiveUnfoldTransitionProgressProviderTest {
provider.preemptivelyStartTransition()
provider.cancelPreemptiveStart()
with(inOrder(listener)) {
inOrder(listener) {
verify(listener).onTransitionStarted()
verify(listener).onTransitionFinished()
}
@@ -111,7 +109,7 @@ class PreemptiveUnfoldTransitionProgressProviderTest {
source.onTransitionStarted()
source.onTransitionFinished()
with(inOrder(listener)) {
inOrder(listener) {
verify(listener).onTransitionStarted()
verify(listener).onTransitionFinished()
}
@@ -152,7 +150,7 @@ class PreemptiveUnfoldTransitionProgressProviderTest {
provider.preemptivelyStartTransition()
source.onTransitionFinished()
with(inOrder(listener)) {
inOrder(listener) {
verify(listener).onTransitionStarted()
verify(listener).onTransitionFinished()
}
@@ -165,7 +163,7 @@ class PreemptiveUnfoldTransitionProgressProviderTest {
testableLooper.moveTimeForward(PREEMPTIVE_UNFOLD_TIMEOUT_MS + 1)
testableLooper.processAllMessages()
with(inOrder(listener)) {
inOrder(listener) {
verify(listener).onTransitionStarted()
verify(listener).onTransitionFinished()
}
@@ -178,7 +176,7 @@ class PreemptiveUnfoldTransitionProgressProviderTest {
testableLooper.moveTimeForward(PREEMPTIVE_UNFOLD_TIMEOUT_MS + 1)
testableLooper.processAllMessages()
verify(testWtfHandler).onTerribleFailure(any(), any(), anyBoolean())
verify(testWtfHandler).onTerribleFailure(any(), any(), any())
}
@Test
@@ -225,7 +223,7 @@ class PreemptiveUnfoldTransitionProgressProviderTest {
source.onTransitionFinished()
with(inOrder(listener)) {
inOrder(listener) {
verify(listener).onTransitionStarted()
verify(listener).onTransitionFinished()
}
+1
View File
@@ -87,6 +87,7 @@ android_library {
"androidx.test.espresso.contrib",
"androidx.test.espresso.intents",
"androidx.test.uiautomator_uiautomator",
"mockito-kotlin2",
"mockito-target-extended-minus-junit4",
"launcher_log_protos_lite",
"truth-prebuilt",
@@ -38,10 +38,10 @@ import kotlin.math.min
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.mockito.ArgumentMatchers
import org.mockito.Mockito.mock
import org.mockito.Mockito.spy
import org.mockito.Mockito.`when` as whenever
import org.mockito.kotlin.any
import org.mockito.kotlin.mock
import org.mockito.kotlin.spy
import org.mockito.kotlin.whenever
/**
* This is an abstract class for DeviceProfile tests that create an InvariantDeviceProfile based on
@@ -52,8 +52,8 @@ import org.mockito.Mockito.`when` as whenever
abstract class AbstractDeviceProfileTest {
protected var context: Context? = null
protected open val runningContext: Context = ApplicationProvider.getApplicationContext()
private var displayController: DisplayController = mock(DisplayController::class.java)
private var windowManagerProxy: WindowManagerProxy = mock(WindowManagerProxy::class.java)
private val displayController: DisplayController = mock()
private val windowManagerProxy: WindowManagerProxy = mock()
private lateinit var originalDisplayController: DisplayController
private lateinit var originalWindowManagerProxy: WindowManagerProxy
@@ -288,11 +288,10 @@ abstract class AbstractDeviceProfileTest {
) {
val windowsBounds = perDisplayBoundsCache[displayInfo]!!
val realBounds = windowsBounds[rotation]
whenever(windowManagerProxy.getDisplayInfo(ArgumentMatchers.any())).thenReturn(displayInfo)
whenever(windowManagerProxy.getRealBounds(ArgumentMatchers.any(), ArgumentMatchers.any()))
.thenReturn(realBounds)
whenever(windowManagerProxy.getRotation(ArgumentMatchers.any())).thenReturn(rotation)
whenever(windowManagerProxy.getNavigationMode(ArgumentMatchers.any()))
whenever(windowManagerProxy.getDisplayInfo(any())).thenReturn(displayInfo)
whenever(windowManagerProxy.getRealBounds(any(), any())).thenReturn(realBounds)
whenever(windowManagerProxy.getRotation(any())).thenReturn(rotation)
whenever(windowManagerProxy.getNavigationMode(any()))
.thenReturn(
if (isGestureMode) NavigationMode.NO_BUTTON else NavigationMode.THREE_BUTTONS
)
@@ -27,9 +27,9 @@ import com.android.launcher3.util.WindowBounds
import java.io.PrintWriter
import java.io.StringWriter
import org.junit.Before
import org.mockito.ArgumentMatchers.any
import org.mockito.Mockito.mock
import org.mockito.Mockito.`when` as whenever
import org.mockito.kotlin.any
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever
/**
* This is an abstract class for DeviceProfile tests that don't need the real Context and mock an
@@ -41,7 +41,7 @@ abstract class FakeInvariantDeviceProfileTest {
protected var context: Context? = null
protected var inv: InvariantDeviceProfile? = null
protected var info: Info = mock(Info::class.java)
protected val info: Info = mock()
protected var windowBounds: WindowBounds? = null
protected var isMultiWindowMode: Boolean = false
protected var transposeLayoutWithOrientation: Boolean = false
@@ -24,20 +24,19 @@ import com.android.launcher3.model.data.WorkspaceItemInfo
import com.android.launcher3.util.Executors
import com.android.launcher3.util.IntArray
import com.android.launcher3.util.TestUtil.runOnExecutorSync
import com.android.launcher3.util.any
import com.android.launcher3.util.eq
import com.android.launcher3.util.same
import com.google.common.truth.Truth.assertThat
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyZeroInteractions
import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.any
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.same
import org.mockito.kotlin.verify
import org.mockito.kotlin.verifyZeroInteractions
import org.mockito.kotlin.whenever
/** Tests for [AddWorkspaceItemsTask] */
@SmallTest
@@ -46,12 +45,11 @@ class AddWorkspaceItemsTaskTest : AbstractWorkspaceModelTest() {
private lateinit var mDataModelCallbacks: MyCallbacks
@Mock private lateinit var mWorkspaceItemSpaceFinder: WorkspaceItemSpaceFinder
private val mWorkspaceItemSpaceFinder: WorkspaceItemSpaceFinder = mock()
@Before
override fun setup() {
super.setup()
MockitoAnnotations.initMocks(this)
mDataModelCallbacks = MyCallbacks()
Executors.MAIN_EXECUTOR.submit { mModelHelper.model.addCallbacks(mDataModelCallbacks) }
.get()
@@ -42,11 +42,13 @@ import kotlin.math.min
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.doNothing
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.any
import org.mockito.kotlin.anyOrNull
import org.mockito.kotlin.doNothing
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
import org.mockito.stubbing.Answer
/** Unit tests for {@link DisplayController} */
@@ -56,13 +58,13 @@ class DisplayControllerTest {
private val appContext: Context = ApplicationProvider.getApplicationContext()
@Mock private lateinit var context: SandboxContext
@Mock private lateinit var windowManagerProxy: WindowManagerProxy
@Mock private lateinit var launcherPrefs: LauncherPrefs
@Mock private lateinit var displayManager: DisplayManager
@Mock private lateinit var display: Display
@Mock private lateinit var resources: Resources
@Mock private lateinit var displayInfoChangeListener: DisplayInfoChangeListener
private val context: SandboxContext = mock()
private val windowManagerProxy: WindowManagerProxy = mock()
private val launcherPrefs: LauncherPrefs = mock()
private val displayManager: DisplayManager = mock()
private val display: Display = mock()
private val resources: Resources = mock()
private val displayInfoChangeListener: DisplayInfoChangeListener = mock()
private lateinit var displayController: DisplayController
@@ -88,7 +90,6 @@ class DisplayControllerTest {
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
whenever(context.getObject(eq(WindowManagerProxy.INSTANCE))).thenReturn(windowManagerProxy)
whenever(context.getObject(eq(LauncherPrefs.INSTANCE))).thenReturn(launcherPrefs)
whenever(launcherPrefs.get(TASKBAR_PINNING)).thenReturn(false)
@@ -112,10 +113,10 @@ class DisplayControllerTest {
whenever(windowManagerProxy.getNavigationMode(any())).thenReturn(NavigationMode.NO_BUTTON)
// Mock context
whenever(context.createWindowContext(any(), any(), nullable())).thenReturn(context)
whenever(context.createWindowContext(any(), any(), anyOrNull())).thenReturn(context)
whenever(context.getSystemService(eq(DisplayManager::class.java)))
.thenReturn(displayManager)
doNothing().`when`(context).registerComponentCallbacks(any())
doNothing().whenever(context).registerComponentCallbacks(any())
// Mock display
whenever(display.rotation).thenReturn(displayInfo.rotation)
@@ -1,119 +0,0 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3.util
/**
* Kotlin versions of popular mockito methods that can return null in situations when Kotlin expects
* a non-null value. Kotlin will throw an IllegalStateException when this takes place ("x must not
* be null"). To fix this, we can use methods that modify the return type to be nullable. This
* causes Kotlin to skip the null checks.
*/
import org.mockito.ArgumentCaptor
import org.mockito.Mockito
/**
* Returns Mockito.eq() as nullable type to avoid java.lang.IllegalStateException when null is
* returned.
*
* Generic T is nullable because implicitly bounded by Any?.
*/
fun <T> eq(obj: T): T = Mockito.eq<T>(obj)
/**
* Returns Mockito.same() as nullable type to avoid java.lang.IllegalStateException when null is
* returned.
*
* Generic T is nullable because implicitly bounded by Any?.
*/
fun <T> same(obj: T): T = Mockito.same<T>(obj)
/**
* Returns Mockito.any() as nullable type to avoid java.lang.IllegalStateException when null is
* returned.
*
* Generic T is nullable because implicitly bounded by Any?.
*/
fun <T> any(type: Class<T>): T = Mockito.any<T>(type)
inline fun <reified T> any(): T = any(T::class.java)
/** Kotlin type-inferred version of Mockito.nullable() */
inline fun <reified T> nullable(): T? = Mockito.nullable(T::class.java)
/**
* Returns ArgumentCaptor.capture() as nullable type to avoid java.lang.IllegalStateException when
* null is returned.
*
* Generic T is nullable because implicitly bounded by Any?.
*/
fun <T> capture(argumentCaptor: ArgumentCaptor<T>): T = argumentCaptor.capture()
/**
* Helper function for creating an argumentCaptor in kotlin.
*
* Generic T is nullable because implicitly bounded by Any?.
*/
inline fun <reified T : Any> argumentCaptor(): ArgumentCaptor<T> =
ArgumentCaptor.forClass(T::class.java)
/**
* Helper function for creating new mocks, without the need to pass in a [Class] instance.
*
* Generic T is nullable because implicitly bounded by Any?.
*/
inline fun <reified T : Any> mock(): T = Mockito.mock(T::class.java)
/**
* A kotlin implemented wrapper of [ArgumentCaptor] which prevents the following exception when
* kotlin tests are mocking kotlin objects and the methods take non-null parameters:
* ```
* java.lang.NullPointerException: capture() must not be null
* ```
*/
class KotlinArgumentCaptor<T> constructor(clazz: Class<T>) {
private val wrapped: ArgumentCaptor<T> = ArgumentCaptor.forClass(clazz)
fun capture(): T = wrapped.capture()
val value: T
get() = wrapped.value
}
/**
* Helper function for creating an argumentCaptor in kotlin.
*
* Generic T is nullable because implicitly bounded by Any?.
*/
inline fun <reified T : Any> kotlinArgumentCaptor(): KotlinArgumentCaptor<T> =
KotlinArgumentCaptor(T::class.java)
/**
* Helper function for creating and using a single-use ArgumentCaptor in kotlin.
*
* ```
* val captor = argumentCaptor<Foo>()
* verify(...).someMethod(captor.capture())
* val captured = captor.value
* ```
*
* becomes:
* ```
* val captured = withArgCaptor<Foo> { verify(...).someMethod(capture()) }
* ```
*
* NOTE: this uses the KotlinArgumentCaptor to avoid the NullPointerException.
*/
inline fun <reified T : Any> withArgCaptor(block: KotlinArgumentCaptor<T>.() -> Unit): T =
kotlinArgumentCaptor<T>().apply { block() }.value
@@ -26,29 +26,27 @@ import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyZeroInteractions
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
import org.mockito.kotlin.verifyZeroInteractions
import org.mockito.kotlin.whenever
/** Unit tests for {@link LockedUserState} */
@SmallTest
@RunWith(AndroidJUnit4::class)
class LockedUserStateTest {
@Mock lateinit var userManager: UserManager
@Mock lateinit var context: Context
private val userManager: UserManager = mock()
private val context: Context = mock()
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
`when`(context.getSystemService(UserManager::class.java)).thenReturn(userManager)
whenever(context.getSystemService(UserManager::class.java)).thenReturn(userManager)
}
@Test
fun runOnUserUnlocked_runs_action_immediately_if_already_unlocked() {
`when`(userManager.isUserUnlocked(Process.myUserHandle())).thenReturn(true)
whenever(userManager.isUserUnlocked(Process.myUserHandle())).thenReturn(true)
val action: Runnable = mock()
LockedUserState(context).runOnUserUnlocked(action)
verify(action).run()
@@ -56,7 +54,7 @@ class LockedUserStateTest {
@Test
fun runOnUserUnlocked_waits_to_run_action_until_user_is_unlocked() {
`when`(userManager.isUserUnlocked(Process.myUserHandle())).thenReturn(false)
whenever(userManager.isUserUnlocked(Process.myUserHandle())).thenReturn(false)
val action: Runnable = mock()
val state = LockedUserState(context)
state.runOnUserUnlocked(action)
@@ -67,13 +65,13 @@ class LockedUserStateTest {
@Test
fun isUserUnlocked_returns_true_when_user_is_unlocked() {
`when`(userManager.isUserUnlocked(Process.myUserHandle())).thenReturn(true)
whenever(userManager.isUserUnlocked(Process.myUserHandle())).thenReturn(true)
assertThat(LockedUserState(context).isUserUnlocked).isTrue()
}
@Test
fun isUserUnlocked_returns_false_when_user_is_locked() {
`when`(userManager.isUserUnlocked(Process.myUserHandle())).thenReturn(false)
whenever(userManager.isUserUnlocked(Process.myUserHandle())).thenReturn(false)
assertThat(LockedUserState(context).isUserUnlocked).isFalse()
}
}