Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
package mozilla.components.browser.engine.gecko.translate
import androidx.test.ext.junit.runners.AndroidJUnit4
import junit.framework.TestCase.assertTrue
import mozilla.components.browser.engine.gecko.GeckoEngineSession
import mozilla.components.concept.engine.EngineSession
import mozilla.components.concept.engine.translate.TranslationEngineState
import mozilla.components.support.test.mock
import mozilla.components.support.test.whenever
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.geckoview.GeckoRuntime
import org.mozilla.geckoview.TranslationsController
@RunWith(AndroidJUnit4::class)
class GeckoTranslateSessionDelegateTest {
private lateinit var runtime: GeckoRuntime
private lateinit var mockSession: GeckoEngineSession
@Before
fun setup() {
runtime = mock()
whenever(runtime.settings).thenReturn(mock())
mockSession = GeckoEngineSession(runtime)
}
@Test
fun `WHEN onExpectedTranslate is called THEN notify onTranslateExpected`() {
var onTranslateExpectedWasCalled = false
val gecko = GeckoTranslateSessionDelegate(mockSession)
mockSession.register(
object : EngineSession.Observer {
override fun onTranslateExpected() {
onTranslateExpectedWasCalled = true
}
}
)
gecko.onExpectedTranslate(mock())
assertTrue(onTranslateExpectedWasCalled)
}
@Test
fun `WHEN onOfferTranslate is called THEN notify onTranslateOffer`() {
var onTranslateOfferWasCalled = false
val gecko = GeckoTranslateSessionDelegate(mockSession)
mockSession.register(
object : EngineSession.Observer {
override fun onTranslateOffer() {
onTranslateOfferWasCalled = true
}
}
)
gecko.onOfferTranslate(mock())
assertTrue(onTranslateOfferWasCalled)
}
@Test
fun `WHEN onTranslationStateChange is called THEN notify onTranslateStateChange AND ensure mapped values are correct`() {
var onTranslateStateChangeWasCalled = false
val gecko = GeckoTranslateSessionDelegate(mockSession)
// Mock state parameters to check Gecko to AC mapping is correctly occurring
val userLangTag = "en"
val isDocLangTagSupported = true
val docLangTag = "es"
val fromLanguage = "de"
val toLanguage = "bg"
val error = "Error!"
val isEngineReady = false
val hasVisibleChange = true
mockSession.register(
object : EngineSession.Observer {
override fun onTranslateStateChange(state: TranslationEngineState) {
onTranslateStateChangeWasCalled = true
assertTrue(state.detectedLanguages?.userPreferredLangTag == userLangTag)
assertTrue(state.detectedLanguages?.supportedDocumentLang == isDocLangTagSupported)
assertTrue(state.detectedLanguages?.documentLangTag == docLangTag)
assertTrue(state.requestedTranslationPair?.fromLanguage == fromLanguage)
assertTrue(state.requestedTranslationPair?.toLanguage == toLanguage)
assertTrue(state.error == error)
assertTrue(state.isEngineReady == isEngineReady)
assertTrue(state.hasVisibleChange == hasVisibleChange)
}
}
)
// Mock states
val mockDetectedLanguages =
TranslationsController.SessionTranslation.DetectedLanguages(userLangTag, isDocLangTagSupported, docLangTag)
val mockTranslationsPair = TranslationsController.SessionTranslation.TranslationPair(fromLanguage, toLanguage)
val mockGeckoState =
TranslationsController.SessionTranslation.TranslationState(
mockTranslationsPair,
error,
mockDetectedLanguages,
isEngineReady,
hasVisibleChange,
)
gecko.onTranslationStateChange(mock(), mockGeckoState)
assertTrue(onTranslateStateChangeWasCalled)
}
}