Skip to content

Commit 3f4ea30

Browse files
committed
added some tests, ref. #2601
1 parent fe1756d commit 3f4ea30

File tree

2 files changed

+90
-20
lines changed

2 files changed

+90
-20
lines changed

RubberduckTests/Grammar/ResolverTests.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2536,5 +2536,37 @@ End Sub
25362536
Assert.IsNotNull(annotation);
25372537
Assert.IsTrue(results.SequenceEqual(((IgnoreAnnotation)annotation).InspectionNames));
25382538
}
2539+
2540+
[TestMethod]
2541+
public void MemberReferenceIsAssignmentTarget_NotTheParentObject()
2542+
{
2543+
var class1 = @"
2544+
Option Explicit
2545+
Private mSomething As Long
2546+
Public Property Get Something() As Long
2547+
Something = mSomething
2548+
End Property
2549+
Public Property Let Something(ByVal value As Long)
2550+
mSomething = value
2551+
End Property
2552+
";
2553+
var caller = @"
2554+
Option Explicit
2555+
Private Sub DoSomething(ByVal foo As Class1)
2556+
foo.Something = 42
2557+
End Sub
2558+
";
2559+
var state = Resolve(class1, caller);
2560+
2561+
var declaration = state.AllUserDeclarations.Single(item => item.IdentifierName == "foo" && item.DeclarationType == DeclarationType.Parameter);
2562+
var reference = declaration.References.Single();
2563+
2564+
Assert.IsFalse(reference.IsAssignment, "LHS member call on object is treating the object itself as an assignment target.");
2565+
2566+
var member = state.AllUserDeclarations.Single(item => item.IdentifierName == "Something" && item.DeclarationType == DeclarationType.PropertyLet);
2567+
var call = member.References.Single();
2568+
2569+
Assert.IsTrue(call.IsAssignment, "LHS member call on object is not flagging member reference as assignment target.");
2570+
}
25392571
}
25402572
}

RubberduckTests/Inspections/AssignedByValParameterInspectionTests.cs

Lines changed: 58 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
using RubberduckTests.Mocks;
1212
using System.Collections.Generic;
1313
using System;
14+
using Rubberduck.Parsing.Symbols;
15+
using Rubberduck.VBEditor.SafeComWrappers;
1416

1517
namespace RubberduckTests.Inspections
1618
{
@@ -107,7 +109,7 @@ public void AssignedByValParameter_QuickFixWorks()
107109
Let barByVal = ""test""
108110
End Sub";
109111

110-
var quickFixResult = ApplyPassParameterByReferenceQuickFixToVBAFragment(inputCode);
112+
var quickFixResult = ApplyPassParameterByReferenceQuickFixToCodeFragment(inputCode);
111113
Assert.AreEqual(expectedCode, quickFixResult);
112114

113115
//check when ByVal argument is one of several parameters
@@ -120,7 +122,7 @@ public void AssignedByValParameter_QuickFixWorks()
120122
Let barByVal = ""test""
121123
End Sub";
122124

123-
quickFixResult = ApplyPassParameterByReferenceQuickFixToVBAFragment(inputCode);
125+
quickFixResult = ApplyPassParameterByReferenceQuickFixToCodeFragment(inputCode);
124126
Assert.AreEqual(expectedCode, quickFixResult);
125127

126128
inputCode =
@@ -151,7 +153,7 @@ As _
151153
End Sub
152154
"
153155
;
154-
quickFixResult = ApplyPassParameterByReferenceQuickFixToVBAFragment(inputCode);
156+
quickFixResult = ApplyPassParameterByReferenceQuickFixToCodeFragment(inputCode);
155157
Assert.AreEqual(expectedCode, quickFixResult);
156158

157159
inputCode =
@@ -171,7 +173,7 @@ As _
171173
End Sub
172174
";
173175

174-
quickFixResult = ApplyPassParameterByReferenceQuickFixToVBAFragment(inputCode);
176+
quickFixResult = ApplyPassParameterByReferenceQuickFixToCodeFragment(inputCode);
175177
Assert.AreEqual(expectedCode, quickFixResult);
176178

177179
inputCode =
@@ -191,7 +193,7 @@ As _
191193
End Sub
192194
";
193195

194-
quickFixResult = ApplyPassParameterByReferenceQuickFixToVBAFragment(inputCode);
196+
quickFixResult = ApplyPassParameterByReferenceQuickFixToCodeFragment(inputCode);
195197
Assert.AreEqual(expectedCode, quickFixResult);
196198

197199
inputCode =
@@ -209,7 +211,7 @@ As _
209211
End Sub
210212
";
211213

212-
quickFixResult = ApplyPassParameterByReferenceQuickFixToVBAFragment(inputCode);
214+
quickFixResult = ApplyPassParameterByReferenceQuickFixToCodeFragment(inputCode);
213215
Assert.AreEqual(expectedCode, quickFixResult);
214216

215217
inputCode =
@@ -237,7 +239,7 @@ ByRef barbecue _
237239
bar + foo / barbecue
238240
End Sub
239241
";
240-
quickFixResult = ApplyPassParameterByReferenceQuickFixToVBAFragment(inputCode);
242+
quickFixResult = ApplyPassParameterByReferenceQuickFixToCodeFragment(inputCode);
241243
Assert.AreEqual(expectedCode, quickFixResult);
242244

243245
}
@@ -258,7 +260,7 @@ Public Sub Foo(ByVal arg1 As String)
258260
Let arg1 = ""test""
259261
End Sub";
260262

261-
var quickFixResult = ApplyIgnoreOnceQuickFixToVBAFragment(inputCode);
263+
var quickFixResult = ApplyIgnoreOnceQuickFixToCodeFragment(inputCode);
262264
Assert.AreEqual(expectedCode, quickFixResult);
263265
}
264266

@@ -278,7 +280,7 @@ Dim xArg1 As String
278280
Let xArg1 = ""test""
279281
End Sub";
280282

281-
var quickFixResult = ApplyLocalVariableQuickFixToVBAFragment(inputCode);
283+
var quickFixResult = ApplyLocalVariableQuickFixToCodeFragment(inputCode);
282284
Assert.AreEqual(expectedCode, quickFixResult);
283285
}
284286

@@ -303,7 +305,7 @@ Public Sub Foo(ByVal arg1 As String)
303305
End Sub"
304306
;
305307

306-
var quickFixResult = ApplyLocalVariableQuickFixToVBAFragment(inputCode);
308+
var quickFixResult = ApplyLocalVariableQuickFixToCodeFragment(inputCode);
307309
Assert.AreEqual(expectedCode, quickFixResult);
308310

309311
inputCode =
@@ -322,7 +324,7 @@ Public Sub Foo(ByVal arg1 As String)
322324
End Sub"
323325
;
324326

325-
quickFixResult = ApplyLocalVariableQuickFixToVBAFragment(inputCode);
327+
quickFixResult = ApplyLocalVariableQuickFixToCodeFragment(inputCode);
326328
Assert.AreEqual(expectedCode, quickFixResult);
327329
inputCode =
328330
@"
@@ -341,7 +343,7 @@ xArg1 As Long
341343
Let arg1 = ""test""
342344
End Sub"
343345
;
344-
quickFixResult = ApplyLocalVariableQuickFixToVBAFragment(inputCode);
346+
quickFixResult = ApplyLocalVariableQuickFixToCodeFragment(inputCode);
345347
Assert.AreEqual(expectedCode, quickFixResult);
346348

347349
inputCode =
@@ -372,7 +374,7 @@ End Sub
372374
"
373375
;
374376

375-
quickFixResult = ApplyLocalVariableQuickFixToVBAFragment(inputCode);
377+
quickFixResult = ApplyLocalVariableQuickFixToCodeFragment(inputCode);
376378
Assert.AreEqual(expectedCode, quickFixResult);
377379
}
378380

@@ -419,7 +421,7 @@ Dim arg1 As String
419421
End Sub"
420422
;
421423

422-
var quickFixResult = ApplyLocalVariableQuickFixToVBAFragment(inputCode);
424+
var quickFixResult = ApplyLocalVariableQuickFixToCodeFragment(inputCode);
423425
Assert.AreEqual(expectedCode, quickFixResult);
424426
}
425427

@@ -471,7 +473,7 @@ Public Function bar() As Long
471473
End Function
472474
";
473475

474-
var quickFixResult = ApplyLocalVariableQuickFixToVBAFragment(inputCode);
476+
var quickFixResult = ApplyLocalVariableQuickFixToCodeFragment(inputCode);
475477
Assert.AreEqual(expectedCode, quickFixResult);
476478
}
477479

@@ -531,7 +533,7 @@ Dim barsAlot as string
531533
End Sub
532534
";
533535

534-
var quickFixResult = ApplyLocalVariableQuickFixToVBAFragment(inputCode);
536+
var quickFixResult = ApplyLocalVariableQuickFixToCodeFragment(inputCode);
535537
Assert.AreEqual(expectedCode, quickFixResult);
536538
}
537539

@@ -560,10 +562,39 @@ End If
560562
MessingWithByValParameters = xMessWithThis
561563
End Function
562564
";
563-
var quickFixResult = ApplyLocalVariableQuickFixToVBAFragment(inputCode);
565+
var quickFixResult = ApplyLocalVariableQuickFixToCodeFragment(inputCode);
564566
Assert.AreEqual(expectedCode, quickFixResult);
565567
}
566568

569+
[TestMethod]
570+
[TestCategory("Inspections")]
571+
public void NoResultForLeftHandSideMemberAssignment()
572+
{
573+
var class1 = @"
574+
Option Explicit
575+
Private mSomething As Long
576+
Public Property Get Something() As Long
577+
Something = mSomething
578+
End Property
579+
Public Property Let Something(ByVal value As Long)
580+
mSomething = value
581+
End Property
582+
";
583+
var caller = @"
584+
Option Explicit
585+
Private Sub DoSomething(ByVal foo As Class1)
586+
foo.Something = 42
587+
End Sub
588+
";
589+
var builder = new MockVbeBuilder();
590+
var vbe = builder.ProjectBuilder("TestProject", ProjectProtection.Unprotected)
591+
.AddComponent("Class1", ComponentType.ClassModule, class1)
592+
.AddComponent("Module1", ComponentType.StandardModule, caller)
593+
.MockVbeBuilder()
594+
.Build();
595+
var results = GetInspectionResults(vbe);
596+
Assert.AreEqual(0, results.Count());
597+
}
567598

568599
[TestMethod]
569600
[TestCategory("Inspections")]
@@ -583,7 +614,8 @@ public void InspectionName()
583614
Assert.AreEqual(inspectionName, inspection.Name);
584615
}
585616

586-
private string ApplyPassParameterByReferenceQuickFixToVBAFragment(string inputCode)
617+
618+
private string ApplyPassParameterByReferenceQuickFixToCodeFragment(string inputCode)
587619
{
588620
var vbe = BuildMockVBEStandardModuleForVBAFragment(inputCode);
589621
var inspectionResults = GetInspectionResults(vbe);
@@ -593,7 +625,7 @@ private string ApplyPassParameterByReferenceQuickFixToVBAFragment(string inputCo
593625
return GetModuleContent(vbe);
594626
}
595627

596-
private string ApplyLocalVariableQuickFixToVBAFragment(string inputCode)
628+
private string ApplyLocalVariableQuickFixToCodeFragment(string inputCode)
597629
{
598630
var vbe = BuildMockVBEStandardModuleForVBAFragment(inputCode);
599631
var inspectionResults = GetInspectionResults(vbe);
@@ -605,7 +637,8 @@ private string ApplyLocalVariableQuickFixToVBAFragment(string inputCode)
605637

606638
return GetModuleContent(vbe);
607639
}
608-
private string ApplyIgnoreOnceQuickFixToVBAFragment(string inputCode)
640+
641+
private string ApplyIgnoreOnceQuickFixToCodeFragment(string inputCode)
609642
{
610643
var vbe = BuildMockVBEStandardModuleForVBAFragment(inputCode);
611644
var inspectionResults = GetInspectionResults(vbe);
@@ -614,28 +647,33 @@ private string ApplyIgnoreOnceQuickFixToVBAFragment(string inputCode)
614647

615648
return GetModuleContent(vbe);
616649
}
650+
617651
private string GetModuleContent(Mock<IVBE> vbe)
618652
{
619653
var project = vbe.Object.VBProjects[0];
620654
var module = project.VBComponents[0].CodeModule;
621655
return module.Content();
622656
}
657+
623658
private IEnumerable<Rubberduck.Inspections.Abstract.InspectionResultBase> GetInspectionResults(string inputCode)
624659
{
625660
var vbe = BuildMockVBEStandardModuleForVBAFragment(inputCode);
626661
return GetInspectionResults(vbe);
627662
}
663+
628664
private IEnumerable<Rubberduck.Inspections.Abstract.InspectionResultBase> GetInspectionResults(Mock<IVBE> vbe)
629665
{
630666
var parser = GetMockParseCoordinator(vbe);
631667
var inspection = new AssignedByValParameterInspection(parser.State);
632668
return inspection.GetInspectionResults();
633669
}
670+
634671
private void AssertVbaFragmentYieldsExpectedInspectionResultCount(string inputCode, int expectedCount)
635672
{
636673
var inspectionResults = GetInspectionResults(inputCode);
637674
Assert.AreEqual(expectedCount, inspectionResults.Count());
638675
}
676+
639677
private Mock<IVBE> BuildMockVBEStandardModuleForVBAFragment(string inputCode)
640678
{
641679
var builder = new MockVbeBuilder();

0 commit comments

Comments
 (0)