예제 #1
0
        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),
            });
        }
예제 #2
0
        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());
        }