public void GetsCorrectReferenceCount_ClassAccessor() { string className = "TestClass"; string classCode = $@" Public this As TBar "; string classInstance = "theClass"; string moduleName = MockVbeBuilder.TestModuleName; string moduleCode = $@" Public Type TBar First As String Second As String End Type Private {classInstance} As {className} Public Sub Initialize() Set {classInstance} = New {className} End Sub 'Public Sub Fizz(newValue As String) ' With {classInstance} ' .this.First = newValue ' End With 'End Sub 'Public Sub Buzz(newValue As String) ' With {classInstance} ' .this.Second = newValue ' End With 'End Sub Public Sub Fizz1(newValue As String) {classInstance}.this.First = newValue End Sub Public Sub Buzz1(newValue As String) {classInstance}.this.Second = newValue End Sub "; var vbe = MockVbeBuilder.BuildFromModules((moduleName, moduleCode, ComponentType.StandardModule), (className, classCode, ComponentType.ClassModule)); using (var state = MockParser.CreateAndParse(vbe.Object)) { var this_Target = state.DeclarationFinder.UserDeclarations(DeclarationType.Variable) .Where(d => d.IdentifierName == "this") .Single(); var udtMembers = state.DeclarationFinder.UserDeclarations(DeclarationType.UserDefinedTypeMember); var sut = new UserDefinedTypeInstance(this_Target as VariableDeclaration, udtMembers); Assert.AreEqual(2, sut.UDTMemberReferences.Count()); } }
public void UDTField_MemberAccessMultipleInstances() { var inputCode = $@" Private Type TBar FirstVal As String SecondVal As Long ThirdVal As Byte End Type Private myBar As TBar Private myFoo As TBar Public Function GetOne() As String GetOne = myBar.FirstVal End Function Public Function GetTwo() As Long GetTwo = myBar.ThirdVal End Function Public Function GetThree() As Long GetThree = myFoo.ThirdVal End Function "; var vbe = MockVbeBuilder.BuildFromStdModules((MockVbeBuilder.TestModuleName, inputCode)); var state = MockParser.CreateAndParse(vbe.Object); using (state) { var myBarTarget = state.DeclarationFinder.UserDeclarations(DeclarationType.Variable) .OfType <VariableDeclaration>() .Where(d => "myBar" == d.IdentifierName) .Single(); var myFooTarget = state.DeclarationFinder.UserDeclarations(DeclarationType.Variable) .OfType <VariableDeclaration>() .Where(d => "myFoo" == d.IdentifierName) .Single(); var udtMembers = state.DeclarationFinder.UserDeclarations(DeclarationType.UserDefinedTypeMember) .Where(d => "TBar" == d.ParentDeclaration.IdentifierName); var myBarRefs = new UserDefinedTypeInstance(myBarTarget, udtMembers); var refs = myBarRefs.UDTMemberReferences; Assert.AreEqual(2, refs.Select(rf => rf.IdentifierName).Count()); var myFooRefs = new UserDefinedTypeInstance(myFooTarget, udtMembers); var fooRefs = myBarRefs.UDTMemberReferences; Assert.AreEqual(2, fooRefs.Select(rf => rf.IdentifierName).Count()); } }
public void GetsCorrectReferenceCount() { string inputCode = $@" Private Type TBar First As String Second As String End Type Private bizz_ As TBar Private fizz_ As TBar Public Sub Fizz(newValue As String) With bizz_ .First = newValue End With End Sub Public Sub Buzz(newValue As String) With bizz_ .Second = newValue End With End Sub Public Sub Fizz1(newValue As String) bizz_.First = newValue End Sub Public Sub Buzz1(newValue As String) bizz_.Second = newValue End Sub Public Sub Tazz(newValue As String) fizz_.First = newValue fizz_.Second = newValue End Sub "; var vbe = MockVbeBuilder.BuildFromModules((MockVbeBuilder.TestModuleName, inputCode, ComponentType.StandardModule)); using (var state = MockParser.CreateAndParse(vbe.Object)) { var bizz_Target = state.DeclarationFinder.UserDeclarations(DeclarationType.Variable) .Where(d => d.IdentifierName == "bizz_") .Single(); var udtMembers = state.DeclarationFinder.UserDeclarations(DeclarationType.UserDefinedTypeMember); var sut = new UserDefinedTypeInstance(bizz_Target as VariableDeclaration, udtMembers); Assert.AreEqual(4, sut.UDTMemberReferences.Count()); } }