@@ -15,11 +15,20 @@ import com.mapbox.verifyOnce
1515import io.mockk.*
1616import junit.framework.Assert.assertEquals
1717import junit.framework.Assert.assertNull
18+ import kotlinx.coroutines.CoroutineScope
19+ import kotlinx.coroutines.Dispatchers
20+ import kotlinx.coroutines.ExperimentalCoroutinesApi
21+ import kotlinx.coroutines.test.TestCoroutineScheduler
22+ import kotlinx.coroutines.test.UnconfinedTestDispatcher
23+ import kotlinx.coroutines.test.resetMain
24+ import kotlinx.coroutines.test.setMain
25+ import org.junit.After
1826import org.junit.Before
1927import org.junit.Test
2028import org.junit.runner.RunWith
2129import org.robolectric.RobolectricTestRunner
2230
31+ @OptIn(ExperimentalCoroutinesApi ::class )
2332@RunWith(RobolectricTestRunner ::class )
2433class MapSurfaceTest {
2534
@@ -30,14 +39,28 @@ class MapSurfaceTest {
3039 private lateinit var mapboxSurfaceRenderer: MapboxSurfaceRenderer
3140 private lateinit var surface: Surface
3241
42+ private val testScheduler = TestCoroutineScheduler ()
43+ private val testDispatcher = UnconfinedTestDispatcher (testScheduler)
44+ private val mainTestDispatcher = UnconfinedTestDispatcher (testScheduler, " MainTestDispatcher" )
45+ private val testScope = CoroutineScope (testDispatcher)
46+
3347 @Before
3448 fun setUp () {
49+ Dispatchers .setMain(mainTestDispatcher)
50+ mockkStatic(" com.mapbox.maps.MapboxLogger" )
51+ every { logI(any(), any()) } just Runs
52+ every { logW(any(), any()) } just Runs
53+ every { logE(any(), any()) } just Runs
54+
3555 context = mockk(relaxUnitFun = true )
3656 mapInitOptions = mockk(relaxUnitFun = true )
3757 mapController = mockk(relaxUnitFun = true )
3858 mapboxSurfaceRenderer = mockk(relaxUnitFun = true )
3959 surface = mockk(relaxed = true )
4060
61+ // Use test scope for lifecycleScope
62+ every { mapController.lifecycleScope } returns testScope
63+
4164 mapSurface = MapSurface (
4265 context,
4366 surface,
@@ -47,6 +70,12 @@ class MapSurfaceTest {
4770 )
4871 }
4972
73+ @After
74+ fun cleanUp () {
75+ Dispatchers .resetMain()
76+ unmockkStatic(" com.mapbox.maps.MapboxLogger" )
77+ }
78+
5079 @Test
5180 fun testGetSurface () {
5281 assertEquals(surface, mapSurface.surface)
@@ -57,20 +86,31 @@ class MapSurfaceTest {
5786 val display: Display = mockk()
5887 val windowManager: WindowManager = mockk()
5988 val refreshRate = 100f
89+ @Suppress(" DEPRECATION" )
6090 every { windowManager.defaultDisplay } returns display
6191 every { display.refreshRate } returns refreshRate
6292 every { context.getSystemService(Context .WINDOW_SERVICE ) } returns windowManager
93+
6394 mapSurface.surfaceCreated()
95+
6496 verifyOnce { mapboxSurfaceRenderer.surfaceCreated() }
65- verifyOnce { mapController.setScreenRefreshRate(refreshRate.toInt()) }
97+ // Verify the immediate default setting is called
98+ verifySequence {
99+ mapController.setScreenRefreshRate(MapView .DEFAULT_FPS )
100+ mapController.lifecycleScope
101+ mapController.setScreenRefreshRate(refreshRate.toInt())
102+ }
66103 }
67104
68105 @Test
69106 fun testSurfaceCreatedWithNoWindowManager () {
70107 every { context.getSystemService(Context .WINDOW_SERVICE ) } returns null
108+
71109 mapSurface.surfaceCreated()
110+
72111 verifyOnce { mapboxSurfaceRenderer.surfaceCreated() }
73- verifyOnce { mapController.setScreenRefreshRate(MapView .DEFAULT_FPS ) }
112+ // Verify the immediate default setting is called
113+ verify { mapController.setScreenRefreshRate(MapView .DEFAULT_FPS ) }
74114 }
75115
76116 @Test
0 commit comments