public void Refactor() { var presenter = _factory.Create(); if (presenter == null) { return; } _model = presenter.Show(); if (_model == null || !_model.Parameters.Where((param, index) => param.Index != index).Any() || !IsValidParamOrder()) { return; } QualifiedSelection?oldSelection = null; if (_vbe.ActiveCodePane != null) { oldSelection = _vbe.ActiveCodePane.CodeModule.GetSelection(); } AdjustReferences(_model.TargetDeclaration.References); AdjustSignatures(); if (oldSelection.HasValue) { oldSelection.Value.QualifiedName.Component.CodeModule.SetSelection(oldSelection.Value.Selection); oldSelection.Value.QualifiedName.Component.CodeModule.CodePane.ForceFocus(); } _model.State.OnParseRequested(this); }
public void Refactor() { _model = InitializeModel(); if (_model == null) { return; } using (var container = DisposalActionContainer.Create(_factory.Create <IReorderParametersPresenter, ReorderParametersModel>(_model), p => _factory.Release(p))) { var presenter = container.Value; if (presenter == null) { return; } _model = presenter.Show(); if (_model == null || !_model.Parameters.Where((param, index) => param.Index != index).Any() || !IsValidParamOrder()) { return; } var rewriteSession = _rewritingManager.CheckOutCodePaneSession(); AdjustReferences(_model.TargetDeclaration.References, rewriteSession); AdjustSignatures(rewriteSession); rewriteSession.TryRewrite(); _model.State.OnParseRequested(this); } }
public void Refactor() { var presenter = _factory.Create(); if (presenter == null) { return; } _model = presenter.Show(); if (_model == null || !_model.Parameters.Where((param, index) => param.Index != index).Any() || !IsValidParamOrder()) { return; } using (var pane = _vbe.ActiveCodePane) { if (pane.IsWrappingNullReference) { return; } var oldSelection = pane.GetQualifiedSelection(); var rewriteSession = _rewritingManager.CheckOutCodePaneSession(); AdjustReferences(_model.TargetDeclaration.References, rewriteSession); AdjustSignatures(rewriteSession); rewriteSession.TryRewrite(); if (oldSelection.HasValue && !pane.IsWrappingNullReference) { pane.Selection = oldSelection.Value.Selection; } } }
public ReorderParametersPresenter Create() { var selection = _editor.GetSelection(); if (selection == null) { return(null); } var model = new ReorderParametersModel(_parseResult, selection.Value); return(new ReorderParametersPresenter(_view, model)); }
public IReorderParametersPresenter Create() { var selection = _vbe.ActiveCodePane.GetQualifiedSelection(); if (!selection.HasValue) { return(null); } var model = new ReorderParametersModel(_state, selection.Value, _messageBox); return(new ReorderParametersPresenter(_view, model, _messageBox)); }
public void Refactor() { var presenter = _factory.Create(); if (presenter == null) { return; } _model = presenter.Show(); if (_model == null || !_model.Parameters.Where((param, index) => param.Index != index).Any() || !IsValidParamOrder()) { return; } AdjustReferences(_model.TargetDeclaration.References); AdjustSignatures(); }
public void ReorderParams_SwapPositions() { //Input const string inputCode = @"Private Sub Foo(ByVal arg1 As Integer, ByVal arg2 As String) End Sub"; var selection = new Selection(1, 23, 1, 27); //Expectation const string expectedCode = @"Private Sub Foo(ByVal arg2 As String, ByVal arg1 As Integer) End Sub"; //Arrange var builder = new MockVbeBuilder(); VBComponent component; var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); var project = vbe.Object.VBProjects.Item(0); var module = project.VBComponents.Item(0).CodeModule; var codePaneFactory = new CodePaneWrapperFactory(); var mockHost = new Mock<IHostApplication>(); mockHost.SetupAllProperties(); var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); parser.Parse(); if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection); //set up model var model = new ReorderParametersModel(parser.State, qualifiedSelection, null); model.Parameters.Reverse(); var factory = SetupFactory(model); //act var refactoring = new ReorderParametersRefactoring(factory.Object, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), null); refactoring.Refactor(qualifiedSelection); //assert Assert.AreEqual(expectedCode, module.Lines()); }
public void Refactor() { var presenter = _factory.Create(); if (presenter == null) { return; } _model = presenter.Show(); if (_model == null || !_model.Parameters.Where((param, index) => param.Index != index).Any() || !IsValidParamOrder()) { return; } var pane = _vbe.ActiveCodePane; if (!pane.IsWrappingNullReference) { QualifiedSelection?oldSelection; var module = pane.CodeModule; { oldSelection = module.GetQualifiedSelection(); } AdjustReferences(_model.TargetDeclaration.References); AdjustSignatures(); if (oldSelection.HasValue) { pane.Selection = oldSelection.Value.Selection; } } foreach (var rewriter in _rewriters) { rewriter.Rewrite(); } _model.State.OnParseRequested(this); }
public ReorderParametersPresenter(IRefactoringDialog <ReorderParametersViewModel> view, ReorderParametersModel model, IMessageBox messageBox) { _view = view; _model = model; _messageBox = messageBox; }
public void ReorderParametersRefactoring_ReorderNamedParams_WithOptionalParam() { //Input const string inputCode = @"Public Sub Foo(ByVal arg1 As Integer, ByVal arg2 As String, Optional ByVal arg3 As Double) End Sub Public Sub Goo() Foo arg2:=""test44"", arg1:=3 End Sub "; var selection = new Selection(1, 23, 1, 27); //Expectation const string expectedCode = @"Public Sub Foo(ByVal arg2 As String, ByVal arg1 As Integer, Optional ByVal arg3 As Double) End Sub Public Sub Goo() Foo arg1:=3, arg2:=""test44"" End Sub "; //Arrange var builder = new MockVbeBuilder(); VBComponent component; var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); var project = vbe.Object.VBProjects.Item(0); var module = project.VBComponents.Item(0).CodeModule; var codePaneFactory = new CodePaneWrapperFactory(); var mockHost = new Mock<IHostApplication>(); mockHost.SetupAllProperties(); var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); parser.Parse(); if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection); //Specify Params to reorder var model = new ReorderParametersModel(parser.State, qualifiedSelection, null); var reorderedParams = new List<Parameter>() { model.Parameters[1], model.Parameters[0], model.Parameters[2] }; model.Parameters = reorderedParams; //SetupFactory var factory = SetupFactory(model); //Act var refactoring = new ReorderParametersRefactoring(factory.Object, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), null); refactoring.Refactor(qualifiedSelection); //Assert Assert.AreEqual(expectedCode, module.Lines()); }
public void ReorderParams_RefactorDeclaration_FailsInvalidTarget() { //Input const string inputCode = @"Private Sub Foo(ByVal arg1 As Integer, ByVal arg2 As String) End Sub"; var selection = new Selection(1, 23, 1, 27); //Arrange var builder = new MockVbeBuilder(); VBComponent component; var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); var codePaneFactory = new CodePaneWrapperFactory(); var mockHost = new Mock<IHostApplication>(); mockHost.SetupAllProperties(); var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); parser.Parse(); if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection); //set up model var model = new ReorderParametersModel(parser.State, qualifiedSelection, null); model.Parameters.Reverse(); var factory = SetupFactory(model); //act var refactoring = new ReorderParametersRefactoring(factory.Object, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), null); //assert try { refactoring.Refactor( model.Declarations.FirstOrDefault( i => i.DeclarationType == Rubberduck.Parsing.Symbols.DeclarationType.Module)); } catch (ArgumentException e) { Assert.AreEqual("Invalid declaration type", e.Message); return; } Assert.Fail(); }
public ReorderParametersPresenter(IReorderParametersView view, ReorderParametersModel model, IMessageBox messageBox) { _view = view; _model = model; _messageBox = messageBox; }
public void ReorderParametersRefactoring_ParamsSwapped_RejectPrompt() { //Input const string inputCode1 = @"Implements IClass1 Private Sub IClass1_DoSomething(ByVal a As Integer, ByVal b As String) End Sub"; const string inputCode2 = @"Public Sub DoSomething(ByVal a As Integer, ByVal b As String) End Sub"; var selection = new Selection(3, 23, 3, 27); //Arrange var builder = new MockVbeBuilder(); var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) .AddComponent("IClass1", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) .Build(); var vbe = builder.AddProject(project).Build(); var component = project.Object.VBComponents.Item(0); var mockHost = new Mock<IHostApplication>(); mockHost.SetupAllProperties(); var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); parser.Parse(); if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection); var messageBox = new Mock<IMessageBox>(); messageBox.Setup(m => m.Show(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<MessageBoxButtons>(), It.IsAny<MessageBoxIcon>())) .Returns(DialogResult.No); //Specify Params to remove var model = new ReorderParametersModel(parser.State, qualifiedSelection, messageBox.Object); Assert.IsNull(model.TargetDeclaration); }
public void ReorderParametersRefactoring_InterfaceParamsSwapped_AcceptPrompt() { //Input const string inputCode1 = @"Implements IClass1 Private Sub IClass1_DoSomething(ByVal a As Integer, ByVal b As String) End Sub"; const string inputCode2 = @"Public Sub DoSomething(ByVal a As Integer, ByVal b As String) End Sub"; var selection = new Selection(3, 23, 3, 27); //Expectation const string expectedCode1 = @"Implements IClass1 Private Sub IClass1_DoSomething(ByVal b As String, ByVal a As Integer) End Sub"; // note: IDE removes excess spaces const string expectedCode2 = @"Public Sub DoSomething(ByVal b As String, ByVal a As Integer) End Sub"; //Arrange var builder = new MockVbeBuilder(); var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) .AddComponent("IClass1", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) .Build(); var vbe = builder.AddProject(project).Build(); var component = project.Object.VBComponents.Item(0); var codePaneFactory = new CodePaneWrapperFactory(); var mockHost = new Mock<IHostApplication>(); mockHost.SetupAllProperties(); var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); parser.Parse(); if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection); var module1 = project.Object.VBComponents.Item(0).CodeModule; var module2 = project.Object.VBComponents.Item(1).CodeModule; var messageBox = new Mock<IMessageBox>(); messageBox.Setup( m => m.Show(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<MessageBoxButtons>(), It.IsAny<MessageBoxIcon>())) .Returns(DialogResult.Yes); //Specify Params to remove var model = new ReorderParametersModel(parser.State, qualifiedSelection, messageBox.Object); model.Parameters.Reverse(); //SetupFactory var factory = SetupFactory(model); //Act var refactoring = new ReorderParametersRefactoring(factory.Object, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), null); refactoring.Refactor(qualifiedSelection); //Assert Assert.AreEqual(expectedCode1, module1.Lines()); Assert.AreEqual(expectedCode2, module2.Lines()); }
public void ReorderParams_MoveOptionalParamBeforeNonOptionalParamFails() { //Input const string inputCode = @"Private Sub Foo(ByVal arg1 As Integer, Optional ByVal arg2 As String, Optional ByVal arg3 As Boolean = True) End Sub"; var selection = new Selection(1, 23, 1, 27); //Arrange var builder = new MockVbeBuilder(); VBComponent component; var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); var project = vbe.Object.VBProjects.Item(0); var module = project.VBComponents.Item(0).CodeModule; var codePaneFactory = new CodePaneWrapperFactory(); var mockHost = new Mock<IHostApplication>(); mockHost.SetupAllProperties(); var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); parser.Parse(); if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection); //set up model var model = new ReorderParametersModel(parser.State, qualifiedSelection, null); var reorderedParams = new List<Parameter>() { model.Parameters[1], model.Parameters[2], model.Parameters[0] }; model.Parameters = reorderedParams; var factory = SetupFactory(model); var messageBox = new Mock<IMessageBox>(); messageBox.Setup(m => m.Show(It.IsAny<string>(), It.IsAny<string>(), MessageBoxButtons.OK, MessageBoxIcon.Warning)).Returns(DialogResult.OK); //act var refactoring = new ReorderParametersRefactoring(factory.Object, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), messageBox.Object); refactoring.Refactor(qualifiedSelection); //assert Assert.AreEqual(inputCode, module.Lines()); }
public void ReorderParametersRefactoring_EventParamsSwapped_DifferentParamNames_TwoHandlers() { //Input const string inputCode1 = @"Public Event Foo(ByVal arg1 As Integer, ByVal arg2 As String)"; const string inputCode2 = @"Private WithEvents abc As Class1 Private Sub abc_Foo(ByVal i As Integer, ByVal s As String) End Sub"; const string inputCode3 = @"Private WithEvents abc As Class1 Private Sub abc_Foo(ByVal v1 As Integer, ByVal v2 As String) End Sub"; var selection = new Selection(1, 15, 1, 15); //Expectation const string expectedCode1 = @"Public Event Foo(ByVal arg2 As String, ByVal arg1 As Integer)"; const string expectedCode2 = @"Private WithEvents abc As Class1 Private Sub abc_Foo(ByVal s As String, ByVal i As Integer) End Sub"; // note: IDE removes excess spaces const string expectedCode3 = @"Private WithEvents abc As Class1 Private Sub abc_Foo(ByVal v2 As String, ByVal v1 As Integer) End Sub"; // note: IDE removes excess spaces //Arrange var builder = new MockVbeBuilder(); var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) .AddComponent("Class2", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) .AddComponent("Class3", vbext_ComponentType.vbext_ct_ClassModule, inputCode3) .Build(); var vbe = builder.AddProject(project).Build(); var component = project.Object.VBComponents.Item(0); var codePaneFactory = new CodePaneWrapperFactory(); var mockHost = new Mock<IHostApplication>(); mockHost.SetupAllProperties(); var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); parser.Parse(); if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection); var module1 = project.Object.VBComponents.Item(0).CodeModule; var module2 = project.Object.VBComponents.Item(1).CodeModule; var module3 = project.Object.VBComponents.Item(2).CodeModule; //Specify Params to remove var model = new ReorderParametersModel(parser.State, qualifiedSelection, null); model.Parameters.Reverse(); //SetupFactory var factory = SetupFactory(model); //Act var refactoring = new ReorderParametersRefactoring(factory.Object, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), null); refactoring.Refactor(qualifiedSelection); //Assert Assert.AreEqual(expectedCode1, module1.Lines()); Assert.AreEqual(expectedCode2, module2.Lines()); Assert.AreEqual(expectedCode3, module3.Lines()); }
public void ReorderParametersRefactoring_ClientReferencesAreUpdated_ParamArray_CallOnMultiplelines() { //Input const string inputCode = @"Sub Foo(ByVal arg1 As String, ByVal arg2 As Date, ParamArray arg3()) End Sub Public Sub Goo(ByVal arg As Date, _ ByVal arg1 As Integer, _ ByVal arg2 As Integer, _ ByVal arg3 As Integer, _ ByVal arg4 As Integer, _ ByVal arg5 As Integer, _ ByVal arg6 As Integer) Foo ""test"", _ arg, _ test1x, _ test2x, _ test3x, _ test4x, _ test5x, _ test6x End Sub "; var selection = new Selection(1, 23, 1, 27); //Expectation const string expectedCode = @"Sub Foo(ByVal arg2 As Date, ByVal arg1 As String, ParamArray arg3()) End Sub Public Sub Goo(ByVal arg As Date, _ ByVal arg1 As Integer, _ ByVal arg2 As Integer, _ ByVal arg3 As Integer, _ ByVal arg4 As Integer, _ ByVal arg5 As Integer, _ ByVal arg6 As Integer) Foo arg, ""test"", test1x, test2x, test3x, test4x, test5x, test6x End Sub "; //Arrange var builder = new MockVbeBuilder(); VBComponent component; var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); var project = vbe.Object.VBProjects.Item(0); var module = project.VBComponents.Item(0).CodeModule; var codePaneFactory = new CodePaneWrapperFactory(); var mockHost = new Mock<IHostApplication>(); mockHost.SetupAllProperties(); var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); parser.Parse(); if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection); //Specify Params to reorder var model = new ReorderParametersModel(parser.State, qualifiedSelection, null); var reorderedParams = new List<Parameter>() { model.Parameters[1], model.Parameters[0], model.Parameters[2] }; model.Parameters = reorderedParams; //SetupFactory var factory = SetupFactory(model); var messageBox = new Mock<IMessageBox>(); messageBox.Setup(m => m.Show(It.IsAny<string>(), It.IsAny<string>(), MessageBoxButtons.OK, MessageBoxIcon.Warning)).Returns(DialogResult.OK); //Act var refactoring = new ReorderParametersRefactoring(factory.Object, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), messageBox.Object); refactoring.Refactor(qualifiedSelection); //Assert Assert.AreEqual(expectedCode, module.Lines()); }
public ReorderParametersPresenter(IReorderParametersView view, ReorderParametersModel model) { _view = view; _model = model; }
public ReorderParametersPresenter(ReorderParametersDialog view, ReorderParametersModel model, IMessageBox messageBox) { _view = view; _model = model; _messageBox = messageBox; }
public void Presenter_CancelDialogCreatesNullModel() { //Input const string inputCode = @"Private Sub Foo(ByVal arg1 As Integer, ByVal arg2 As String) End Sub"; var selection = new Selection(1, 15, 1, 15); //Arrange var builder = new MockVbeBuilder(); VBComponent component; var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); var mockHost = new Mock<IHostApplication>(); mockHost.SetupAllProperties(); var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); parser.Parse(); if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection); var editor = new Mock<IActiveCodePaneEditor>(); editor.Setup(e => e.GetSelection()).Returns(qualifiedSelection); var model = new ReorderParametersModel(parser.State, qualifiedSelection, new MessageBox()); var view = new Mock<IReorderParametersView>(); view.Setup(v => v.ShowDialog()).Returns(DialogResult.Cancel); view.Setup(v => v.Parameters).Returns(model.Parameters); var factory = new ReorderParametersPresenterFactory(editor.Object, view.Object, parser.State, null); var presenter = factory.Create(); //Act var result = presenter.Show(); //Assert Assert.IsNull(result); }
private static Mock<IRefactoringPresenterFactory<IReorderParametersPresenter>> SetupFactory(ReorderParametersModel model) { var presenter = new Mock<IReorderParametersPresenter>(); presenter.Setup(p => p.Show()).Returns(model); var factory = new Mock<IRefactoringPresenterFactory<IReorderParametersPresenter>>(); factory.Setup(f => f.Create()).Returns(presenter.Object); return factory; }
public void ReorderParametersRefactoring_ReorderLastParamFromLetter_NotAllowed() { //Input const string inputCode = @"Private Property Let Foo(ByVal arg1 As Integer, ByVal arg2 As String) End Property"; var selection = new Selection(1, 23, 1, 27); //Arrange var builder = new MockVbeBuilder(); VBComponent component; var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); var mockHost = new Mock<IHostApplication>(); mockHost.SetupAllProperties(); var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); parser.Parse(); if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection); var model = new ReorderParametersModel(parser.State, qualifiedSelection, null); // Assert Assert.AreEqual(1, model.Parameters.Count); // doesn't allow removing last param from letter }