/* 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 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.fenix import androidx.appcompat.app.ActionBar import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import io.mockk.mockk import org.robolectric.Robolectric class MockNavHostActivity : AppCompatActivity(), NavHostActivity { private val mockActionBar = mockk(relaxed = true) override fun getSupportActionBarAndInflateIfNecessary() = mockActionBar } /** * Set up an added [Fragment] to a [FragmentActivity] that has been initialized to a resumed state. * * Variant of [mozilla.components.support.test.robolectric.createAddedTestFragment] that uses * a custom Fenix activity to hold the fragment. * * @param fragmentTag the name that will be used to tag the fragment inside the [FragmentManager]. * @param fragmentFactory a lambda function that returns a Fragment that will be added to the Activity. * * @return The same [Fragment] that was returned from [fragmentFactory] after it got added to the * Activity. */ inline fun createAddedTestFragmentInNavHostActivity( fragmentTag: String = "test", fragmentFactory: () -> T ): T { val activity = Robolectric.buildActivity(MockNavHostActivity::class.java) .create() .start() .resume() .get() return fragmentFactory().also { activity.supportFragmentManager.beginTransaction() .add(it, fragmentTag) .commitNow() } }