diff --git a/Runtime/Core/AtomBase.cs b/Runtime/Core/AtomBase.cs index 44162a2..ea35b64 100644 --- a/Runtime/Core/AtomBase.cs +++ b/Runtime/Core/AtomBase.cs @@ -146,14 +146,16 @@ public void Actualize(bool force = false) protected void ObsoleteSubscribers() { - if (subscribers == null) + if (subscribers != null) { - return; + for (var i = 0; i < subscribersCount; i++) + { + subscribers[i].Obsolete(); + } } - - for (var i = 0; i < subscribersCount; i++) + else if (options.Has(AtomOptions.AutoActualize)) { - subscribers[i].Obsolete(); + AtomScheduler.Actualize(this); } } diff --git a/Tests/AtomTests.cs b/Tests/AtomTests.cs index 11d16b6..f86f93d 100644 --- a/Tests/AtomTests.cs +++ b/Tests/AtomTests.cs @@ -430,7 +430,7 @@ public void ReactionUpdatesOnce() AtomScheduler.Sync(); Assert.AreEqual("BB", watch); } - + [Test] public void ReactionWithExceptionUpdatesOnce() { @@ -621,5 +621,50 @@ public void SubscriptionOnDisposedAtomDoesNotLeadToActualization() AtomScheduler.Sync(); } + + [Test] + public void SuspendOnInvalidationWithoutKeepAlive() + { + var num = 0; + var atom = Atom.Computed(Lifetime, () => num += 1, keepAlive: false); + atom.Get(); + + Assert.AreEqual(1, num); + + atom.Invalidate(); + AtomScheduler.Sync(); + + Assert.AreEqual(1, num); + } + + [Test] + public void ActualizeOnInvalidationWithKeepAlive() + { + var num = 0; + var atom = Atom.Computed(Lifetime, () => num += 1, keepAlive: true); + atom.Get(); + + Assert.AreEqual(1, num); + + atom.Invalidate(); + AtomScheduler.Sync(); + + Assert.AreEqual(2, num); + } + + [Test] + public void SuspendOnDeactivationWithKeepAlive() + { + var num = 0; + var atom = Atom.Computed(Lifetime, () => num += 1, keepAlive: true); + atom.Get(); + + Assert.AreEqual(1, num); + + atom.Deactivate(); + AtomScheduler.Sync(); + + Assert.AreEqual(1, num); + } } } \ No newline at end of file diff --git a/package.json b/package.json index 3d3f3ca..ca6262f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "com.codewriter.unimob", "displayName": "UniMob", "description": "Reactive state management for Unity", - "version": "2.1.3", + "version": "2.1.4", "unity": "2019.3", "license": "MIT", "keywords": [