/// <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); } }