From ecb2eebf38c3bb9ea4fc0b251cd0712752006855 Mon Sep 17 00:00:00 2001 From: alex-greben Date: Mon, 10 Apr 2023 17:03:14 +0300 Subject: [PATCH] Subscribe to var changes before invoke observer --- .../expression/variables/VariableController.kt | 2 +- .../variables/VariableControllerTest.kt | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/client/android/div/src/main/java/com/yandex/div/core/expression/variables/VariableController.kt b/client/android/div/src/main/java/com/yandex/div/core/expression/variables/VariableController.kt index a7d1b125b..c169a3544 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/expression/variables/VariableController.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/expression/variables/VariableController.kt @@ -97,8 +97,8 @@ internal class VariableController { } private fun onVariableDeclared(variable: Variable) { - notifyVariableChanged(variable) variable.addObserver(notifyVariableChangedCallback) + notifyVariableChanged(variable) } fun getMutableVariable(name: String): Variable? { diff --git a/client/android/div/src/test/java/com/yandex/div/core/expression/variables/VariableControllerTest.kt b/client/android/div/src/test/java/com/yandex/div/core/expression/variables/VariableControllerTest.kt index 4a371f6dd..ba547dc9e 100644 --- a/client/android/div/src/test/java/com/yandex/div/core/expression/variables/VariableControllerTest.kt +++ b/client/android/div/src/test/java/com/yandex/div/core/expression/variables/VariableControllerTest.kt @@ -74,6 +74,21 @@ class VariableControllerTest { Assert.assertEquals("non-initialized", lastValue) } + @Test + fun `variable changed inside declaration callback`() { + val variable = Variable.StringVariable("late_init_variable", "declared_value") + var counter = 0 + subscribe(variable.name) { + if (counter < 5) { + counter++ + variable.set("new_value_$counter") + } + } + + declareVariable(variable) + Assert.assertEquals(5, counter) + } + @Test fun `null returned when no variable specified`() { Assert.assertNull(variableController.getMutableVariable("unknown_variable"))