public void RecoveringAttributesRecoversTheAttributesInTheModulesProvided_ViaModule_PropertiesAreHandlesSeparately(string getAttributes, string letAttributes, string setAttributes) { var inputCode = $@"Public Property Get Foo() As Variant {getAttributes} End Property Public Property Let Foo(ByVal RHS As Long) {letAttributes} End Property Public Property Set Foo(ByVal RHs As Object) {setAttributes} End Property"; var expectedCodeWithRecovery = inputCode; var expectedCodeWithoutRecovery = $@"Public Property Get Foo() As Variant{(string.IsNullOrEmpty(getAttributes) ? Environment.NewLine : string.Empty)} End Property Public Property Let Foo(ByVal RHS As Long){(string.IsNullOrEmpty(letAttributes) ? Environment.NewLine : string.Empty)} End Property Public Property Set Foo(ByVal RHs As Object){(string.IsNullOrEmpty(setAttributes) ? Environment.NewLine : string.Empty)} End Property"; var vbe = MockVbeBuilder.BuildFromStdModules(("RecoveryModule", inputCode), ("NoRecoveryModule", inputCode)).Object; var(state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe); using (state) { var attributesUpdater = new AttributesUpdater(state); var mockFailureNotifier = new Mock <IMemberAttributeRecoveryFailureNotifier>(); var memberAttributeRecoverer = new MemberAttributeRecoverer(state, state, attributesUpdater, mockFailureNotifier.Object); memberAttributeRecoverer.RewritingManager = rewritingManager; var recoveryModule = state.DeclarationFinder.UserDeclarations(DeclarationType.Module) .First(decl => decl.IdentifierName.Equals("RecoveryModule")).QualifiedModuleName; var noRecoveryModule = state.DeclarationFinder.UserDeclarations(DeclarationType.Module) .First(decl => decl.IdentifierName.Equals("NoRecoveryModule")).QualifiedModuleName; var modulesToRecoverAttributesIn = new List <QualifiedModuleName> { recoveryModule }; memberAttributeRecoverer.RecoverCurrentMemberAttributesAfterNextParse(modulesToRecoverAttributesIn); var rewriteSession = rewritingManager.CheckOutCodePaneSession(); var declarationsForWhichToRemoveAttributes = state.DeclarationFinder.UserDeclarations(DeclarationType.Property); RemoveAttributes(declarationsForWhichToRemoveAttributes, rewriteSession); ExecuteAndWaitForParserState(state, () => rewriteSession.TryRewrite(), ParserState.Ready); var actualCodeWithRecovery = state.ProjectsProvider.Component(recoveryModule).CodeModule.Content(); var actualCodeWithoutRecovery = state.ProjectsProvider.Component(noRecoveryModule).CodeModule.Content(); Assert.AreEqual(expectedCodeWithRecovery, actualCodeWithRecovery); Assert.AreEqual(expectedCodeWithoutRecovery, actualCodeWithoutRecovery); } }
protected override IRefactoringAction <AnnotateDeclarationModel> TestBaseRefactoring(RubberduckParserState state, IRewritingManager rewritingManager) { var annotationUpdater = new AnnotationUpdater(state); var attributesUpdater = new AttributesUpdater(state); return(new AnnotateDeclarationRefactoringAction(rewritingManager, annotationUpdater, attributesUpdater)); }
protected override CommandBase TestCommand( IVBE vbe, RubberduckParserState state, IRewritingManager rewritingManager, ISelectionService selectionService) { var factory = new Mock <IRefactoringPresenterFactory>().Object; var msgBox = new Mock <IMessageBox>().Object; var uiDispatcherMock = new Mock <IUiDispatcher>(); uiDispatcherMock .Setup(m => m.Invoke(It.IsAny <Action>())) .Callback((Action action) => action.Invoke()); var userInteraction = new RefactoringUserInteraction <IAnnotateDeclarationPresenter, AnnotateDeclarationModel>(factory, uiDispatcherMock.Object); var annotationUpdater = new AnnotationUpdater(state); var attributesUpdater = new AttributesUpdater(state); var annotateDeclarationAction = new AnnotateDeclarationRefactoringAction(rewritingManager, annotationUpdater, attributesUpdater); var selectedDeclarationProvider = new SelectedDeclarationProvider(selectionService, state); var refactoring = new AnnotateDeclarationRefactoring(annotateDeclarationAction, selectedDeclarationProvider, selectionService, userInteraction); var notifier = new AnnotateDeclarationFailedNotifier(msgBox); return(new AnnotateSelectedMemberCommand(refactoring, notifier, selectionService, state, state, selectedDeclarationProvider)); }
public void UpdateAttributeWithValuesSpecifiedUpdatesOnlyEntriesForTheAttributeWithSpecifiedValuesForMembers() { const string inputCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Public Sub Foo(bar As String) Attribute Foo.VB_Ext_Key = ""Key"", ""Value"" Attribute Foo.VB_Ext_Key = ""OtherKey"", ""Value"" Attribute Foo.VB_Description = ""Desc"" bar = vbNullString End Sub "; const string expectedCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Public Sub Foo(bar As String) Attribute Foo.VB_Ext_Key = ""AnotherKey"", ""AnotherValue"" Attribute Foo.VB_Ext_Key = ""OtherKey"", ""Value"" Attribute Foo.VB_Description = ""Desc"" bar = vbNullString End Sub "; var attributesToRemove = "Foo.VB_Ext_Key"; var oldValues = new List <string> { "\"Key\"", "\"Value\"" }; var newValues = new List <string> { "\"AnotherKey\"", "\"AnotherValue\"" }; string actualCode; var(component, rewriteSession, state) = TestSetup(inputCode); using (state) { var fooDeclaration = state.DeclarationFinder .UserDeclarations(DeclarationType.Procedure) .First(decl => decl.IdentifierName == "Foo"); var attributesUpdater = new AttributesUpdater(state); attributesUpdater.UpdateAttribute(rewriteSession, fooDeclaration, attributesToRemove, newValues, oldValues); rewriteSession.TryRewrite(); actualCode = component.CodeModule.Content(); } Assert.AreEqual(expectedCode, actualCode); }
public void AddOrUpdateAttribute_UsualAttribute_AlreadyThere_UpdatesAttribute_Variable() { const string inputCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Public MyVariable As Variant Attribute MyVariable.VB_VarDescription = ""NotMyDesc"" Public Sub Foo(bar As String) bar = vbNullString End Sub "; const string expectedCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Public MyVariable As Variant Attribute MyVariable.VB_VarDescription = ""MyDesc"" Public Sub Foo(bar As String) bar = vbNullString End Sub "; var attribute = "MyVariable.VB_VarDescription"; var newValues = new List <string> { "\"MyDesc\"" }; string actualCode; var(component, rewriteSession, state) = TestSetup(inputCode); using (state) { var moduleDeclaration = state.DeclarationFinder .UserDeclarations(DeclarationType.Variable) .Single(declaration => declaration.IdentifierName.Equals("MyVariable")); var attributesUpdater = new AttributesUpdater(state); attributesUpdater.AddOrUpdateAttribute(rewriteSession, moduleDeclaration, attribute, newValues); rewriteSession.TryRewrite(); actualCode = component.CodeModule.Content(); } Assert.AreEqual(expectedCode, actualCode); }
public void MultipleAddAttributeWorkForModules() { const string inputCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Public Sub Foo(bar As String) bar = vbNullString End Sub "; const string expectedCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Attribute VB_Exposed = False Attribute VB_Description = ""Module Description"" Public Sub Foo(bar As String) bar = vbNullString End Sub "; var firstAttributeToAdd = "VB_Exposed"; var firstAttributeValues = new List <string> { "False" }; var secondAttributeToAdd = "VB_Description"; var secondAttributeValues = new List <string> { "\"Module Description\"" }; string actualCode; var(component, rewriteSession, state) = TestSetup(inputCode); using (state) { var moduleDeclaration = state.DeclarationFinder .UserDeclarations(DeclarationType.ProceduralModule) .First(); var attributesUpdater = new AttributesUpdater(state); attributesUpdater.AddAttribute(rewriteSession, moduleDeclaration, firstAttributeToAdd, firstAttributeValues); attributesUpdater.AddAttribute(rewriteSession, moduleDeclaration, secondAttributeToAdd, secondAttributeValues); rewriteSession.TryRewrite(); actualCode = component.CodeModule.Content(); } Assert.AreEqual(expectedCode, actualCode); }
public void MultipleAddAttributeWorkForMembers() { const string inputCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Public Sub Foo(bar As String) bar = vbNullString End Sub "; const string expectedCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Public Sub Foo(bar As String) Attribute Foo.VB_Description = ""The MyFunc Description"" Attribute Foo.VB_HelpID = 2 bar = vbNullString End Sub "; var firstAttributeToAdd = "Foo.VB_Description"; var firstAttributeValues = new List <string> { "\"The MyFunc Description\"" }; var secondAttributeToAdd = "Foo.VB_HelpID"; var secondAttributeValues = new List <string> { "2" }; string actualCode; var(component, rewriteSession, state) = TestSetup(inputCode); using (state) { var fooDeclaration = state.DeclarationFinder .UserDeclarations(DeclarationType.Procedure) .First(decl => decl.IdentifierName == "Foo"); var attributesUpdater = new AttributesUpdater(state); attributesUpdater.AddAttribute(rewriteSession, fooDeclaration, firstAttributeToAdd, firstAttributeValues); attributesUpdater.AddAttribute(rewriteSession, fooDeclaration, secondAttributeToAdd, secondAttributeValues); rewriteSession.TryRewrite(); actualCode = component.CodeModule.Content(); } Assert.AreEqual(expectedCode, actualCode); }
public void AddOrUpdateAttribute_ExtKey_KeyAlreadyThere_UpdatesAttribute() { const string inputCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Attribute VB_Ext_Key = ""AnotherKey"", ""MyValue"" Attribute VB_Ext_Key = ""MyKey"", ""AnotherValue"" Public Sub Foo(bar As String) bar = vbNullString End Sub "; const string expectedCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Attribute VB_Ext_Key = ""AnotherKey"", ""MyValue"" Attribute VB_Ext_Key = ""MyKey"", ""MyValue"" Public Sub Foo(bar As String) bar = vbNullString End Sub "; var attribute = "VB_Ext_Key"; var newValues = new List <string> { "\"MyKey\"", "\"MyValue\"" }; string actualCode; var(component, rewriteSession, state) = TestSetup(inputCode); using (state) { var moduleDeclaration = state.DeclarationFinder .UserDeclarations(DeclarationType.Module) .Single(); var attributesUpdater = new AttributesUpdater(state); attributesUpdater.AddOrUpdateAttribute(rewriteSession, moduleDeclaration, attribute, newValues); rewriteSession.TryRewrite(); actualCode = component.CodeModule.Content(); } Assert.AreEqual(expectedCode, actualCode); }
public void UpdateAttributeWithoutValuesSpecifiedUpdatesFirstEntryForTheAttributeAndRemovesTheRestForModules() { const string inputCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Attribute VB_Ext_Key = ""Key"", ""Value"" Attribute VB_Ext_Key = ""OtherKey"", ""Value"" Public Sub Foo(bar As String) bar = vbNullString End Sub "; const string expectedCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Attribute VB_Ext_Key = ""AnotherKey"", ""AnotherValue"" Public Sub Foo(bar As String) bar = vbNullString End Sub "; var attributesToRemove = "VB_Ext_Key"; var newValues = new List <string> { "\"AnotherKey\"", "\"AnotherValue\"" }; string actualCode; var(component, rewriteSession, state) = TestSetup(inputCode); using (state) { var moduleDeclaration = state.DeclarationFinder .UserDeclarations(DeclarationType.ProceduralModule) .First(); var attributesUpdater = new AttributesUpdater(state); attributesUpdater.UpdateAttribute(rewriteSession, moduleDeclaration, attributesToRemove, newValues); rewriteSession.TryRewrite(); actualCode = component.CodeModule.Content(); } Assert.AreEqual(expectedCode, actualCode); }
public void AddAttributeAddsVbExtKeyAttributeForDifferentKey() { const string inputCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Attribute VB_Ext_Key = ""Key"", ""Value"" Public Sub Foo(bar As String) bar = vbNullString End Sub "; const string expectedCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Attribute VB_Ext_Key = ""Key"", ""Value"" Attribute VB_Ext_Key = ""OtherKey"", ""Value"" Public Sub Foo(bar As String) bar = vbNullString End Sub "; var attributeToAdd = "VB_Ext_Key"; var attributeValues = new List <string> { "\"OtherKey\"", "\"Value\"" }; string actualCode; var(component, rewriteSession, state) = TestSetup(inputCode); using (state) { var moduleDeclaration = state.DeclarationFinder .UserDeclarations(DeclarationType.ProceduralModule) .First(); var attributesUpdater = new AttributesUpdater(state); attributesUpdater.AddAttribute(rewriteSession, moduleDeclaration, attributeToAdd, attributeValues); rewriteSession.TryRewrite(); actualCode = component.CodeModule.Content(); } Assert.AreEqual(expectedCode, actualCode); }
public AddEquipment(AttributesUpdater attributesUpdater) { InitializeComponent(); cancel.FontFamily = Device.RuntimePlatform == Device.Android ? "FontAwesome" : null; qrScan.FontFamily = Device.RuntimePlatform == Device.Android ? "FontAwesome" : null; cancel.Text = Constants.CancelIcon; qrScan.Text = Constants.QRIcon; action.Text = "Verificar existencia"; addTapGestureRecognizers(); this.attributesUpdater = attributesUpdater; }
protected override IRefactoring TestRefactoring( IRewritingManager rewritingManager, RubberduckParserState state, RefactoringUserInteraction <IAnnotateDeclarationPresenter, AnnotateDeclarationModel> userInteraction, ISelectionService selectionService) { var annotationUpdater = new AnnotationUpdater(state); var attributesUpdater = new AttributesUpdater(state); var annotateDeclarationAction = new AnnotateDeclarationRefactoringAction(rewritingManager, annotationUpdater, attributesUpdater); var selectedDeclarationProvider = new SelectedDeclarationProvider(selectionService, state); return(new AnnotateDeclarationRefactoring(annotateDeclarationAction, selectedDeclarationProvider, selectionService, userInteraction)); }
public void RecoveringAttributesRecoversTheAttributesForTheMembersProvided_ViaMember() { var inputCode = @"Public Function Foo() As Variant Attribute Foo.VB_UserMemId = 0 Attribute Foo.VB_Description = ""DefaultMember"" End Function Public Function Bar() As Variant Attribute Bar.VB_UserMemId = -4 Attribute Bar.VB_Description = ""Enumerator"" End Function"; var expectedCode = @"Public Function Foo() As Variant Attribute Foo.VB_UserMemId = 0 Attribute Foo.VB_Description = ""DefaultMember"" End Function Public Function Bar() As Variant End Function"; var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component).Object; var(state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe); using (state) { var attributesUpdater = new AttributesUpdater(state); var mockFailureNotifier = new Mock <IMemberAttributeRecoveryFailureNotifier>(); var memberAttributeRecoverer = new MemberAttributeRecoverer(state, state, attributesUpdater, mockFailureNotifier.Object); memberAttributeRecoverer.RewritingManager = rewritingManager; var fooDeclaration = state.DeclarationFinder.UserDeclarations(DeclarationType.Function) .First(decl => decl.IdentifierName.Equals("Foo")); var membersToRecoverAttributesFor = new List <QualifiedMemberName> { fooDeclaration.QualifiedName }; memberAttributeRecoverer.RecoverCurrentMemberAttributesAfterNextParse(membersToRecoverAttributesFor); var rewriteSession = rewritingManager.CheckOutCodePaneSession(); var declarationsForWhichToRemoveAttributes = state.DeclarationFinder.UserDeclarations(DeclarationType.Function); RemoveAttributes(declarationsForWhichToRemoveAttributes, rewriteSession); ExecuteAndWaitForParserState(state, () => rewriteSession.TryRewrite(), ParserState.Ready); } var actualCode = component.CodeModule.Content(); Assert.AreEqual(expectedCode, actualCode); }
public void AddOrUpdateAttribute_UsualAttribute_AlreadyThere_UpdatesAttribute_Member() { const string inputCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Public Sub Foo(bar As String) Attribute Foo.VB_UserMemId = -4 bar = vbNullString End Sub "; const string expectedCode = @"VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = ""ClassKeys"" Attribute VB_GlobalNameSpace = False Public Sub Foo(bar As String) Attribute Foo.VB_UserMemId = 0 bar = vbNullString End Sub "; var attribute = "Foo.VB_UserMemId"; var newValues = new List <string> { "0" }; string actualCode; var(component, rewriteSession, state) = TestSetup(inputCode); using (state) { var moduleDeclaration = state.DeclarationFinder .UserDeclarations(DeclarationType.Procedure) .Single(); var attributesUpdater = new AttributesUpdater(state); attributesUpdater.AddOrUpdateAttribute(rewriteSession, moduleDeclaration, attribute, newValues); rewriteSession.TryRewrite(); actualCode = component.CodeModule.Content(); } Assert.AreEqual(expectedCode, actualCode); }
public void RecoveringAttributesStillThereDoesNotDoAnything_ViaMember() { var inputCode = @"Public Function Foo() As Variant Attribute Foo.VB_UserMemId = 0 Attribute Foo.VB_Description = ""DefaultMember"" End Function Public Function Bar() As Variant Attribute Bar.VB_UserMemId = -4 Attribute Bar.VB_Description = ""Enumerator"" End Function"; var expectedCode = @"Public Function Foo() As Variant Attribute Foo.VB_UserMemId = 0 Attribute Foo.VB_Description = ""DefaultMember"" End Function Public Function Bar() As Variant Attribute Bar.VB_UserMemId = -4 Attribute Bar.VB_Description = ""Enumerator"" End Function"; var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component).Object; var(state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe); using (state) { var attributesUpdater = new AttributesUpdater(state); var mockFailureNotifier = new Mock <IMemberAttributeRecoveryFailureNotifier>(); var memberAttributeRecoverer = new MemberAttributeRecoverer(state, state, attributesUpdater, mockFailureNotifier.Object); memberAttributeRecoverer.RewritingManager = rewritingManager; var fooDeclaration = state.DeclarationFinder.UserDeclarations(DeclarationType.Function) .First(decl => decl.IdentifierName.Equals("Foo")); var membersToRecoverAttributesFor = new List <QualifiedMemberName> { fooDeclaration.QualifiedName }; memberAttributeRecoverer.RecoverCurrentMemberAttributesAfterNextParse(membersToRecoverAttributesFor); state.OnParseRequested(this); } var actualCode = component.CodeModule.Content(); Assert.AreEqual(expectedCode, actualCode); }
//Should never happen in a real module. public void AddAttributeAddsModuleAttributeAtTopOfModuleIfThereAreNoModuleAttributesYet() { const string inputCode = @"Public Sub Foo(bar As String) bar = vbNullString End Sub "; const string expectedCode = @"Attribute VB_Exposed = False Public Sub Foo(bar As String) bar = vbNullString End Sub "; var attributeToAdd = "VB_Exposed"; var attributeValues = new List <string> { "False" }; string actualCode; var(component, rewriteSession, state) = TestSetup(inputCode); using (state) { var moduleDeclaration = state.DeclarationFinder .UserDeclarations(DeclarationType.ProceduralModule) .First(); var attributesUpdater = new AttributesUpdater(state); attributesUpdater.AddAttribute(rewriteSession, moduleDeclaration, attributeToAdd, attributeValues); rewriteSession.TryRewrite(); actualCode = component.CodeModule.Content(); } Assert.AreEqual(expectedCode, actualCode); }