Beispiel #1
0
        public void MemberNotOnInterface_CatchesInvalidUseOfMember()
        {
            const string userForm1Code = @"
Private _fooBar As String

Public Property Let FooBar(value As String)
    _fooBar = value
End Property

Public Property Get FooBar() As String
    FooBar = _fooBar
End Property
";

            const string analyzedCode = @"Option Explicit

Sub FizzBuzz()

    Dim bar As UserForm1
    Set bar = New UserForm1
    bar.FooBar = ""FooBar""

    Dim foo As UserForm
    Set foo = New UserForm1
    foo.FooBar = ""BarFoo""

End Sub
";
            var mockVbe = new MockVbeBuilder();
            var projectBuilder = mockVbe.ProjectBuilder("testproject", ProjectProtection.Unprotected);
            projectBuilder.MockUserFormBuilder("UserForm1", userForm1Code).MockProjectBuilder()
                .AddComponent("ReferencingModule", ComponentType.StandardModule, analyzedCode)
                //.AddReference("Excel", MockVbeBuilder.LibraryPathMsExcel)
                .AddReference("MSForms", MockVbeBuilder.LibraryPathMsForms);

            mockVbe.AddProject(projectBuilder.Build());


            var parser = MockParser.Create(mockVbe.Build().Object);

            //parser.State.AddTestLibrary("Excel.1.8.xml");
            parser.State.AddTestLibrary("MSForms.2.0.xml");

            parser.Parse(new CancellationTokenSource());
            if (parser.State.Status >= ParserState.Error)
            {
                Assert.Inconclusive("Parser Error");
            }

            using (var state = parser.State)
            {
                var inspection = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults();

                Assert.IsTrue(inspectionResults.Any());
            }

        }
Beispiel #2
0
        public void MemberNotOnInterface_DoesNotReturnResult_ProjectReference()
        {
            const string inputCode =
                @"Sub Foo()
    Dim dict As Scripting.Dictionary
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection        = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.IsFalse(inspectionResults.Any());
            }
        }
Beispiel #3
0
        public void MemberNotOnInterface_ReturnsResult_UnDeclaredMemberOnParameter()
        {
            const string inputCode =
                @"Sub Foo(dict As Dictionary)
    dict.NonMember
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection        = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.AreEqual(1, inspectionResults.Count());
            }
        }
Beispiel #4
0
        public void MemberNotOnInterface_ReturnsResult_ApplicationObject()
        {
            const string inputCode =
                @"Sub Foo()
    Application.NonMember
End Sub";

            using (var state = ArrangeParserAndParse(inputCode, "Excel"))
            {
                var inspection        = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.AreEqual(1, inspectionResults.Count());
            }
        }
Beispiel #5
0
        public void MemberNotOnInterface_DoesNotReturnResult_NonExtensible()
        {
            const string inputCode =
                @"Sub Foo()
    Dim x As File
    Debug.Print x.NonMember
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection        = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.IsFalse(inspectionResults.Any());
            }
        }
Beispiel #6
0
        public void MemberNotOnInterface_CatchesInvalidUseOfMember()
        {
            const string userForm1Code = @"
Private _fooBar As String

Public Property Let FooBar(value As String)
    _fooBar = value
End Property

Public Property Get FooBar() As String
    FooBar = _fooBar
End Property
";

            const string analyzedCode   = @"Option Explicit

Sub FizzBuzz()

    Dim bar As UserForm1
    Set bar = New UserForm1
    bar.FooBar = ""FooBar""

    Dim foo As UserForm
    Set foo = New UserForm1
    foo.FooBar = ""BarFoo""

End Sub
";
            var          vbeBuilder     = new MockVbeBuilder();
            var          projectBuilder = vbeBuilder.ProjectBuilder("testproject", ProjectProtection.Unprotected);

            projectBuilder.MockUserFormBuilder("UserForm1", userForm1Code).AddFormToProjectBuilder()
            .AddComponent("ReferencingModule", ComponentType.StandardModule, analyzedCode)
            .AddReference("MSForms", MockVbeBuilder.LibraryPathMsForms, 2, 0);

            vbeBuilder.AddProject(projectBuilder.Build());
            var vbe = vbeBuilder.Build();

            using (var state = MockParser.CreateAndParse(vbe.Object))
            {
                var inspection        = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.IsTrue(inspectionResults.Any());
            }
        }
Beispiel #7
0
        public void MemberNotOnInterface_DoesNotReturnResult_WithNewBlockOnInterface()
        {
            const string inputCode =
                @"Sub Foo()
    With New Dictionary
        .Add 42, 42
    End With
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection        = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.IsFalse(inspectionResults.Any());
            }
        }
Beispiel #8
0
        public void MemberNotOnInterface_WithNewReturnsResult()
        {
            const string inputCode =
                @"Sub Foo()
    With New Dictionary
        .FooBar
    End With
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection        = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.AreEqual(1, inspectionResults.Count());
            }
        }
Beispiel #9
0
        public void MemberNotOnInterface_DoesNotReturnResult_BangNotation()
        {
            const string inputCode =
                @"Sub Foo()
    Dim dict As Dictionary
    Set dict = New Dictionary
    dict!SomeIdentifier = 42
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection        = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.IsFalse(inspectionResults.Any());
            }
        }
Beispiel #10
0
        public void MemberNotOnInterface_DoesNotReturnResult_DeclaredMember()
        {
            const string inputCode =
                @"Sub Foo()
    Dim dict As Dictionary
    Set dict = New Dictionary
    Debug.Print dict.Count
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection        = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.IsFalse(inspectionResults.Any());
            }
        }
Beispiel #11
0
        public void MemberNotOnInterface_ReturnsResult_UnDeclaredInterfaceMember()
        {
            const string inputCode =
                @"Sub Foo()
    Dim dict As Dictionary
    Set dict = New Dictionary
    dict.NonMember
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults();

                Assert.AreEqual(1, inspectionResults.Count());
            }
        }
Beispiel #12
0
        public void MemberNotOnInterface_Ignored_DoesNotReturnResult()
        {
            const string inputCode =
                @"Sub Foo(dict As Dictionary)
    Dim dict As Dictionary
    Set dict = New Dictionary
    '@Ignore MemberNotOnInterface
    dict.NonMember
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection        = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.IsFalse(inspectionResults.Any());
            }
        }
Beispiel #13
0
        public void MemberNotOnInterface_DoesNotReturnResult_WithBlockBangNotation()
        {
            const string inputCode =
                @"Sub Foo()
    Dim dict As New Dictionary
    With dict
        !SomeIdentifier = 42
    End With
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults();

                Assert.IsFalse(inspectionResults.Any());
            }
        }
Beispiel #14
0
        public void MemberNotOnInterface_ReturnsResult_ApplicationObject()
        {
            const string inputCode =
                @"Sub Foo()
    Application.NonMember
End Sub";

            var parser = ArrangeParser(inputCode, "Excel");

            parser.Parse(new CancellationTokenSource());
            if (parser.State.Status >= ParserState.Error)
            {
                Assert.Inconclusive("Parser Error");
            }

            var inspection        = new MemberNotOnInterfaceInspection(parser.State);
            var inspectionResults = inspection.GetInspectionResults();

            Assert.AreEqual(1, inspectionResults.Count());
        }
Beispiel #15
0
        public void MemberNotOnInterface_ProcedureArgument()
        {
            const string inputCode =
                @"Sub Foo()
    Dim fooBaz As Dictionary
    Set fooBaz = New Dictionary 
    Bar fooBaz.FooBar
End Sub

Private Sub Bar(baz As Long)
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection        = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.AreEqual(1, inspectionResults.Count());
            }
        }
Beispiel #16
0
        public void MemberNotOnInterface_DoesNotReturnResult_ProjectReference()
        {
            const string inputCode =
                @"Sub Foo()
    Dim dict As Scripting.Dictionary
End Sub";

            var parser = ArrangeParser(inputCode);

            parser.Parse(new CancellationTokenSource());
            if (parser.State.Status >= ParserState.Error)
            {
                Assert.Inconclusive("Parser Error");
            }

            var inspection        = new MemberNotOnInterfaceInspection(parser.State);
            var inspectionResults = inspection.GetInspectionResults();

            Assert.IsFalse(inspectionResults.Any());
        }
Beispiel #17
0
        public void MemberNotOnInterface_DoesNotReturnResult_NonExtensible()
        {
            const string inputCode =
                @"Sub Foo()
    Dim x As File
    Debug.Print x.NonMember
End Sub";

            var parser = ArrangeParser(inputCode);

            parser.Parse(new CancellationTokenSource());
            if (parser.State.Status >= ParserState.Error)
            {
                Assert.Inconclusive("Parser Error");
            }

            var inspection        = new MemberNotOnInterfaceInspection(parser.State);
            var inspectionResults = inspection.GetInspectionResults();

            Assert.IsFalse(inspectionResults.Any());
        }
Beispiel #18
0
        public void MemberNotOnInterface_ReturnsResult_UnDeclaredInterfaceMember()
        {
            const string inputCode =
                @"Sub Foo()
    Dim dict As Dictionary
    Set dict = New Dictionary
    dict.NonMember
End Sub";

            var parser = ArrangeParser(inputCode);

            parser.Parse(new CancellationTokenSource());
            if (parser.State.Status >= ParserState.Error)
            {
                Assert.Inconclusive("Parser Error");
            }

            var inspection        = new MemberNotOnInterfaceInspection(parser.State);
            var inspectionResults = inspection.GetInspectionResults();

            Assert.AreEqual(1, inspectionResults.Count());
        }
Beispiel #19
0
        public void MemberNotOnInterface_DoesNotReturnResult_BangNotation()
        {
            const string inputCode =
                @"Sub Foo()
    Dim dict As Dictionary
    Set dict = New Dictionary
    dict!SomeIdentifier = 42
End Sub";

            var parser = ArrangeParser(inputCode);

            parser.Parse(new CancellationTokenSource());
            if (parser.State.Status >= ParserState.Error)
            {
                Assert.Inconclusive("Parser Error");
            }

            var inspection        = new MemberNotOnInterfaceInspection(parser.State);
            var inspectionResults = inspection.GetInspectionResults();

            Assert.IsFalse(inspectionResults.Any());
        }
Beispiel #20
0
        public void MemberNotOnInterface_DoesNotReturnResult_ControlObject()
        {
            const string inputCode =
                @"Sub Foo(bar as MSForms.TextBox)
    Debug.Print bar.Left
End Sub";

            var vbeBuilder     = new MockVbeBuilder();
            var projectBuilder = vbeBuilder.ProjectBuilder("testproject", ProjectProtection.Unprotected);

            projectBuilder.MockUserFormBuilder("UserForm1", inputCode).AddFormToProjectBuilder()
            .AddReference("MSForms", MockVbeBuilder.LibraryPathMsForms, 2, 0, true);

            vbeBuilder.AddProject(projectBuilder.Build());
            var vbe = vbeBuilder.Build();

            using (var state = MockParser.CreateAndParse(vbe.Object))
            {
                var inspection        = new MemberNotOnInterfaceInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.IsTrue(!inspectionResults.Any());
            }
        }