public Context(IElement app, Func <ObjectIdentifier, IElement> getElement) { _getElement = getElement; CurrentSelection = _scope.Peek .Select(scope => scope.MatchWith( some: s => s.CurrentSelection, none: () => Observable.Return(Element.Empty))) .Switch() .Switch(); PreviewedSelection = _scope.Peek .Select(scope => scope.MatchWith( some: s => s.PreviewedSelection, none: () => Observable.Return(Element.Empty))) .Switch() .Switch(); CurrentScope = _scope.Peek .SelectPerElement(scope => scope.Root) .Or(Element.Empty).Switch(); PreviousScope = _scope.PeekUnder .SelectPerElement(scope => scope.Root) .Or(Element.Empty).Switch(); _scope.Replace(_root = new Scope { Root = app, CurrentSelection = new BehaviorSubject <IElement>(Element.Empty), PreviewedSelection = new BehaviorSubject <IElement>(Element.Empty), }); }
public async Task Replace() { var stack = new ObservableStack <int>(); // Initialize stack to be replaced stack.Push(13); stack.Push(37); // Replace all elements stack.Replace(1, 2, 3); Assert.AreEqual(Optional.Some(3), await stack.Peek.FirstAsync()); Assert.AreEqual(Optional.Some(2), await stack.PeekUnder.FirstAsync()); // Pop them off again stack.Pop(); Assert.AreEqual(Optional.Some(2), await stack.Peek.FirstAsync()); Assert.AreEqual(Optional.Some(1), await stack.PeekUnder.FirstAsync()); stack.Pop(); Assert.AreEqual(Optional.Some(1), await stack.Peek.FirstAsync()); Assert.AreEqual(Optional.None <int>(), await stack.PeekUnder.FirstAsync()); stack.Pop(); Assert.AreEqual(Optional.None <int>(), await stack.Peek.FirstAsync()); Assert.AreEqual(Optional.None <int>(), await stack.PeekUnder.FirstAsync()); // Push after it was cleared stack.Push(1); Assert.AreEqual(1, stack.Value); Assert.AreEqual(Optional.Some(1), await stack.Peek.FirstAsync()); Assert.AreEqual(Optional.None <int>(), await stack.PeekUnder.FirstAsync()); }