public void DeclarationFinder_PrivateSub_RespectPublicSubInOtherModule() { var expectedResults = new string[] { "DoThis", "filename", "member1" }; var moduleContent1 = @" Private Sub DoThis(filename As String) SetFilename filename 'Selecting 'SetFilename' to rename End Sub "; var moduleContent2 = @" Private member1 As String Public Sub SetFilename(filename As String) member1 = filename End Sub "; var tdo = new AccessibilityTestsDataObject(); AddTestSelectionCriteria(tdo, "modOne", "SetFilename", "SetFilename filename"); AddTestComponent(tdo, tdo.SelectionModuleName, moduleContent1, ComponentType.StandardModule); AddTestComponent(tdo, "modTwo", moduleContent2, ComponentType.StandardModule); TestAccessibleDeclarations(tdo, expectedResults); }
public void DeclarationFinder_InProcedure_MemberDeclaration() { var expectedResults = new string[] { "adder", "member1", "Foo" }; var moduleContent1 = @" Private member1 As Long Public Function Foo() As Long Dim adder as Long adder = 10 member1 = member1 + adder 'Selecting member1 to rename Foo = member1 End Function "; var tdo = new AccessibilityTestsDataObject(); AddTestSelectionCriteria(tdo, "CFirstClass", "member1", "member1 + adder"); AddTestComponent(tdo, tdo.SelectionModuleName, moduleContent1, ComponentType.ClassModule); TestAccessibleDeclarations(tdo, expectedResults); }
private void CreateQualifiedSelectionForTestCase(AccessibilityTestsDataObject tdo) { var component = RetrieveComponent(tdo, tdo.SelectionModuleName); var moduleContent = component.CodeModule.GetLines(1, component.CodeModule.CountOfLines); var splitToken = new string[] { "\r\n" }; var lines = moduleContent.Split(splitToken, System.StringSplitOptions.None); int lineOfInterestNumber = 0; string lineOfInterestContent = string.Empty; for (int idx = 0; idx < lines.Count() && lineOfInterestNumber < 1; idx++) { if (lines[idx].Contains(tdo.SelectionLineIdentifier)) { lineOfInterestNumber = idx + 1; lineOfInterestContent = lines[idx]; } } Assert.IsTrue(lineOfInterestNumber > 0, "Unable to find target '" + tdo.SelectionTarget + "' in " + tdo.SelectionModuleName + " content."); var column = lineOfInterestContent.IndexOf(tdo.SelectionLineIdentifier); column = column + tdo.SelectionLineIdentifier.IndexOf(tdo.SelectionTarget) + 1; var moduleParent = component.CodeModule.Parent; tdo.QualifiedSelection = new QualifiedSelection(new QualifiedModuleName(moduleParent), new Selection(lineOfInterestNumber, column, lineOfInterestNumber, column)); }
public void DeclarationFinder_PublicClassAndPublicModuleSub_RenameClassSub() { var expectedResults = new string[] { "Foo" }; var moduleContent1 = @" Public Function Foo() As Long 'Selecting 'Foo' to rename Foo = 5 End Function "; var moduleContent2 = @" Public Function Foo2() As Long Foo2 = 2 End Function "; var tdo = new AccessibilityTestsDataObject(); AddTestSelectionCriteria(tdo, "CFirstClass", "Foo", "Function Foo() As Long"); AddTestComponent(tdo, tdo.SelectionModuleName, moduleContent1, ComponentType.ClassModule); AddTestComponent(tdo, "modOne", moduleContent2, ComponentType.StandardModule); TestAccessibleDeclarations(tdo, expectedResults); }
public void DeclarationFinder_PrivateSub_WithBlock() { var expectedResults = new string[] { "mFolderpath", "ExtractFilename", "SetFilename", "filename", "input", "Bar" }; var moduleContent1 = @" Private myData As String Private mDupData As String Public Sub Foo(filenm As String) Dim filepath As String filepath = ""C:\MyStuff\"" & filenm Dim helper As CFileHelper Set helper = new CFileHelper With helper .StoreFilename filepath 'Selecting 'StoreFilename' to rename mDupData = filepath End With End Sub Public Sub StoreFilename(filename As String) myData = filename End Sub "; var moduleContent2 = @" Private mFolderpath As String Public Sub StoreFilename(input As String) Dim filename As String filename = ExtractFilename(input) SetFilename filename End Sub Private Function ExtractFilename(filepath As String) As String ExtractFilename = filepath End Function Public Sub Bar() End Sub "; var tdo = new AccessibilityTestsDataObject(); AddTestSelectionCriteria(tdo, "modOne", "StoreFilename", ".StoreFilename filepath"); AddTestComponent(tdo, tdo.SelectionModuleName, moduleContent1, ComponentType.StandardModule); AddTestComponent(tdo, "CFileHelper", moduleContent2, ComponentType.ClassModule); TestAccessibleDeclarations(tdo, expectedResults); }
private void AddTestComponent(AccessibilityTestsDataObject tdo, string moduleIdentifier, string moduleContent, ComponentType componentType) { if (null == tdo.Components) { tdo.Components = new List <TestComponentSpecification>(); } tdo.Components.Add(new TestComponentSpecification(moduleIdentifier, moduleContent, componentType)); }
private void PrepareScenarioTestData(AccessibilityTestsDataObject tdo, string[] testSpecificExpectedResults) { SetExpectedResults(tdo, testSpecificExpectedResults); tdo.VBE = BuildProject(tdo.ProjectName, tdo.Components); tdo.Parser = MockParser.CreateAndParse(tdo.VBE); CreateQualifiedSelectionForTestCase(tdo); }
public void DeclarationFinder_Module_To_ModuleScopeResolution() { var expectedResults = new string[] { "Foo1", "Foo2", "Foo3", "Foo4", "gConstant", "member2" }; var moduleContent1 = @" Private member11 As Long Public member2 As Long Private Function Bar1() As Long Bar2 Bar1 = member2 + modTwo.Foo1 + modTwo.Foo2 + modTwo.Foo3 'Selecting Foo2 to rename End Function Private Sub Bar2() member2 = member2 * 4 End Sub "; var moduleContent2 = @" Public Const gConstant As Long = 10 Public Function Foo1() As Long Foo1 = 1 End Function Public Function Foo2() As Long Foo2 = 2 End Function Public Function Foo3() As Long Foo3 = 3 End Function Private Sub Foo4() End Sub "; var tdo = new AccessibilityTestsDataObject(); AddTestSelectionCriteria(tdo, "modOne", "Foo2", "Foo2 + modTwo.Foo3"); AddTestComponent(tdo, tdo.SelectionModuleName, moduleContent1, ComponentType.StandardModule); AddTestComponent(tdo, "modTwo", moduleContent2, ComponentType.StandardModule); TestAccessibleDeclarations(tdo, expectedResults); }
private void SetExpectedResults(AccessibilityTestsDataObject tdo, string[] testSpecificExpectedResults) { tdo.ExpectedResults = new List <string>(); tdo.ExpectedResults.AddRange(testSpecificExpectedResults); //Add module name(s) and project name tdo.ExpectedResults.Add(tdo.SelectionTarget); tdo.Components.ForEach(c => tdo.ExpectedResults.Add(c.Name)); tdo.ExpectedResults.Add(tdo.ProjectName); }
public void DeclarationFinder_PrivateSub_MultipleReferences() { var expectedResults = new string[] { "DoThis", "filename", "member1", "StoreFilename", "ExtractFilename", "mFolderpath", "filepath" }; var moduleContent1 = @" Private Sub DoThis(filename As String) SetFilename filename 'Selecting 'SetFilename' to rename End Sub "; var moduleContent2 = @" Private member1 As String Public Sub SetFilename(filename As String) member1 = filename End Sub "; var moduleContent3 = @" Private mFolderpath As String Private Sub StoreFilename(filepath As String) Dim filename As String filename = ExtractFilename(filepath) SetFilename filename End Sub Private Function ExtractFilename(filepath As String) As String ExtractFilename = filepath End Function" ; var tdo = new AccessibilityTestsDataObject(); AddTestSelectionCriteria(tdo, "modOne", "SetFilename", "SetFilename filename"); AddTestComponent(tdo, tdo.SelectionModuleName, moduleContent1, ComponentType.StandardModule); AddTestComponent(tdo, "modTwo", moduleContent2, ComponentType.StandardModule); AddTestComponent(tdo, "modThree", moduleContent3, ComponentType.StandardModule); TestAccessibleDeclarations(tdo, expectedResults); }
public void DeclarationFinder_Module_To_ClassScope() { var expectedResults = new string[] { "Foo2", "Bar", "member11" }; var moduleContent1 = @" Private member11 As Long Public member2 As Long Public Function Foo2() As Long Dim adder as Long adder = 10 member1 = member1 + adder Foo2 = member1 End Function Private Sub Bar() member2 = member2 * 4 'Selecting member2 to rename End Sub "; var moduleContent2 = @" Private member1 As Long Public Function Foo() As Long Dim adder as Long adder = 10 member1 = member1 + adder Foo = member1 End Function "; var tdo = new AccessibilityTestsDataObject(); AddTestSelectionCriteria(tdo, "modOne", "member2", "member2 * 4"); AddTestComponent(tdo, tdo.SelectionModuleName, moduleContent1, ComponentType.StandardModule); AddTestComponent(tdo, "CFirstClass", moduleContent2, ComponentType.ClassModule); TestAccessibleDeclarations(tdo, expectedResults); }
private void TestAccessibleDeclarations(AccessibilityTestsDataObject tdo, string[] testSpecificExpectedResults) { PrepareScenarioTestData(tdo, testSpecificExpectedResults); var target = tdo.Parser.AllUserDeclarations.FindTarget(tdo.QualifiedSelection); if (null == target) { Assert.Inconclusive("Unable to find target from QualifiedSelection"); } var accessibleNames = tdo.Parser.DeclarationFinder.GetDeclarationsWithIdentifiersToAvoid(target) .Select(d => d.IdentifierName); Assert.IsFalse(accessibleNames.Except(tdo.ExpectedResults).Any() || tdo.ExpectedResults.Except(accessibleNames).Any() , BuildIdentifierListToDisplay(accessibleNames.Except(tdo.ExpectedResults), tdo.ExpectedResults.Except(accessibleNames))); }
private void SetupSUT(string projectName) { if (_tdo != null) { return; } string[] accessibleWithinParentProcedure = { "arg1", "FooBar1", "targetAccessibilityTests", "theSecondArg" }; string[] accessibleModuleScope = { "memberString", "memberLong", "myEggo", "Foo", "FooBar1", "GoMyEggo", "FooFight" }; string[] accessibleGlobalScope = { "CantTouchThis", "BigNumber", "DoSomething", "SetFilename", "ShortStory", "THE_FILENAME", "TestProject" }; var firstClassBody = FindsAccessibleDeclarations_FirstClassBody(); var secondClassBody = FindsAccessibleDeclarations_SecondClassBody(); var firstModuleBody = FindsAccessibleDeclarations_FirstModuleBody(); var secondModuleBody = FindsAccessibleDeclarations_SecondModuleBody(); _tdo = new AccessibilityTestsDataObject(); _tdo.TargetIdentifier = "targetAccessibilityTests"; AddAccessibleNames("ProcedureScope", accessibleWithinParentProcedure); AddAccessibleNames("ModuleScope", accessibleModuleScope); AddAccessibleNames("GlobalScope", accessibleGlobalScope); AddTestComponent("CFirstClass", firstClassBody, ComponentType.ClassModule); AddTestComponent("CSecondClass", secondClassBody, ComponentType.ClassModule); AddTestComponent("modFirst", firstModuleBody, ComponentType.StandardModule); AddTestComponent("modSecond", secondModuleBody, ComponentType.StandardModule); _tdo.VBE = BuildProject("TestProject", _tdo.Components); _tdo.Parser = MockParser.Create(_tdo.VBE, new RubberduckParserState(_tdo.VBE)); _tdo.Parser.Parse(new CancellationTokenSource()); if (_tdo.Parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } }
private void AddTestSelectionCriteria(AccessibilityTestsDataObject tdo, string moduleName, string selectionTarget, string selectionLineIdentifier) { tdo.SelectionModuleName = moduleName; tdo.SelectionTarget = selectionTarget; tdo.SelectionLineIdentifier = selectionLineIdentifier; }
private IVBComponent RetrieveComponent(AccessibilityTestsDataObject tdo, string componentName) { var vbProject = tdo.VBE.VBProjects.Where(item => item.Name == tdo.ProjectName).SingleOrDefault(); return(vbProject.VBComponents.Where(item => item.Name == componentName).SingleOrDefault()); }