public void Refactor(Declaration target) { var presenter = _factory.Create(); _model = presenter.Show(target); if (_model != null && _model.Declarations != null) { Rename(); } }
public void RenameRefactoring_RenameSub() { //Input const string inputCode = @"Private Sub Foo() End Sub"; var selection = new Selection(1, 15, 1, 15); //Expectation const string expectedCode = @"Private Sub Goo() 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); var model = new RenameModel(vbe.Object, parser.State, qualifiedSelection, null) { NewName = "Goo" }; //SetupFactory var factory = SetupFactory(model); //Act var refactoring = new RenameRefactoring(factory.Object, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), null, parser.State); refactoring.Refactor(qualifiedSelection); //Assert var actual = module.Lines(); Assert.AreEqual(expectedCode, actual); }
public RenameRefactoring(IRefactoringPresenterFactory factory, IMessageBox messageBox, IDeclarationFinderProvider declarationFinderProvider, IProjectsProvider projectsProvider, IRewritingManager rewritingManager, ISelectionService selectionService) { _messageBox = messageBox; _declarationFinderProvider = declarationFinderProvider; _projectsProvider = projectsProvider; _rewritingManager = rewritingManager; _selectionService = selectionService; _model = null; _presenterFactory = ((model) => DisposalActionContainer.Create(factory.Create <IRenamePresenter, RenameModel>(model), factory.Release)); _renameActions = new Dictionary <DeclarationType, Action <IRewriteSession> > { { DeclarationType.Member, RenameMember }, { DeclarationType.Parameter, RenameParameter }, { DeclarationType.Event, RenameEvent }, { DeclarationType.Variable, RenameVariable }, { DeclarationType.Module, RenameModule }, { DeclarationType.Project, RenameProject } }; IsInterfaceMemberRename = false; _neverRenameIdentifiers = NeverRenameList(); }
private bool TrySetNewName(IRenamePresenter presenter) { var result = presenter.Show(_model.Target); if (result == null) { return(false); } _model = result; var conflicts = _declarationFinderProvider.DeclarationFinder.FindNewDeclarationNameConflicts(_model.NewName, _model.Target); if (conflicts.Any()) { var message = string.Format(RubberduckUI.RenameDialog_ConflictingNames, _model.NewName, _model.Target.IdentifierName); return(_messageBox?.ConfirmYesNo(message, RubberduckUI.RenameDialog_Caption) ?? false); } return(true); }
public RenameRefactoring(IVBE vbe, IRefactoringPresenterFactory <IRenamePresenter> factory, IMessageBox messageBox, RubberduckParserState state) { _vbe = vbe; _factory = factory; _messageBox = messageBox; _state = state; _model = null; _initialSelection = new Tuple <ICodePane, Selection>(_vbe.ActiveCodePane, _vbe.ActiveCodePane.IsWrappingNullReference ? Selection.Empty : _vbe.ActiveCodePane.Selection); _modulesToRewrite = new List <QualifiedModuleName>(); _renameActions = new Dictionary <DeclarationType, Action> { { DeclarationType.Member, new Action(RenameMember) }, { DeclarationType.Parameter, new Action(RenameParameter) }, { DeclarationType.Event, new Action(RenameEvent) }, { DeclarationType.Variable, new Action(RenameVariable) }, { DeclarationType.Module, new Action(RenameModule) }, { DeclarationType.Project, new Action(RenameProject) } }; IsInterfaceMemberRename = false; RequestParseAfterRename = true; _neverRenameIdentifiers = NeverRenameList(); }
public void Refactor(Declaration target) { var presenter = _factory.Create(); _model = presenter.Show(target); QualifiedSelection?oldSelection = null; if (_vbe.ActiveCodePane != null) { oldSelection = _vbe.ActiveCodePane.CodeModule.GetSelection(); } if (_model != null && _model.Declarations != null) { Rename(); } if (oldSelection.HasValue) { oldSelection.Value.QualifiedName.Component.CodeModule.SetSelection(oldSelection.Value.Selection); oldSelection.Value.QualifiedName.Component.CodeModule.CodePane.ForceFocus(); } }
public RenamePresenter(IRenameDialog view, RenameModel model) { _view = view; _model = model; }
public void RenameRefactoring_RenameSub_ConflictingNames_Accept() { //Input const string inputCode = @"Private Sub Foo() Dim Goo As Integer End Sub"; var selection = new Selection(1, 14, 1, 14); //Expectation const string expectedCode = @"Private Sub Goo() Dim Goo 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); var model = new RenameModel(vbe.Object, parser.State, qualifiedSelection, null) { NewName = "Goo" }; //SetupFactory var factory = SetupFactory(model); 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); //Act var refactoring = new RenameRefactoring(factory.Object, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), messageBox.Object, parser.State); refactoring.Refactor(qualifiedSelection); //Assert Assert.AreEqual(expectedCode, module.Lines()); }
public void RenameRefactoring_InterfaceRenamed_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); var model = new RenameModel(vbe.Object, parser.State, qualifiedSelection, messageBox.Object); Assert.AreEqual(null, model.Target); }
public void RenameRefactoring_InterfaceRenamed_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, 27, 3, 27); //Expectation const string expectedCode1 = @"Implements IClass1 Private Sub IClass1_DoNothing(ByVal a As Integer, ByVal b As String) End Sub"; const string expectedCode2 = @"Public Sub DoNothing(ByVal a As Integer, ByVal b As String) 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); var model = new RenameModel(vbe.Object, parser.State, qualifiedSelection, messageBox.Object) { NewName = "DoNothing" }; //SetupFactory var factory = SetupFactory(model); //Act var refactoring = new RenameRefactoring(factory.Object, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), null, parser.State); refactoring.Refactor(model.Selection); //Assert Assert.AreEqual(expectedCode1, module1.Lines()); Assert.AreEqual(expectedCode2, module2.Lines()); }
public void RenameRefactoring_RenameEvent() { //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"; var selection = new Selection(1, 16, 1, 16); //Expectation const string expectedCode1 = @"Public Event Goo(ByVal arg1 As Integer, ByVal arg2 As String)"; const string expectedCode2 = @"Private WithEvents abc As Class1 Private Sub abc_Goo(ByVal i As Integer, ByVal s As String) 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("Class2", 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 model = new RenameModel(vbe.Object, parser.State, qualifiedSelection, null) { NewName = "Goo" }; //SetupFactory var factory = SetupFactory(model); //Act var refactoring = new RenameRefactoring(factory.Object, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), null, parser.State); refactoring.Refactor(qualifiedSelection); //Assert Assert.AreEqual(expectedCode1, module1.Lines()); Assert.AreEqual(expectedCode2, module2.Lines()); }
private static Mock<IRefactoringPresenterFactory<IRenamePresenter>> SetupFactory(RenameModel model) { var presenter = new Mock<IRenamePresenter>(); presenter.Setup(p => p.Show()).Returns(model); presenter.Setup(p => p.Show(It.IsAny<Declaration>())).Returns(model); var factory = new Mock<IRefactoringPresenterFactory<IRenamePresenter>>(); factory.Setup(f => f.Create()).Returns(presenter.Object); return factory; }
public void RenameRefactoring_RenameCodeModule() { const string newName = "RenameModule"; //Input const string inputCode = @"Private Sub Foo(ByVal a As Integer, ByVal b As String) End Sub"; var selection = new Selection(3, 27, 3, 27); //Arrange var builder = new MockVbeBuilder(); var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode) .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 model = new RenameModel(vbe.Object, parser.State, qualifiedSelection, null) { NewName = newName }; model.Target = model.Declarations.FirstOrDefault(i => i.DeclarationType == DeclarationType.Class && i.IdentifierName == "Class1"); //SetupFactory var factory = SetupFactory(model); //Act var refactoring = new RenameRefactoring(factory.Object, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), null, parser.State); refactoring.Refactor(model.Target); //Assert Assert.AreSame(newName, component.CodeModule.Name); }
public RenamePresenter(IRefactoringDialog <RenameViewModel> view, RenameModel model) { _view = view; Model = model; }
public void Factory_SelectionIsNotNull_PassInTarget_Accept() { const string newName = "Goo"; //Input const string inputCode = @"Private Sub Foo(ByVal arg1 As String) End Sub"; var selection = new Selection(1, 25, 1, 25); //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 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 RenameModel(vbe.Object, parser.State, qualifiedSelection, null) { NewName = newName }; var editor = new Mock<IActiveCodePaneEditor>(); editor.Setup(e => e.GetSelection()).Returns(qualifiedSelection); int startLine, startColumn, endLine, endColumn; var codePaneMock = new Mock<CodePane>(); codePaneMock.Setup(c => c.CodeModule).Returns(module); codePaneMock.Setup(c => c.GetSelection(out startLine, out startColumn, out endLine, out endColumn)); vbe.Setup(v => v.ActiveCodePane).Returns(codePaneMock.Object); var rubberduckCodePane = new Mock<ICodePaneWrapper>(); rubberduckCodePane.Setup(r => r.CodeModule).Returns(module); rubberduckCodePane.Setup(r => r.GetSelection(out startLine, out startColumn, out endLine, out endColumn)); rubberduckCodePane.Setup(r => r.Selection).Returns(selection); var codePaneFactoryMock = new Mock<ICodePaneWrapperFactory>(); codePaneFactoryMock.Setup(c => c.Create(codePaneMock.Object)).Returns(rubberduckCodePane.Object); var view = new Mock<IRenameView>(); view.Setup(v => v.NewName).Returns(newName); view.Setup(v => v.ShowDialog()).Returns(DialogResult.OK); var factory = new RenamePresenterFactory(vbe.Object, view.Object, parser.State, null, codePaneFactoryMock.Object); var presenter = factory.Create(); Assert.AreEqual(model.NewName, presenter.Show(model.Target).NewName); }
public RenamePresenter(IRenameView view, RenameModel model) { _view = view; _model = model; }
public void RenameRefactoring_RenameProject() { const string oldName = "TestProject1"; const string newName = "Renamed"; //Arrange var builder = new MockVbeBuilder(); var vbe = builder.ProjectBuilder(oldName, vbext_ProjectProtection.vbext_pp_none) .AddComponent("Module1", vbext_ComponentType.vbext_ct_StdModule, string.Empty) .MockVbeBuilder() .Build(); 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 model = new RenameModel(vbe.Object, parser.State, default(QualifiedSelection), null) { NewName = newName }; model.Target = model.Declarations.First(i => i.DeclarationType == DeclarationType.Project && !i.IsBuiltIn); //SetupFactory var factory = SetupFactory(model); //Act var refactoring = new RenameRefactoring(factory.Object, new ActiveCodePaneEditor(vbe.Object, codePaneFactory), null, parser.State); refactoring.Refactor(model.Target); //Assert Assert.AreEqual(newName, vbe.Object.VBProjects.Item(0).Name); }