Skip to content

Instantly share code, notes, and snippets.

@yogen-p
Created April 25, 2021 15:56
Show Gist options
  • Save yogen-p/8a94f4dd6808e99eae390ee2547dda92 to your computer and use it in GitHub Desktop.
Save yogen-p/8a94f4dd6808e99eae390ee2547dda92 to your computer and use it in GitHub Desktop.
package com.yogenp.globalcodetest
import android.content.ComponentName
import android.content.Intent
import android.os.Bundle
import androidx.core.util.Preconditions
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentFactory
import androidx.fragment.app.testing.FragmentScenario
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider
import kotlinx.coroutines.ExperimentalCoroutinesApi
@ExperimentalCoroutinesApi
inline fun <reified T : Fragment> launchFragmentInHiltContainer(
fragmentArgs: Bundle? = null,
themeResId: Int = R.style.FragmentScenarioEmptyFragmentActivityTheme,
fragmentFactory: FragmentFactory? = null,
crossinline action: T.() -> Unit = {}
) {
val mainActivityIntent = Intent.makeMainActivity(
ComponentName(
ApplicationProvider.getApplicationContext(),
HiltTestActivity::class.java
)
).putExtra(FragmentScenario.EmptyFragmentActivity.THEME_EXTRAS_BUNDLE_KEY, themeResId)
ActivityScenario.launch<HiltTestActivity>(mainActivityIntent).onActivity { activity ->
fragmentFactory?.let {
activity.supportFragmentManager.fragmentFactory = it
}
val fragment = activity.supportFragmentManager.fragmentFactory.instantiate(
Preconditions.checkNotNull(T::class.java.classLoader),
T::class.java.name
)
fragment.arguments = fragmentArgs
activity.supportFragmentManager.beginTransaction()
.add(android.R.id.content, fragment, "")
.commitNow()
(fragment as T).action()
}
}
// Reference: https://github.com/philipplackner/ShoppingListTestingYT/blob/a69acedec6a42f40b54f40056b6d136b0251e9ab/app/src/androidTest/java/com/androiddevs/shoppinglisttestingyt/HiltExt.kt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment