Skip to content

Commit e99b47c

Browse files
rshestfacebook-github-bot
authored andcommitted
Use proper mockito/kotlin for RootViewTest and JSPointerDispatcherTest (facebook#48490)
Summary: Pull Request resolved: facebook#48490 ## Changelog: [Internal] - This makes the `RootViewTest` and `JSPointerDispatcher` tests to use mockito-kotlin instead of the Java Mockito, which is the legacy of the conversion of the corresponding tests from Java. Which: * is the right thing to do, as we have more Kotlin-idiomatic tests * helps with some Kotlin conversion with classes under test down the line, as Kotlin Mockito handles things like nullability etc properly Reviewed By: javache Differential Revision: D67824679 fbshipit-source-id: 055e9c7c4a33164ce6f4b9a5c47f16051d2a132f
1 parent b867c01 commit e99b47c

File tree

2 files changed

+46
-37
lines changed

2 files changed

+46
-37
lines changed

packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,28 @@ import com.facebook.react.common.SystemClock
2727
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests
2828
import com.facebook.react.uimanager.DisplayMetricsHolder
2929
import com.facebook.react.uimanager.UIManagerModule
30-
import com.facebook.react.uimanager.events.Event
3130
import com.facebook.react.uimanager.events.EventDispatcher
3231
import com.facebook.react.uimanager.events.RCTEventEmitter
32+
import com.facebook.react.uimanager.events.TouchEvent
3333
import java.util.Date
3434
import org.assertj.core.api.Assertions.*
3535
import org.junit.After
3636
import org.junit.Before
3737
import org.junit.Test
3838
import org.junit.runner.RunWith
39-
import org.mockito.ArgumentCaptor
40-
import org.mockito.ArgumentMatchers
4139
import org.mockito.MockedStatic
42-
import org.mockito.Mockito
43-
import org.mockito.Mockito.*
44-
import org.mockito.Mockito.`when` as whenever
40+
import org.mockito.Mockito.mockStatic
41+
import org.mockito.kotlin.KArgumentCaptor
42+
import org.mockito.kotlin.any
43+
import org.mockito.kotlin.argumentCaptor
44+
import org.mockito.kotlin.eq
45+
import org.mockito.kotlin.mock
46+
import org.mockito.kotlin.reset
47+
import org.mockito.kotlin.spy
48+
import org.mockito.kotlin.times
49+
import org.mockito.kotlin.verify
50+
import org.mockito.kotlin.verifyNoMoreInteractions
51+
import org.mockito.kotlin.whenever
4552
import org.robolectric.Robolectric
4653
import org.robolectric.RobolectricTestRunner
4754
import org.robolectric.RuntimeEnvironment
@@ -55,26 +62,38 @@ class RootViewTest {
5562
private lateinit var arguments: MockedStatic<Arguments>
5663
private lateinit var systemClock: MockedStatic<SystemClock>
5764

65+
private lateinit var downEventCaptor: KArgumentCaptor<TouchEvent>
66+
private lateinit var downActionTouchesArgCaptor: KArgumentCaptor<WritableArray>
67+
68+
private lateinit var upEventCaptor: KArgumentCaptor<TouchEvent>
69+
private lateinit var upActionTouchesArgCaptor: KArgumentCaptor<WritableArray>
70+
5871
@Before
5972
fun setUp() {
6073
ReactNativeFeatureFlagsForTests.setUp()
6174

62-
arguments = Mockito.mockStatic(Arguments::class.java)
75+
arguments = mockStatic(Arguments::class.java)
6376
arguments.`when`<WritableArray> { Arguments.createArray() }.thenAnswer { JavaOnlyArray() }
6477
arguments.`when`<WritableMap> { Arguments.createMap() }.thenAnswer { JavaOnlyMap() }
6578

6679
val ts = SystemClock.uptimeMillis()
67-
systemClock = Mockito.mockStatic(SystemClock::class.java)
80+
systemClock = mockStatic(SystemClock::class.java)
6881
systemClock.`when`<Long> { SystemClock.uptimeMillis() }.thenReturn(ts)
6982

7083
catalystInstanceMock = ReactTestHelper.createMockCatalystInstance()
7184
reactContext = spy(BridgeReactContext(RuntimeEnvironment.getApplication()))
7285
reactContext.initializeWithInstance(catalystInstanceMock)
7386

7487
DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(reactContext)
75-
val uiManagerModuleMock = mock(UIManagerModule::class.java)
88+
val uiManagerModuleMock: UIManagerModule = mock()
7689
whenever(catalystInstanceMock.getNativeModule(UIManagerModule::class.java))
7790
.thenReturn(uiManagerModuleMock)
91+
92+
downEventCaptor = argumentCaptor()
93+
downActionTouchesArgCaptor = argumentCaptor()
94+
95+
upEventCaptor = argumentCaptor()
96+
upActionTouchesArgCaptor = argumentCaptor()
7897
}
7998

8099
@After
@@ -85,11 +104,11 @@ class RootViewTest {
85104

86105
@Test
87106
fun testTouchEmitter() {
88-
val instanceManager = mock(ReactInstanceManager::class.java)
107+
val instanceManager: ReactInstanceManager = mock()
89108
whenever(instanceManager.currentReactContext).thenReturn(reactContext)
90-
val uiManager = mock(UIManagerModule::class.java)
91-
val eventDispatcher = mock(EventDispatcher::class.java)
92-
val eventEmitterModuleMock = mock(RCTEventEmitter::class.java)
109+
val uiManager: UIManagerModule = mock()
110+
val eventDispatcher: EventDispatcher = mock()
111+
val eventEmitterModuleMock: RCTEventEmitter = mock()
93112
whenever(catalystInstanceMock.getNativeModule(UIManagerModule::class.java))
94113
.thenReturn(uiManager)
95114
whenever(uiManager.eventDispatcher).thenReturn(eventDispatcher)
@@ -106,19 +125,14 @@ class RootViewTest {
106125
// Test ACTION_DOWN event
107126
rootView.onTouchEvent(MotionEvent.obtain(100, ts, MotionEvent.ACTION_DOWN, 0f, 0f, 0))
108127

109-
val downEventCaptor = ArgumentCaptor.forClass(Event::class.java)
110128
verify(eventDispatcher).dispatchEvent(downEventCaptor.capture())
111129
verifyNoMoreInteractions(eventDispatcher)
112-
downEventCaptor.value.dispatch(eventEmitterModuleMock)
113-
val downActionTouchesArgCaptor = ArgumentCaptor.forClass(JavaOnlyArray::class.java)
130+
downEventCaptor.firstValue.dispatch(eventEmitterModuleMock)
114131
verify(eventEmitterModuleMock)
115-
.receiveTouches(
116-
ArgumentMatchers.eq("topTouchStart"),
117-
downActionTouchesArgCaptor.capture(),
118-
ArgumentMatchers.any(JavaOnlyArray::class.java))
132+
.receiveTouches(eq("topTouchStart"), downActionTouchesArgCaptor.capture(), any())
119133
verifyNoMoreInteractions(eventEmitterModuleMock)
120-
assertThat(downActionTouchesArgCaptor.value.size()).isEqualTo(1)
121-
assertThat(downActionTouchesArgCaptor.value.getMap(0))
134+
assertThat(downActionTouchesArgCaptor.firstValue.size()).isEqualTo(1)
135+
assertThat(downActionTouchesArgCaptor.firstValue.getMap(0))
122136
.isEqualTo(
123137
JavaOnlyMap.of(
124138
"pageX",
@@ -140,22 +154,17 @@ class RootViewTest {
140154

141155
// Test ACTION_UP event
142156
reset(eventEmitterModuleMock, eventDispatcher)
143-
val upEventCaptor = ArgumentCaptor.forClass(Event::class.java)
144-
val upActionTouchesArgCaptor = ArgumentCaptor.forClass(JavaOnlyArray::class.java)
145157

146158
rootView.onTouchEvent(MotionEvent.obtain(50, ts, MotionEvent.ACTION_UP, 0f, 0f, 0))
147159

148160
verify(eventDispatcher).dispatchEvent(upEventCaptor.capture())
149161
verifyNoMoreInteractions(eventDispatcher)
150-
upEventCaptor.value.dispatch(eventEmitterModuleMock)
162+
upEventCaptor.firstValue.dispatch(eventEmitterModuleMock)
151163
verify(eventEmitterModuleMock)
152-
.receiveTouches(
153-
ArgumentMatchers.eq("topTouchEnd"),
154-
upActionTouchesArgCaptor.capture(),
155-
ArgumentMatchers.any(WritableArray::class.java))
164+
.receiveTouches(eq("topTouchEnd"), upActionTouchesArgCaptor.capture(), any())
156165
verifyNoMoreInteractions(eventEmitterModuleMock)
157-
assertThat(upActionTouchesArgCaptor.value.size()).isEqualTo(1)
158-
assertThat(upActionTouchesArgCaptor.value.getMap(0))
166+
assertThat(upActionTouchesArgCaptor.firstValue.size()).isEqualTo(1)
167+
assertThat(upActionTouchesArgCaptor.firstValue.getMap(0))
159168
.isEqualTo(
160169
JavaOnlyMap.of(
161170
"pageX",
@@ -186,7 +195,7 @@ class RootViewTest {
186195

187196
@Test
188197
fun testRemountApplication() {
189-
val instanceManager = mock(ReactInstanceManager::class.java)
198+
val instanceManager: ReactInstanceManager = mock()
190199
val rootView = ReactRootView(reactContext)
191200
rootView.startReactApplication(instanceManager, "")
192201
rootView.unmountReactApplication()
@@ -195,7 +204,7 @@ class RootViewTest {
195204

196205
@Test
197206
fun testCheckForKeyboardEvents() {
198-
val instanceManager = mock(ReactInstanceManager::class.java)
207+
val instanceManager: ReactInstanceManager = mock()
199208
val activity = Robolectric.buildActivity(Activity::class.java).create().get()
200209
whenever(instanceManager.currentReactContext).thenReturn(reactContext)
201210
val rootView: ReactRootView =

packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/JSPointerDispatcherTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ import org.junit.Before
2222
import org.junit.Test
2323
import org.junit.runner.RunWith
2424
import org.mockito.ArgumentMatcher
25-
import org.mockito.Mockito.argThat
26-
import org.mockito.Mockito.mock
27-
import org.mockito.Mockito.verify
25+
import org.mockito.kotlin.argThat
26+
import org.mockito.kotlin.mock
27+
import org.mockito.kotlin.verify
2828
import org.robolectric.RobolectricTestRunner
2929
import org.robolectric.RuntimeEnvironment
3030

@@ -75,7 +75,7 @@ class JSPointerDispatcherTest {
7575
val ev =
7676
createMotionEvent(
7777
MotionEvent.ACTION_DOWN, childRect.centerX().toFloat(), childRect.centerY().toFloat())
78-
val mockDispatcher: EventDispatcher = mock(EventDispatcher::class.java)
78+
val mockDispatcher: EventDispatcher = mock()
7979
pointerDispatcher.handleMotionEvent(ev, mockDispatcher, false)
8080
verify(mockDispatcher).dispatchEvent(argThat(EventWithName(PointerEventHelper.POINTER_DOWN)))
8181
}

0 commit comments

Comments
 (0)