internal VsSimulation(IVimBufferCoordinator bufferCoordinator, bool simulateResharper, bool simulateStandardKeyMappings, IEditorOperationsFactoryService editorOperationsFactoryService, IKeyUtil keyUtil) { _keyUtil = keyUtil; _wpfTextView = (IWpfTextView)bufferCoordinator.VimBuffer.TextView; _factory = new MockRepository(MockBehavior.Strict); _vsKeyboardInputSimulation = new VsKeyboardInputSimulation(this, _wpfTextView); _testableSynchronizationContext = new TestableSynchronizationContext(); _simulateStandardKeyMappings = simulateStandardKeyMappings; // Create the IVsAdapter and pick reasonable defaults here. Consumers can modify // this via an exposed property _vsAdapter = _factory.Create<IVsAdapter>(); _vsAdapter.SetupGet(x => x.InAutomationFunction).Returns(false); _vsAdapter.SetupGet(x => x.KeyboardDevice).Returns(_vsKeyboardInputSimulation.KeyBoardDevice); _vsAdapter.Setup(x => x.IsReadOnly(It.IsAny<ITextBuffer>())).Returns(false); _vsAdapter.Setup(x => x.IsReadOnly(It.IsAny<ITextView>())).Returns(false); _vsAdapter.Setup(x => x.IsIncrementalSearchActive(_wpfTextView)).Returns(false); _reportDesignerUtil = _factory.Create<IReportDesignerUtil>(); _reportDesignerUtil.Setup(x => x.IsExpressionView(_wpfTextView)).Returns(false); _displayWindowBroker = _factory.Create<IDisplayWindowBroker>(); _displayWindowBroker.SetupGet(x => x.IsCompletionActive).Returns(false); _displayWindowBroker.SetupGet(x => x.IsQuickInfoActive).Returns(false); _displayWindowBroker.SetupGet(x => x.IsSignatureHelpActive).Returns(false); _displayWindowBroker.SetupGet(x => x.IsSmartTagSessionActive).Returns(false); _vsCommandTarget = new DefaultCommandTarget( bufferCoordinator.VimBuffer.TextView, editorOperationsFactoryService.GetEditorOperations(bufferCoordinator.VimBuffer.TextView)); var textManager = _factory.Create<ITextManager>(); var commandTargets = new List<ICommandTarget>(); if (simulateResharper) { commandTargets.Add(ReSharperKeyUtil.GetOrCreate(bufferCoordinator)); } commandTargets.Add(new StandardCommandTarget(bufferCoordinator, textManager.Object, _displayWindowBroker.Object, _vsCommandTarget)); // Create the VsCommandTarget. It's next is the final and default Visual Studio // command target var vsCommandTarget = new VsCommandTarget( bufferCoordinator, textManager.Object, _vsAdapter.Object, _displayWindowBroker.Object, _keyUtil, _vsCommandTarget, commandTargets.ToReadOnlyCollectionShallow()); // Time to setup the start command target. If we are simulating R# then put them ahead of VsVim // on the IOleCommandTarget chain. VsVim doesn't try to fight R# and prefers instead to be // behind them if (simulateResharper) { _reSharperCommandTarget = new ReSharperCommandTargetSimulation(_wpfTextView, vsCommandTarget); _commandTarget = _reSharperCommandTarget; } else { _commandTarget = vsCommandTarget; } // Visual Studio hides the default IOleCommandTarget inside of the IWpfTextView property // bag. The default KeyProcessor implementation looks here for IOleCommandTarget to // process text input. // // This should always point to the head of the IOleCommandTarget chain. In the implementation // it actually points to the IVsTextView implementation which then immediately routes to the // IOleCommandTarget head _wpfTextView.Properties[typeof(IOleCommandTarget)] = _commandTarget; // Create the input controller. Make sure that the VsVim one is ahead in the list // from the default Visual Studio one. We can guarantee this is true due to MEF // ordering of the components if (simulateResharper) { _vsKeyboardInputSimulation.KeyProcessors.Add(ReSharperKeyUtil.GetOrCreate(bufferCoordinator)); } _vsKeyboardInputSimulation.KeyProcessors.Add(new VsKeyProcessor(_vsAdapter.Object, bufferCoordinator, _keyUtil, _reportDesignerUtil.Object, _wpfTextView)); _vsKeyboardInputSimulation.KeyProcessors.Add((KeyProcessor)bufferCoordinator); _vsKeyboardInputSimulation.KeyProcessors.Add(new SimulationKeyProcessor(bufferCoordinator.VimBuffer.TextView)); }
protected override void Create(params string[] lines) { CreateCore(simulateResharper: true, usePeekRole: false, lines: lines); _reSharperCommandTarget = _vsSimulation.ReSharperCommandTargetOpt; }
internal VsSimulation(IVimBufferCoordinator bufferCoordinator, bool simulateResharper, bool simulateStandardKeyMappings, IEditorOperationsFactoryService editorOperationsFactoryService, IKeyUtil keyUtil) { _keyUtil = keyUtil; _wpfTextView = (IWpfTextView)bufferCoordinator.VimBuffer.TextView; _factory = new MockRepository(MockBehavior.Strict); _vsKeyboardInputSimulation = new VsKeyboardInputSimulation(this, _wpfTextView); _testableSynchronizationContext = new TestableSynchronizationContext(); _simulateStandardKeyMappings = simulateStandardKeyMappings; // Create the IVsAdapter and pick reasonable defaults here. Consumers can modify // this via an exposed property _vsAdapter = _factory.Create <IVsAdapter>(); _vsAdapter.SetupGet(x => x.InAutomationFunction).Returns(false); _vsAdapter.SetupGet(x => x.KeyboardDevice).Returns(_vsKeyboardInputSimulation.KeyBoardDevice); _vsAdapter.Setup(x => x.IsReadOnly(It.IsAny <ITextBuffer>())).Returns(false); _vsAdapter.Setup(x => x.IsReadOnly(It.IsAny <ITextView>())).Returns(false); _vsAdapter.Setup(x => x.IsIncrementalSearchActive(_wpfTextView)).Returns(false); _reportDesignerUtil = _factory.Create <IReportDesignerUtil>(); _reportDesignerUtil.Setup(x => x.IsExpressionView(_wpfTextView)).Returns(false); _displayWindowBroker = _factory.Create <IDisplayWindowBroker>(); _displayWindowBroker.SetupGet(x => x.IsCompletionActive).Returns(false); _displayWindowBroker.SetupGet(x => x.IsQuickInfoActive).Returns(false); _displayWindowBroker.SetupGet(x => x.IsSignatureHelpActive).Returns(false); _displayWindowBroker.SetupGet(x => x.IsSmartTagSessionActive).Returns(false); _vsCommandTarget = new DefaultCommandTarget( bufferCoordinator.VimBuffer.TextView, editorOperationsFactoryService.GetEditorOperations(bufferCoordinator.VimBuffer.TextView)); var textManager = _factory.Create <ITextManager>(); var commandTargets = new List <ICommandTarget>(); if (simulateResharper) { commandTargets.Add(ReSharperKeyUtil.GetOrCreate(bufferCoordinator)); } commandTargets.Add(new StandardCommandTarget(bufferCoordinator, textManager.Object, _displayWindowBroker.Object, _vsCommandTarget)); // Create the VsCommandTarget. It's next is the final and default Visual Studio // command target var vsCommandTarget = new VsCommandTarget( bufferCoordinator, textManager.Object, _vsAdapter.Object, _displayWindowBroker.Object, _keyUtil, _vsCommandTarget, commandTargets.ToReadOnlyCollectionShallow()); // Time to setup the start command target. If we are simulating R# then put them ahead of VsVim // on the IOleCommandTarget chain. VsVim doesn't try to fight R# and prefers instead to be // behind them if (simulateResharper) { _reSharperCommandTarget = new ReSharperCommandTargetSimulation(_wpfTextView, vsCommandTarget); _commandTarget = _reSharperCommandTarget; } else { _commandTarget = vsCommandTarget; } // Visual Studio hides the default IOleCommandTarget inside of the IWpfTextView property // bag. The default KeyProcessor implementation looks here for IOleCommandTarget to // process text input. // // This should always point to the head of the IOleCommandTarget chain. In the implementation // it actually points to the IVsTextView implementation which then immediately routes to the // IOleCommandTarget head _wpfTextView.Properties[typeof(IOleCommandTarget)] = _commandTarget; // Create the input controller. Make sure that the VsVim one is ahead in the list // from the default Visual Studio one. We can guarantee this is true due to MEF // ordering of the components if (simulateResharper) { _vsKeyboardInputSimulation.KeyProcessors.Add(ReSharperKeyUtil.GetOrCreate(bufferCoordinator)); } _vsKeyboardInputSimulation.KeyProcessors.Add(new VsKeyProcessor(_vsAdapter.Object, bufferCoordinator, _keyUtil, _reportDesignerUtil.Object)); _vsKeyboardInputSimulation.KeyProcessors.Add((KeyProcessor)bufferCoordinator); _vsKeyboardInputSimulation.KeyProcessors.Add(new SimulationKeyProcessor(bufferCoordinator.VimBuffer.TextView)); }