From 57a08d269e5284cc655ae51d72e008d9f84d1dd5 Mon Sep 17 00:00:00 2001 From: Pawel Obarzanek Date: Fri, 22 Nov 2019 01:44:08 +0100 Subject: [PATCH] [fenix] Closes mozilla-mobilehttps://github.com/mozilla-mobile/fenix/issues/5458 Tests for IntentReceiverActivity to verify outcoming intent (https://github.com/mozilla-mobile/fenix/pull/6130) --- .../fenix/IntentReceiverActivityTest.kt | 125 ++++++++++++++---- 1 file changed, 99 insertions(+), 26 deletions(-) diff --git a/app/src/test/java/org/mozilla/fenix/IntentReceiverActivityTest.kt b/app/src/test/java/org/mozilla/fenix/IntentReceiverActivityTest.kt index 5f54f9a5e2..2816120959 100644 --- a/app/src/test/java/org/mozilla/fenix/IntentReceiverActivityTest.kt +++ b/app/src/test/java/org/mozilla/fenix/IntentReceiverActivityTest.kt @@ -5,9 +5,11 @@ package org.mozilla.fenix import android.content.Intent +import android.content.Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runBlockingTest import mozilla.components.support.test.robolectric.testContext +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito.`when` @@ -15,8 +17,10 @@ import org.mockito.Mockito.never import org.mockito.Mockito.verify import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.shortcut.NewTabShortcutIntentProcessor import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner +import org.robolectric.Shadows.shadowOf import org.robolectric.annotation.Config @ExperimentalCoroutinesApi @@ -25,37 +29,106 @@ import org.robolectric.annotation.Config class IntentReceiverActivityTest { @Test - fun `process intent with launchLinksInPrivateTab set to true`() { - runBlockingTest { - testContext.settings().openLinksInAPrivateTab = true - - val intent = Intent() - `when`(testContext.components.intentProcessors.privateIntentProcessor.process(intent)).thenReturn(true) - val activity = Robolectric.buildActivity(IntentReceiverActivity::class.java, intent).get() - activity.processIntent(intent) - - // Not using mockk here because process is a suspend function - // and mockito makes this easier to read. - verify(testContext.components.intentProcessors.intentProcessor, never()).process(intent) - verify(testContext.components.intentProcessors.privateIntentProcessor).process(intent) - } + fun `process intent with flag launched from history`() = runBlockingTest { + testContext.settings().openLinksInAPrivateTab = false + + val intent = Intent() + intent.flags = FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY + + `when`(testContext.components.intentProcessors.intentProcessor.process(intent)).thenReturn(true) + `when`(testContext.components.intentProcessors.intentProcessor.matches(intent)).thenReturn(true) + val activity = Robolectric.buildActivity(IntentReceiverActivity::class.java, intent).get() + activity.processIntent(intent) + + val shadow = shadowOf(activity) + val actualIntent = shadow.peekNextStartedActivity() + + assertEquals(HomeActivity::class.java.name, actualIntent.component?.className) + assertEquals(true, actualIntent.flags == FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) + } + + @Test + fun `process intent with action OPEN_PRIVATE_TAB`() = runBlockingTest { + testContext.settings().openLinksInAPrivateTab = false + + val intent = Intent() + intent.action = NewTabShortcutIntentProcessor.ACTION_OPEN_PRIVATE_TAB + + `when`(testContext.components.intentProcessors.intentProcessor.process(intent)).thenReturn(false) + val activity = Robolectric.buildActivity(IntentReceiverActivity::class.java, intent).get() + activity.processIntent(intent) + + val shadow = shadowOf(activity) + val actualIntent = shadow.peekNextStartedActivity() + + assertEquals(HomeActivity::class.java.name, actualIntent.component?.className) + assertEquals(true, actualIntent.getBooleanExtra(HomeActivity.PRIVATE_BROWSING_MODE, false)) + assertEquals(false, actualIntent.getBooleanExtra(HomeActivity.OPEN_TO_BROWSER, true)) + } + + @Test + fun `process intent with action OPEN_TAB`() = runBlockingTest { + testContext.settings().openLinksInAPrivateTab = false + + val intent = Intent() + intent.action = NewTabShortcutIntentProcessor.ACTION_OPEN_TAB + + `when`(testContext.components.intentProcessors.intentProcessor.process(intent)).thenReturn(true) + val activity = Robolectric.buildActivity(IntentReceiverActivity::class.java, intent).get() + activity.processIntent(intent) + + val shadow = shadowOf(activity) + val actualIntent = shadow.peekNextStartedActivity() + + assertEquals(HomeActivity::class.java.name, actualIntent.component?.className) + assertEquals(false, actualIntent.hasExtra(HomeActivity.PRIVATE_BROWSING_MODE)) + assertEquals(false, actualIntent.getBooleanExtra(HomeActivity.OPEN_TO_BROWSER, true)) + } + + @Test + fun `process intent starts Activity`() = runBlockingTest { + testContext.settings().openLinksInAPrivateTab = false + + val intent = Intent() + `when`(testContext.components.intentProcessors.intentProcessor.process(intent)).thenReturn(true) + val activity = Robolectric.buildActivity(IntentReceiverActivity::class.java, intent).get() + activity.processIntent(intent) + + val shadow = shadowOf(activity) + val actualIntent = shadow.peekNextStartedActivity() + + assertEquals(HomeActivity::class.java.name, actualIntent.component?.className) + assertEquals(false, actualIntent.getBooleanExtra(HomeActivity.OPEN_TO_BROWSER, true)) + } + + @Test + fun `process intent with launchLinksInPrivateTab set to true`() = runBlockingTest { + testContext.settings().openLinksInAPrivateTab = true + + val intent = Intent() + `when`(testContext.components.intentProcessors.privateIntentProcessor.process(intent)).thenReturn(true) + val activity = Robolectric.buildActivity(IntentReceiverActivity::class.java, intent).get() + activity.processIntent(intent) + + // Not using mockk here because process is a suspend function + // and mockito makes this easier to read. + verify(testContext.components.intentProcessors.intentProcessor, never()).process(intent) + verify(testContext.components.intentProcessors.privateIntentProcessor).process(intent) } @Test - fun `process intent with launchLinksInPrivateTab set to false`() { - runBlockingTest { - testContext.settings().openLinksInAPrivateTab = false + fun `process intent with launchLinksInPrivateTab set to false`() = runBlockingTest { + testContext.settings().openLinksInAPrivateTab = false - val intent = Intent() - `when`(testContext.components.intentProcessors.intentProcessor.process(intent)).thenReturn(true) + val intent = Intent() + `when`(testContext.components.intentProcessors.intentProcessor.process(intent)).thenReturn(true) - val activity = Robolectric.buildActivity(IntentReceiverActivity::class.java, intent).get() - activity.processIntent(intent) + val activity = Robolectric.buildActivity(IntentReceiverActivity::class.java, intent).get() + activity.processIntent(intent) - // Not using mockk here because process is a suspend function - // and mockito makes this easier to read. - verify(testContext.components.intentProcessors.privateIntentProcessor, never()).process(intent) - verify(testContext.components.intentProcessors.intentProcessor).process(intent) - } + // Not using mockk here because process is a suspend function + // and mockito makes this easier to read. + verify(testContext.components.intentProcessors.privateIntentProcessor, never()).process(intent) + verify(testContext.components.intentProcessors.intentProcessor).process(intent) } }