public SelectionChangeTrackerTest()
        {
            _factory   = new MockRepository(MockBehavior.Loose);
            _selection = _factory.Create <ITextSelection>();
            _textView  = MockObjectFactory.CreateTextView(
                selection: _selection.Object,
                factory: _factory);
            _vimHost = _factory.Create <IVimHost>();
            _vimHost.Setup(x => x.IsFocused(_textView.Object)).Returns(true);
            _vimBuffer = MockObjectFactory.CreateVimBuffer(
                textView: _textView.Object,
                vim: MockObjectFactory.CreateVim(host: _vimHost.Object).Object,
                factory: _factory);
            _vimBuffer.SetupGet(x => x.IsClosed).Returns(false);

            var snapshot = _factory.Create <ITextSnapshot>();

            snapshot.SetupGet(x => x.Length).Returns(1);
            _nonEmptySpan = new VirtualSnapshotSpan(new SnapshotSpan(snapshot.Object, new Span(0, 1)));

            _mouseDevice       = _factory.Create <IMouseDevice>();
            _selectionOverride = _factory.Create <IVisualModeSelectionOverride>();
            _selectionOverride.Setup(x => x.IsInsertModePreferred(It.IsAny <ITextView>())).Returns(false);
            var selectionList = new List <IVisualModeSelectionOverride>
            {
                _selectionOverride.Object
            };

            _context = new TestableSynchronizationContext();

            // Mock 'DoActionAsync' in 'ICommonOperations'.
            var commonOperations = _factory.Create <ICommonOperations>();

            commonOperations.Setup(x => x.DoActionAsync(It.IsAny <FSharpFunc <Unit, Unit> >()))
            .Callback((FSharpFunc <Unit, Unit> action) => _context.Post(_ => action.Invoke(null), null));

            _tracker = new SelectionChangeTracker(
                _vimBuffer.Object,
                commonOperations.Object,
                selectionList.ToFSharpList(),
                _mouseDevice.Object);
        }