Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 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));
 }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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)));
        }
Ejemplo n.º 13
0
        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");
            }
        }
Ejemplo n.º 14
0
 private void AddTestSelectionCriteria(AccessibilityTestsDataObject tdo, string moduleName, string selectionTarget, string selectionLineIdentifier)
 {
     tdo.SelectionModuleName     = moduleName;
     tdo.SelectionTarget         = selectionTarget;
     tdo.SelectionLineIdentifier = selectionLineIdentifier;
 }
Ejemplo n.º 15
0
        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());
        }