Skip to content

Commit

Permalink
More tests for formula-android.
Browse files Browse the repository at this point in the history
  • Loading branch information
Laimiux committed Sep 17, 2024
1 parent f4e4e33 commit 3c42004
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 2 deletions.
14 changes: 14 additions & 0 deletions formula-android-tests/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,19 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity android:name="com.instacart.formula.NonBoundActivityTest$TestActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity android:name="com.instacart.formula.NonBoundFragmentActivityTest$TestActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.instacart.formula

import android.app.Activity
import androidx.fragment.app.FragmentActivity
import androidx.test.core.app.ActivityScenario
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.RuleChain
import org.junit.runner.RunWith

/**
* Tests that formula-android module handles non-bound activities gracefully.
*/
@RunWith(AndroidJUnit4::class)
class NonBoundActivityTest {
class TestActivity : Activity()

private val formulaRule = TestFormulaRule(
initFormula = { app ->
FormulaAndroid.init(app) {}
}
)

private val activityRule = ActivityScenarioRule(TestActivity::class.java)

@get:Rule
val rule = RuleChain.outerRule(formulaRule).around(activityRule)
lateinit var scenario: ActivityScenario<TestActivity>

@Before
fun setup() {
scenario = activityRule.scenario
}

@Test
fun `full lifecycle`() {
scenario.recreate()
scenario.close()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.instacart.formula

import androidx.fragment.app.FragmentActivity
import androidx.test.core.app.ActivityScenario
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.RuleChain
import org.junit.runner.RunWith

/**
* Tests that formula-android module handles non-bound activities gracefully.
*/
@RunWith(AndroidJUnit4::class)
class NonBoundFragmentActivityTest {
class TestActivity : FragmentActivity()

private val formulaRule = TestFormulaRule(
initFormula = { app ->
FormulaAndroid.init(app) {}
}
)

private val activityRule = ActivityScenarioRule(TestActivity::class.java)

@get:Rule
val rule = RuleChain.outerRule(formulaRule).around(activityRule)
lateinit var scenario: ActivityScenario<TestActivity>

@Before
fun setup() {
scenario = activityRule.scenario
}

@Test
fun `full lifecycle`() {
scenario.recreate()
scenario.close()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import kotlin.reflect.KClass
*/
class ActivityConfigurator {
internal class Binding<A : FragmentActivity>(
val init: ActivityStoreContext<A>.() -> ActivityStore<A>?
val init: ActivityStoreContext<A>.() -> ActivityStore<A>
)

internal val bindings = mutableMapOf<KClass<*>, Binding<*>>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ internal class ActivityStoreFactory internal constructor(
?: return null

val activityDelegate = ActivityStoreContextImpl<A>()
return initializer.init.invoke(activityDelegate)?.let { store ->
return initializer.init.invoke(activityDelegate).let { store ->
ActivityManager(
environment = environment,
delegate = activityDelegate,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,14 @@ class ActivityStoreFactoryTest {
val store = factory.init(mock<FakeActivity>())!!
assertThat(store.stateSubscription.isDisposed).isFalse()
}

@Test fun `returns null if no binding for activity is found`() {
val factory = ActivityStoreFactory(
environment = FragmentEnvironment(),
activities = {}
)

val store = factory.init(mock<FakeActivity>())
assertThat(store).isNull()
}
}

0 comments on commit 3c42004

Please sign in to comment.