Skip to content

Commit 66482c5

Browse files
csadilekpocmo
authored andcommitted
Closes mozilla-mobile#1083: Flaky test on engine-gecko-[beta|nightly]
1 parent d03c6b5 commit 66482c5

File tree

3 files changed

+54
-6
lines changed

3 files changed

+54
-6
lines changed

components/browser/engine-gecko-beta/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package mozilla.components.browser.engine.gecko
66

77
import android.os.Handler
8+
import android.os.Message
89
import mozilla.components.browser.errorpages.ErrorType
910
import mozilla.components.concept.engine.DefaultSettings
1011
import mozilla.components.concept.engine.EngineSession
@@ -22,6 +23,7 @@ import org.junit.Assert.assertFalse
2223
import org.junit.Assert.assertNotNull
2324
import org.junit.Assert.assertNull
2425
import org.junit.Assert.assertTrue
26+
import org.junit.Before
2527
import org.junit.Test
2628
import org.junit.runner.RunWith
2729
import org.mockito.ArgumentMatchers.any
@@ -55,6 +57,11 @@ import org.robolectric.RobolectricTestRunner
5557
@RunWith(RobolectricTestRunner::class)
5658
class GeckoEngineSessionTest {
5759

60+
@Before
61+
fun setup() {
62+
ThreadUtils.sGeckoHandler = null
63+
}
64+
5865
@Test
5966
fun engineSessionInitialization() {
6067
val runtime = mock(GeckoRuntime::class.java)
@@ -262,13 +269,22 @@ class GeckoEngineSessionTest {
262269

263270
@Test
264271
fun saveState() {
265-
ThreadUtils.sGeckoHandler = Handler()
266-
267272
val engineSession = GeckoEngineSession(mock(GeckoRuntime::class.java))
268273
engineSession.geckoSession = mock(GeckoSession::class.java)
269274
val currentState = GeckoSession.SessionState("")
270275
val stateMap = mapOf(GeckoEngineSession.GECKO_STATE_KEY to currentState.toString())
271276

277+
var first = true
278+
ThreadUtils.sGeckoHandler = object : Handler() {
279+
override fun sendMessageAtTime(msg: Message?, uptimeMillis: Long): Boolean {
280+
// Only run the saveState runnable and ignore everything that comes after
281+
if (first) {
282+
first = false
283+
return super.sendMessageAtTime(msg, uptimeMillis)
284+
}
285+
return true
286+
}
287+
}
272288
`when`(engineSession.geckoSession.saveState()).thenReturn(GeckoResult.fromValue(currentState))
273289
assertEquals(stateMap, engineSession.saveState())
274290
}

components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package mozilla.components.browser.engine.gecko
66

77
import android.os.Handler
8+
import android.os.Message
89
import mozilla.components.browser.errorpages.ErrorType
910
import mozilla.components.concept.engine.DefaultSettings
1011
import mozilla.components.concept.engine.EngineSession
@@ -22,6 +23,7 @@ import org.junit.Assert.assertFalse
2223
import org.junit.Assert.assertNotNull
2324
import org.junit.Assert.assertNull
2425
import org.junit.Assert.assertTrue
26+
import org.junit.Before
2527
import org.junit.Test
2628
import org.junit.runner.RunWith
2729
import org.mockito.ArgumentMatchers.any
@@ -55,6 +57,11 @@ import org.robolectric.RobolectricTestRunner
5557
@RunWith(RobolectricTestRunner::class)
5658
class GeckoEngineSessionTest {
5759

60+
@Before
61+
fun setup() {
62+
ThreadUtils.sGeckoHandler = null
63+
}
64+
5865
@Test
5966
fun engineSessionInitialization() {
6067
val runtime = mock(GeckoRuntime::class.java)
@@ -262,13 +269,22 @@ class GeckoEngineSessionTest {
262269

263270
@Test
264271
fun saveState() {
265-
ThreadUtils.sGeckoHandler = Handler()
266-
267272
val engineSession = GeckoEngineSession(mock(GeckoRuntime::class.java))
268273
engineSession.geckoSession = mock(GeckoSession::class.java)
269274
val currentState = GeckoSession.SessionState("")
270275
val stateMap = mapOf(GeckoEngineSession.GECKO_STATE_KEY to currentState.toString())
271276

277+
var first = true
278+
ThreadUtils.sGeckoHandler = object : Handler() {
279+
override fun sendMessageAtTime(msg: Message?, uptimeMillis: Long): Boolean {
280+
// Only run the saveState runnable and ignore everything that comes after
281+
if (first) {
282+
first = false
283+
return super.sendMessageAtTime(msg, uptimeMillis)
284+
}
285+
return true
286+
}
287+
}
272288
`when`(engineSession.geckoSession.saveState()).thenReturn(GeckoResult.fromValue(currentState))
273289
assertEquals(stateMap, engineSession.saveState())
274290
}

components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package mozilla.components.browser.engine.gecko
66

77
import android.os.Handler
8+
import android.os.Message
89
import mozilla.components.browser.errorpages.ErrorType
910
import mozilla.components.concept.engine.DefaultSettings
1011
import mozilla.components.concept.engine.EngineSession
@@ -22,6 +23,7 @@ import org.junit.Assert.assertFalse
2223
import org.junit.Assert.assertNotNull
2324
import org.junit.Assert.assertNull
2425
import org.junit.Assert.assertTrue
26+
import org.junit.Before
2527
import org.junit.Test
2628
import org.junit.runner.RunWith
2729
import org.mockito.ArgumentMatchers.any
@@ -55,6 +57,11 @@ import org.robolectric.RobolectricTestRunner
5557
@RunWith(RobolectricTestRunner::class)
5658
class GeckoEngineSessionTest {
5759

60+
@Before
61+
fun setup() {
62+
ThreadUtils.sGeckoHandler = null
63+
}
64+
5865
@Test
5966
fun engineSessionInitialization() {
6067
val runtime = mock(GeckoRuntime::class.java)
@@ -262,13 +269,22 @@ class GeckoEngineSessionTest {
262269

263270
@Test
264271
fun saveState() {
265-
ThreadUtils.sGeckoHandler = Handler()
266-
267272
val engineSession = GeckoEngineSession(mock(GeckoRuntime::class.java))
268273
engineSession.geckoSession = mock(GeckoSession::class.java)
269274
val currentState = GeckoSession.SessionState("")
270275
val stateMap = mapOf(GeckoEngineSession.GECKO_STATE_KEY to currentState.toString())
271276

277+
var first = true
278+
ThreadUtils.sGeckoHandler = object : Handler() {
279+
override fun sendMessageAtTime(msg: Message?, uptimeMillis: Long): Boolean {
280+
// Only run the saveState runnable and ignore everything that comes after
281+
if (first) {
282+
first = false
283+
return super.sendMessageAtTime(msg, uptimeMillis)
284+
}
285+
return true
286+
}
287+
}
272288
`when`(engineSession.geckoSession.saveState()).thenReturn(GeckoResult.fromValue(currentState))
273289
assertEquals(stateMap, engineSession.saveState())
274290
}

0 commit comments

Comments
 (0)