public void OnMoveB()
        {
            //Arrange
            ObservableCollection <A> sourceCollectionA = FilledCollectionA;
            ObservableCollection <B> sourceCollectionB = FilledCollectionB;
            ConcatenatingObservableReadOnlyList <Super> readOnlyList =
                ConcatenatingObservableReadOnlyList <Super> .Concatenate(sourceCollectionA, sourceCollectionB);

            int moveFromIndex = 1;
            int moveToIndex   = 3;
            B   movedB        = sourceCollectionB[moveFromIndex];

            readOnlyList.CollectionChanged += (sender, args) =>
            {
                Assert.Equal(NotifyCollectionChangedAction.Move, args.Action);
                Assert.Equal(sourceCollectionA.Count + moveFromIndex, args.OldStartingIndex);
                Assert.Equal(sourceCollectionA.Count + moveToIndex, args.NewStartingIndex);
                Assert.Same(movedB, args.NewItems[0]);
            };

            //Act
            sourceCollectionB.Move(moveFromIndex, moveToIndex);

            //Assert
            StandardCheck(sourceCollectionA, sourceCollectionB, readOnlyList);
        }
        public void OnReplaceB()
        {
            //Arrange
            ObservableCollection <A> sourceCollectionA = FilledCollectionA;
            ObservableCollection <B> sourceCollectionB = FilledCollectionB;
            ConcatenatingObservableReadOnlyList <Super> readOnlyList =
                ConcatenatingObservableReadOnlyList <Super> .Concatenate(sourceCollectionA, sourceCollectionB);

            B   replacingB   = new B();
            int replaceIndex = 1;
            B   replacedB    = (B)readOnlyList[sourceCollectionA.Count + replaceIndex];

            readOnlyList.CollectionChanged += (sender, args) =>
            {
                Assert.Equal(NotifyCollectionChangedAction.Replace, args.Action);
                Assert.Equal(sourceCollectionA.Count + replaceIndex, args.OldStartingIndex);
                Assert.Equal(sourceCollectionA.Count + replaceIndex, args.NewStartingIndex);
                Assert.Same(replacingB, args.NewItems[0]);
            };

            //Act
            sourceCollectionB[replaceIndex] = replacingB;

            //Assert
            Assert.NotSame(replacedB, readOnlyList[replaceIndex]);
            StandardCheck(sourceCollectionA, sourceCollectionB, readOnlyList);
        }
        public void OnReplaceA()
        {
            //Arrange
            ObservableCollection <A>                    sourceCollectionA  = FilledCollectionA;
            ObservableCollection <B>                    sourceCollectionB  = FilledCollectionB;
            WrappingObservableReadOnlyList <A>          wrappedCollectionA = new WrappingObservableReadOnlyList <A>(sourceCollectionA);
            WrappingObservableReadOnlyList <B>          wrappedCollectionB = new WrappingObservableReadOnlyList <B>(sourceCollectionB);
            ConcatenatingObservableReadOnlyList <Super> readOnlyList       =
                new ConcatenatingObservableReadOnlyList <Super>(wrappedCollectionA, wrappedCollectionB);
            A   replacingA   = new A();
            int replaceIndex = 1;
            A   replacedA    = (A)readOnlyList[replaceIndex];

            readOnlyList.CollectionChanged += (sender, args) =>
            {
                Assert.Equal(NotifyCollectionChangedAction.Replace, args.Action);
                Assert.Equal(replaceIndex, args.OldStartingIndex);
                Assert.Equal(replaceIndex, args.NewStartingIndex);
                Assert.Same(replacingA, args.NewItems[0]);
            };

            //Act
            sourceCollectionA[replaceIndex] = replacingA;

            //Assert
            Assert.NotSame(replacedA, readOnlyList[replaceIndex]);
            StandardCheck(sourceCollectionA, sourceCollectionB, readOnlyList);
        }
        public void OnRemoveB()
        {
            //Arrange
            ObservableCollection <A> sourceCollectionA = FilledCollectionA;
            ObservableCollection <B> sourceCollectionB = FilledCollectionB;
            ConcatenatingObservableReadOnlyList <Super> readOnlyList =
                ConcatenatingObservableReadOnlyList <Super> .Concatenate(sourceCollectionA, sourceCollectionB);

            int removedIndex = 1;
            B   removedB     = new B();

            sourceCollectionB.Insert(removedIndex, removedB);
            readOnlyList.CollectionChanged += (sender, args) =>
            {
                Assert.Equal(NotifyCollectionChangedAction.Remove, args.Action);
                Assert.Equal(sourceCollectionA.Count + removedIndex, args.OldStartingIndex);
                Assert.Same(removedB, args.OldItems[0]);
            };

            //Act
            sourceCollectionB.Remove(removedB);

            //Assert
            StandardCheck(sourceCollectionA, sourceCollectionB, readOnlyList);
        }
示例#5
0
        public MainWindowViewModel()
        {
            _models.Add(new Model(_i++));
            _models.Add(new Model(_i++));
            _models.Add(new Model(_i++));
            _models.Add(new Model(_i++));
            ViewModels = new TransformingObservableReadOnlyList <Model, ViewModel>(_models, model => new ViewModel(model));
            _models.Add(new Model(_i++));
            _models.Add(new Model(_i++));

            ModelsA = new ObservableCollection <ModelA>();
            ModelsB = new ObservableCollection <ModelB>();
            ModelsA.Add(new ModelA(_a++));
            ModelsA.Add(new ModelA(_a++));
            ModelsA.Add(new ModelA(_a++));
            ModelsA.Add(new ModelA(_a++));
            ModelsB.Add(new ModelB(_b++));
            ModelsB.Add(new ModelB(_b++));
            WrappingObservableReadOnlyList <ModelA> wrapA = new WrappingObservableReadOnlyList <ModelA>(ModelsA);
            WrappingObservableReadOnlyList <ModelB> wrapB = new WrappingObservableReadOnlyList <ModelB>(ModelsB);

            ModelsA.Add(new ModelA(_a++));
            ModelsB.Add(new ModelB(_b++));
            TransformingObservableReadOnlyList <ModelA, ViewModelA> transA =
                new TransformingObservableReadOnlyList <ModelA, ViewModelA>(wrapA, a => new ViewModelA(a));
            TransformingObservableReadOnlyList <ModelB, ViewModelB> transB =
                new TransformingObservableReadOnlyList <ModelB, ViewModelB>(wrapB, b => new ViewModelB(b));

            ModelsA.Add(new ModelA(_a++));
            ModelsB.Add(new ModelB(_b++));
            ViewModelsAB = new ConcatenatingObservableReadOnlyList <ViewModel>(transA, transB);
            ModelsA.Add(new ModelA(_a++));
            ModelsB.Add(new ModelB(_b++));
        }
        public void FilledCollection()
        {
            //Arrange
            ObservableCollection <A> sourceCollectionA = FilledCollectionA;
            ObservableCollection <B> sourceCollectionB = FilledCollectionB;
            ConcatenatingObservableReadOnlyList <Super> readOnlyList =
                ConcatenatingObservableReadOnlyList <Super> .Concatenate(sourceCollectionA, sourceCollectionB);

            //Act


            //Assert
            StandardCheck(sourceCollectionA, sourceCollectionB, readOnlyList);
        }
        private static void StandardCheck(ObservableCollection <A> filledCollectionA, ObservableCollection <B> filledCollectionB,
                                          ConcatenatingObservableReadOnlyList <Super> readOnlyList)
        {
            Assert.Equal(filledCollectionA.Count + filledCollectionB.Count, readOnlyList.Count);
            int index = 0;

            foreach (A a in filledCollectionA)
            {
                Assert.Same(a, readOnlyList[index++]);
            }
            foreach (B b in filledCollectionB)
            {
                Assert.Same(b, readOnlyList[index++]);
            }
        }
        public void OnResetB()
        {
            //Arrange
            ObservableCollection <A> sourceCollectionA = FilledCollectionA;
            ObservableCollection <B> sourceCollectionB = FilledCollectionB;
            ConcatenatingObservableReadOnlyList <Super> readOnlyList =
                ConcatenatingObservableReadOnlyList <Super> .Concatenate(sourceCollectionA, sourceCollectionB);

            readOnlyList.CollectionChanged += (sender, args) =>
            {
                Assert.Equal(NotifyCollectionChangedAction.Reset, args.Action);
            };

            //Act
            sourceCollectionB.Clear();

            //Assert
            StandardCheck(sourceCollectionA, sourceCollectionB, readOnlyList);
        }
        public void OnAdditionB()
        {
            //Arrange
            ObservableCollection <A> sourceCollectionA = FilledCollectionA;
            ObservableCollection <B> sourceCollectionB = FilledCollectionB;
            ConcatenatingObservableReadOnlyList <Super> readOnlyList =
                ConcatenatingObservableReadOnlyList <Super> .Concatenate(sourceCollectionA, sourceCollectionB);

            B addedB = new B();

            readOnlyList.CollectionChanged += (sender, args) =>
            {
                Assert.Equal(NotifyCollectionChangedAction.Add, args.Action);
                Assert.Equal(readOnlyList.Count - 1, args.NewStartingIndex);
                Assert.Same(addedB, args.NewItems[0]);
            };

            //Act
            sourceCollectionB.Add(addedB);

            //Assert
            StandardCheck(sourceCollectionA, sourceCollectionB, readOnlyList);
        }
        public void OnInsertA()
        {
            //Arrange
            ObservableCollection <A> sourceCollectionA = FilledCollectionA;
            ObservableCollection <B> sourceCollectionB = FilledCollectionB;
            ConcatenatingObservableReadOnlyList <Super> readOnlyList =
                ConcatenatingObservableReadOnlyList <Super> .Concatenate(sourceCollectionA, sourceCollectionB);

            A   insertedA   = new A();
            int insertIndex = 1;

            readOnlyList.CollectionChanged += (sender, args) =>
            {
                Assert.Equal(NotifyCollectionChangedAction.Add, args.Action);
                Assert.Equal(insertIndex, args.NewStartingIndex);
                Assert.Same(insertedA, args.NewItems[0]);
            };

            //Act
            sourceCollectionA.Insert(insertIndex, insertedA);

            //Assert
            StandardCheck(sourceCollectionA, sourceCollectionB, readOnlyList);
        }