Index: Core/Common/test/Core.Common.Base.Test/RecursiveObserverTest.cs =================================================================== diff -u -r07b0e83704b56684d617cd6e8b8570417654912a -rb04b130df2b11fd54962e4a0b9be92265e580831 --- Core/Common/test/Core.Common.Base.Test/RecursiveObserverTest.cs (.../RecursiveObserverTest.cs) (revision 07b0e83704b56684d617cd6e8b8570417654912a) +++ Core/Common/test/Core.Common.Base.Test/RecursiveObserverTest.cs (.../RecursiveObserverTest.cs) (revision b04b130df2b11fd54962e4a0b9be92265e580831) @@ -148,6 +148,44 @@ Assert.AreEqual(0, counter); } + [TestCase(1)] + [TestCase(2)] + [TestCase(100)] + public void RecursiveObserver_WithObservableHierarchySetAndThenObservedItemRemoved_NotifyObserversForRemovedItemNoLongerResultsInPerformingUpdateObserversAction(int nestingLevel) + { + // Setup + var counter = 0; + var rootObservable = new TestObservable(); + + var previousNestedObservable = new TestObservable(); + var currentNestedObservable = rootObservable; + + for (var i = 0; i < nestingLevel; i++) + { + var newObservable = new TestObservable(); + + currentNestedObservable.ChildTestObservables.Add(newObservable); + + previousNestedObservable = currentNestedObservable; + currentNestedObservable = newObservable; + } + + var recursiveObserver = new RecursiveObserver(() => counter++, GetChildObservables) + { + Observable = rootObservable + }; + + previousNestedObservable.ChildTestObservables.Clear(); + previousNestedObservable.NotifyObservers(); + counter = 0; + + // Call + currentNestedObservable.NotifyObservers(); + + // Assert + Assert.AreEqual(0, counter); + } + private class TestObservable : Observable { private readonly IList childTestObservables = new List();