Exemplo n.º 1
0
 /// <summary>
 /// Redo the latest change.
 /// </summary>
 public void Redo()
 {
     root.Redo();
 }
        public void SplitSelectedTrackSegmentCommandTest(int trackNumber, int frameNumber, int[] expectedToSplitKeyFrameNumbers, int[] expectedSplitKeyFrameNumbers)
        {
            SetupViewModel(useRealUndoService: true);
            IScriptVideoContext svc = _scriptVideoContextMock.Object;

            if (_viewModel.SelectedTrack.TrackNumber != trackNumber)
            {
                _viewModel.SelectedTrack = _viewModel.TimelineTrackCollection[trackNumber];
            }

            if (svc.FrameNumber != frameNumber)
            {
                svc.FrameNumber = frameNumber;
            }

            Assert.NotNull(_viewModel.TimelineSegmentProvidingViewModel.SelectedSegment);
            SegmentViewModelBase segmentViewModelToSplit = _viewModel.TimelineSegmentProvidingViewModel.SelectedSegment;
            int originalEndFrame = segmentViewModelToSplit.EndFrame;

            int[] originalKeyFrameNumbers = segmentViewModelToSplit.KeyFrameViewModels.Select(kfvm => kfvm.FrameNumber).ToArray();

            Assert.True(
                _viewModel.SplitSelectedTrackSegmentCommand.CanExecute()
                );
            _viewModel.SplitSelectedTrackSegmentCommand.Execute();

            SegmentViewModelBase splitSegmentViewModel;

            RunPreUndoTests();

            _undoRoot.Undo();
            RunPostUndoTests();

            _undoRoot.Redo();
            RunPreUndoTests();

            void RunPreUndoTests()
            {
                Assert.NotNull(_viewModel.TimelineSegmentProvidingViewModel.SelectedSegment);
                Assert.NotSame(segmentViewModelToSplit, _viewModel.TimelineSegmentProvidingViewModel.SelectedSegment);

                Assert.False(
                    _viewModel.SplitSelectedTrackSegmentCommand.CanExecute()
                    );

                splitSegmentViewModel = _viewModel.TimelineSegmentProvidingViewModel.SelectedSegment;

                Assert.Equal(frameNumber - 1, segmentViewModelToSplit.EndFrame);
                Assert.Equal(expectedToSplitKeyFrameNumbers.Length, segmentViewModelToSplit.KeyFrameViewModels.Count);
                for (int i = 0; i < expectedToSplitKeyFrameNumbers.Length; i++)
                {
                    Assert.Equal(expectedToSplitKeyFrameNumbers[i], segmentViewModelToSplit.KeyFrameViewModels[i].FrameNumber);
                }

                Assert.Equal(frameNumber, splitSegmentViewModel.StartFrame);
                Assert.Equal(originalEndFrame, splitSegmentViewModel.EndFrame);

                Assert.Equal(expectedSplitKeyFrameNumbers.Length, splitSegmentViewModel.KeyFrameViewModels.Count);
                for (int i = 0; i < expectedSplitKeyFrameNumbers.Length; i++)
                {
                    Assert.Equal(expectedSplitKeyFrameNumbers[i], splitSegmentViewModel.KeyFrameViewModels[i].FrameNumber);
                }

                Assert.True(_undoRoot.CanUndo);
            }

            void RunPostUndoTests()
            {
                Assert.Same(segmentViewModelToSplit, _viewModel.TimelineSegmentProvidingViewModel.SelectedSegment);
                Assert.DoesNotContain(splitSegmentViewModel, _viewModel.TimelineSegments);

                Assert.True(
                    _viewModel.SplitSelectedTrackSegmentCommand.CanExecute()
                    );

                Assert.Equal(originalEndFrame, segmentViewModelToSplit.EndFrame);

                Assert.Equal(originalKeyFrameNumbers.Length, segmentViewModelToSplit.KeyFrameViewModels.Count);
                for (int i = 0; i < originalKeyFrameNumbers.Length; i++)
                {
                    Assert.Equal(originalKeyFrameNumbers[i], segmentViewModelToSplit.KeyFrameViewModels[i].FrameNumber);
                }

                Assert.True(_undoRoot.CanRedo);
            }
        }