From fd57c065b5df8b2bc27f4fdf1187eb647cdcce42 Mon Sep 17 00:00:00 2001 From: Laimonas Turauskas Date: Tue, 28 Nov 2023 14:07:25 -0800 Subject: [PATCH] Add test. --- .../instacart/formula/FormulaRuntimeTest.kt | 59 +++++++++++-------- .../formula/internal/ClearPluginsRule.kt | 21 +++++++ 2 files changed, 57 insertions(+), 23 deletions(-) create mode 100644 formula/src/test/java/com/instacart/formula/internal/ClearPluginsRule.kt diff --git a/formula/src/test/java/com/instacart/formula/FormulaRuntimeTest.kt b/formula/src/test/java/com/instacart/formula/FormulaRuntimeTest.kt index 2252e52c..cb814e90 100644 --- a/formula/src/test/java/com/instacart/formula/FormulaRuntimeTest.kt +++ b/formula/src/test/java/com/instacart/formula/FormulaRuntimeTest.kt @@ -3,6 +3,7 @@ package com.instacart.formula import com.google.common.truth.Truth import com.google.common.truth.Truth.assertThat import com.instacart.formula.actions.EmptyAction +import com.instacart.formula.internal.ClearPluginsRule import com.instacart.formula.internal.TestInspector import com.instacart.formula.internal.Try import com.instacart.formula.rxjava3.RxAction @@ -79,6 +80,7 @@ import org.junit.rules.RuleChain import org.junit.rules.TestName import org.junit.runner.RunWith import org.junit.runners.Parameterized +import kotlin.reflect.KClass @RunWith(Parameterized::class) class FormulaRuntimeTest(val runtime: TestableRuntime, val name: String) { @@ -92,7 +94,10 @@ class FormulaRuntimeTest(val runtime: TestableRuntime, val name: String) { } @get:Rule - val rule = RuleChain.outerRule(TestName()).around(runtime.rule) + val rule = RuleChain + .outerRule(TestName()) + .around(ClearPluginsRule()) + .around(runtime.rule) @Test fun `state change triggers an evaluation`() { val formula = EventCallbackFormula() @@ -1249,33 +1254,41 @@ class FormulaRuntimeTest(val runtime: TestableRuntime, val name: String) { @Test fun `inspector events`() { + val globalInspector = TestInspector() + FormulaPlugins.setPlugin(object : Plugin { + override fun inspector(type: KClass<*>): Inspector { + return globalInspector + } + }) val formula = StartStopFormula(runtime) - val inspector = TestInspector() - val subject = runtime.test(formula, Unit, inspector) + val localInspector = TestInspector() + val subject = runtime.test(formula, Unit, localInspector) subject.output { startListening() } subject.output { stopListening() } subject.dispose() - assertThat(inspector.events).containsExactly( - "formula-run-started", - "formula-started: com.instacart.formula.subjects.StartStopFormula", - "evaluate-started: com.instacart.formula.subjects.StartStopFormula", - "evaluate-finished: com.instacart.formula.subjects.StartStopFormula", - "formula-run-finished", - "state-changed: com.instacart.formula.subjects.StartStopFormula", - "formula-run-started", - "evaluate-started: com.instacart.formula.subjects.StartStopFormula", - "evaluate-finished: com.instacart.formula.subjects.StartStopFormula", - "action-started: com.instacart.formula.subjects.StartStopFormula", - "formula-run-finished", - "state-changed: com.instacart.formula.subjects.StartStopFormula", - "formula-run-started", - "evaluate-started: com.instacart.formula.subjects.StartStopFormula", - "evaluate-finished: com.instacart.formula.subjects.StartStopFormula", - "action-finished: com.instacart.formula.subjects.StartStopFormula", - "formula-run-finished", - "formula-finished: com.instacart.formula.subjects.StartStopFormula" - ).inOrder() + for (inspector in listOf(globalInspector, localInspector)) { + assertThat(inspector.events).containsExactly( + "formula-run-started", + "formula-started: com.instacart.formula.subjects.StartStopFormula", + "evaluate-started: com.instacart.formula.subjects.StartStopFormula", + "evaluate-finished: com.instacart.formula.subjects.StartStopFormula", + "formula-run-finished", + "state-changed: com.instacart.formula.subjects.StartStopFormula", + "formula-run-started", + "evaluate-started: com.instacart.formula.subjects.StartStopFormula", + "evaluate-finished: com.instacart.formula.subjects.StartStopFormula", + "action-started: com.instacart.formula.subjects.StartStopFormula", + "formula-run-finished", + "state-changed: com.instacart.formula.subjects.StartStopFormula", + "formula-run-started", + "evaluate-started: com.instacart.formula.subjects.StartStopFormula", + "evaluate-finished: com.instacart.formula.subjects.StartStopFormula", + "action-finished: com.instacart.formula.subjects.StartStopFormula", + "formula-run-finished", + "formula-finished: com.instacart.formula.subjects.StartStopFormula" + ).inOrder() + } } } diff --git a/formula/src/test/java/com/instacart/formula/internal/ClearPluginsRule.kt b/formula/src/test/java/com/instacart/formula/internal/ClearPluginsRule.kt new file mode 100644 index 00000000..e4dbb7b6 --- /dev/null +++ b/formula/src/test/java/com/instacart/formula/internal/ClearPluginsRule.kt @@ -0,0 +1,21 @@ +package com.instacart.formula.internal + +import com.instacart.formula.FormulaPlugins +import org.junit.rules.TestRule +import org.junit.runner.Description +import org.junit.runners.model.Statement + +class ClearPluginsRule : TestRule { + override fun apply(base: Statement, description: Description): Statement { + return object : Statement() { + override fun evaluate() { + FormulaPlugins.setPlugin(null) + try { + base.evaluate() + } finally { + FormulaPlugins.setPlugin(null) + } + } + } + } +} \ No newline at end of file