Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Matthew Finkel
fenix
Commits
1d5f74d8
Commit
1d5f74d8
authored
Nov 16, 2020
by
Christian Sadilek
Browse files
Closes #16153: Intermittent failures of ShareControllerTest.handleShareToApp
parent
0d37c8f2
Changes
2
Hide whitespace changes
Inline
Side-by-side
app/src/main/java/org/mozilla/fenix/share/ShareController.kt
View file @
1d5f74d8
...
...
@@ -16,10 +16,11 @@ import android.net.Uri
import
androidx.annotation.VisibleForTesting
import
androidx.navigation.NavController
import
com.google.android.material.snackbar.Snackbar
import
kotlinx.coroutines.CoroutineDispatcher
import
kotlinx.coroutines.CoroutineScope
import
kotlinx.coroutines.GlobalScope
import
kotlinx.coroutines.Deferred
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.GlobalScope
import
kotlinx.coroutines.launch
import
mozilla.components.concept.engine.prompt.ShareData
import
mozilla.components.concept.sync.Device
...
...
@@ -74,6 +75,7 @@ class DefaultShareController(
private
val
navController
:
NavController
,
private
val
recentAppsStorage
:
RecentAppsStorage
,
private
val
viewLifecycleScope
:
CoroutineScope
,
private
val
dispatcher
:
CoroutineDispatcher
=
Dispatchers
.
IO
,
private
val
dismiss
:
(
ShareController
.
Result
)
->
Unit
)
:
ShareController
{
...
...
@@ -88,7 +90,7 @@ class DefaultShareController(
}
override
fun
handleShareToApp
(
app
:
AppShareOption
)
{
viewLifecycleScope
.
launch
(
D
ispatcher
s
.
IO
)
{
viewLifecycleScope
.
launch
(
d
ispatcher
)
{
recentAppsStorage
.
updateRecentApp
(
app
.
activityName
)
}
...
...
app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt
View file @
1d5f74d8
...
...
@@ -20,6 +20,7 @@ import io.mockk.verify
import
io.mockk.verifyOrder
import
kotlinx.coroutines.ExperimentalCoroutinesApi
import
kotlinx.coroutines.runBlocking
import
kotlinx.coroutines.test.TestCoroutineDispatcher
import
kotlinx.coroutines.test.TestCoroutineScope
import
mozilla.components.concept.engine.prompt.ShareData
import
mozilla.components.concept.sync.Device
...
...
@@ -28,11 +29,13 @@ import mozilla.components.concept.sync.TabData
import
mozilla.components.feature.accounts.push.SendTabUseCases
import
mozilla.components.feature.share.RecentAppsStorage
import
mozilla.components.support.test.robolectric.testContext
import
mozilla.components.support.test.rule.MainCoroutineRule
import
org.junit.After
import
org.junit.Assert.assertEquals
import
org.junit.Assert.assertNotEquals
import
org.junit.Assert.assertTrue
import
org.junit.Before
import
org.junit.Rule
import
org.junit.Test
import
org.junit.runner.RunWith
import
org.mozilla.fenix.R
...
...
@@ -62,6 +65,7 @@ class ShareControllerTest {
TabData
(
"title1"
,
"url1"
)
)
private
val
textToShare
=
"${shareData[0].url}\n\n${shareData[1].url}"
private
val
testDispatcher
=
TestCoroutineDispatcher
()
private
val
testCoroutineScope
=
TestCoroutineScope
()
private
val
sendTabUseCases
=
mockk
<
SendTabUseCases
>(
relaxed
=
true
)
private
val
snackbar
=
mockk
<
FenixSnackbar
>(
relaxed
=
true
)
...
...
@@ -70,9 +74,12 @@ class ShareControllerTest {
private
val
recentAppStorage
=
mockk
<
RecentAppsStorage
>(
relaxed
=
true
)
private
val
controller
=
DefaultShareController
(
context
,
shareSubject
,
shareData
,
sendTabUseCases
,
snackbar
,
navController
,
recentAppStorage
,
testCoroutineScope
,
dismiss
recentAppStorage
,
testCoroutineScope
,
testDispatcher
,
dismiss
)
@
get
:
Rule
val
coroutinesTestRule
=
MainCoroutineRule
(
testDispatcher
)
@Before
fun
setUp
()
{
every
{
context
.
metrics
}
returns
metrics
...
...
@@ -102,12 +109,13 @@ class ShareControllerTest {
val
activityContext
:
Context
=
mockk
<
Activity
>()
val
testController
=
DefaultShareController
(
activityContext
,
shareSubject
,
shareData
,
mockk
(),
mockk
(),
mockk
(),
recentAppStorage
,
testCoroutineScope
,
dismiss
mockk
(),
mockk
(),
recentAppStorage
,
testCoroutineScope
,
testDispatcher
,
dismiss
)
every
{
activityContext
.
startActivity
(
capture
(
shareIntent
))
}
just
Runs
every
{
recentAppStorage
.
updateRecentApp
(
appShareOption
.
activityName
)
}
just
Runs
testController
.
handleShareToApp
(
appShareOption
)
testDispatcher
.
advanceUntilIdle
()
// Check that the Intent used for querying apps has the expected structure
assertTrue
(
shareIntent
.
isCaptured
)
...
...
@@ -138,7 +146,7 @@ class ShareControllerTest {
val
activityContext
:
Context
=
mockk
<
Activity
>()
val
testController
=
DefaultShareController
(
activityContext
,
shareSubject
,
shareData
,
mockk
(),
snackbar
,
mockk
(),
recentAppStorage
,
testCoroutineScope
,
dismiss
snackbar
,
mockk
(),
recentAppStorage
,
testCoroutineScope
,
testDispatcher
,
dismiss
)
every
{
recentAppStorage
.
updateRecentApp
(
appShareOption
.
activityName
)
}
just
Runs
every
{
activityContext
.
startActivity
(
capture
(
shareIntent
))
}
throws
SecurityException
()
...
...
@@ -166,7 +174,7 @@ class ShareControllerTest {
val
activityContext
:
Context
=
mockk
<
Activity
>()
val
testController
=
DefaultShareController
(
activityContext
,
shareSubject
,
shareData
,
mockk
(),
snackbar
,
mockk
(),
recentAppStorage
,
testCoroutineScope
,
dismiss
snackbar
,
mockk
(),
recentAppStorage
,
testCoroutineScope
,
testDispatcher
,
dismiss
)
every
{
recentAppStorage
.
updateRecentApp
(
appShareOption
.
activityName
)
}
just
Runs
every
{
activityContext
.
startActivity
(
capture
(
shareIntent
))
}
throws
ActivityNotFoundException
()
...
...
@@ -316,6 +324,7 @@ class ShareControllerTest {
mockk
(),
mockk
(),
mockk
(),
mockk
(),
mockk
()
)
val
controllerWithMoreSharedTabs
=
controller
...
...
@@ -344,7 +353,7 @@ class ShareControllerTest {
)
val
controller
=
DefaultShareController
(
context
,
shareSubject
,
shareData
,
sendTabUseCases
,
snackbar
,
navController
,
recentAppStorage
,
testCoroutineScope
,
dismiss
recentAppStorage
,
testCoroutineScope
,
testDispatcher
,
dismiss
)
val
expectedShareText
=
"${shareData[0].url}\n\nurl0\n\n${shareData[2].url}"
...
...
@@ -360,7 +369,7 @@ class ShareControllerTest {
fun
`getShareSubject
will
return
a
concatenation
of
tab
titles
if
"shareSubject"
is
null
`
()
{
val
controller
=
DefaultShareController
(
context
,
null
,
shareData
,
sendTabUseCases
,
snackbar
,
navController
,
recentAppStorage
,
testCoroutineScope
,
dismiss
recentAppStorage
,
testCoroutineScope
,
testDispatcher
,
dismiss
)
assertEquals
(
"title0, title1"
,
controller
.
getShareSubject
())
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment