public override void Execute(object parameter) { if (Vbe.ActiveCodePane == null) { return; } var codePane = _wrapperWrapperFactory.Create(Vbe.ActiveCodePane); var selection = new QualifiedSelection(new QualifiedModuleName(codePane.CodeModule.Parent), codePane.Selection); using (var view = new ReorderParametersDialog()) { var factory = new ReorderParametersPresenterFactory(Editor, view, _state, new MessageBox()); var refactoring = new ReorderParametersRefactoring(factory, Editor, new MessageBox()); refactoring.Refactor(selection); } }
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()); }
private void ReorderParameters(QualifiedSelection selection) { var progress = new ParsingProgressPresenter(); var result = progress.Parse(_parser, IDE.ActiveVBProject); using (var view = new ReorderParametersDialog()) { var factory = new ReorderParametersPresenterFactory(_editor, view, result); var refactoring = new ReorderParametersRefactoring(factory); refactoring.Refactor(selection); } }
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_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 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 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_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_PresenterIsNull() { //Input const string inputCode = @"Private Sub Foo() 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 editor = new Mock<IActiveCodePaneEditor>(); editor.Setup(e => e.GetSelection()).Returns((QualifiedSelection?)null); var factory = new ReorderParametersPresenterFactory(editor.Object, null, parser.State, null); //act var refactoring = new ReorderParametersRefactoring(factory, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), null); refactoring.Refactor(); Assert.AreEqual(inputCode, 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(); }