|
2 | 2 | using System.Threading;
|
3 | 3 | using NUnit.Framework;
|
4 | 4 | using Rubberduck.Inspections.Concrete;
|
| 5 | +using Rubberduck.Parsing.Inspections.Abstract; |
| 6 | +using Rubberduck.Parsing.VBA; |
5 | 7 | using RubberduckTests.Mocks;
|
6 | 8 |
|
7 | 9 | namespace RubberduckTests.Inspections
|
8 | 10 | {
|
9 | 11 | [TestFixture]
|
10 |
| - public class VariableNotUsedInspectionTests |
| 12 | + public class VariableNotUsedInspectionTests : InspectionTestsBase |
11 | 13 | {
|
12 | 14 | [Test]
|
13 | 15 | [Category("Inspections")]
|
14 | 16 | public void VariableNotUsed_ReturnsResult()
|
15 | 17 | {
|
16 | 18 | const string inputCode =
|
17 |
| - @"Sub Foo() |
| 19 | +@"Sub Foo() |
18 | 20 | Dim var1 As String
|
19 | 21 | End Sub";
|
20 |
| - |
21 |
| - var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out _); |
22 |
| - using (var state = MockParser.CreateAndParse(vbe.Object)) |
23 |
| - { |
24 |
| - |
25 |
| - var inspection = new VariableNotUsedInspection(state); |
26 |
| - var inspectionResults = inspection.GetInspectionResults(CancellationToken.None); |
27 |
| - |
28 |
| - Assert.AreEqual(1, inspectionResults.Count()); |
29 |
| - } |
| 22 | + Assert.AreEqual(1, InspectionResultsForStandardModule(inputCode).Count()); |
30 | 23 | }
|
31 | 24 |
|
32 | 25 | [Test]
|
33 | 26 | [Category("Inspections")]
|
34 |
| - public void VariableNotUsed_ReturnsResult_MultipleVariables() |
| 27 | + public void VariableNotUsed_MultipleVariables_ReturnsResult() |
35 | 28 | {
|
36 | 29 | const string inputCode =
|
37 |
| - @"Sub Foo() |
| 30 | +@"Sub Foo() |
38 | 31 | Dim var1 As String
|
39 | 32 | Dim var2 As Date
|
40 | 33 | End Sub";
|
41 | 34 |
|
42 |
| - var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out _); |
43 |
| - using (var state = MockParser.CreateAndParse(vbe.Object)) |
44 |
| - { |
45 |
| - |
46 |
| - var inspection = new VariableNotUsedInspection(state); |
47 |
| - var inspectionResults = inspection.GetInspectionResults(CancellationToken.None); |
48 |
| - |
49 |
| - Assert.AreEqual(2, inspectionResults.Count()); |
50 |
| - } |
| 35 | + Assert.AreEqual(2, InspectionResultsForStandardModule(inputCode).Count()); |
51 | 36 | }
|
52 | 37 |
|
53 | 38 | [Test]
|
54 | 39 | [Category("Inspections")]
|
55 | 40 | public void VariableUsed_DoesNotReturnResult()
|
56 | 41 | {
|
57 | 42 | const string inputCode =
|
58 |
| - @"Function Foo() As Boolean |
59 |
| - Dim var1 as String |
| 43 | +@"Sub Foo() |
| 44 | + Dim var1 As String |
60 | 45 | var1 = ""test""
|
61 | 46 |
|
62 | 47 | Goo var1
|
63 |
| -End Function |
| 48 | +End Sub |
64 | 49 |
|
65 | 50 | Sub Goo(ByVal arg1 As String)
|
66 | 51 | End Sub";
|
67 | 52 |
|
68 |
| - var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out _); |
69 |
| - using (var state = MockParser.CreateAndParse(vbe.Object)) |
70 |
| - { |
71 |
| - |
72 |
| - var inspection = new VariableNotUsedInspection(state); |
73 |
| - var inspectionResults = inspection.GetInspectionResults(CancellationToken.None); |
74 |
| - |
75 |
| - Assert.AreEqual(0, inspectionResults.Count()); |
76 |
| - } |
| 53 | + Assert.AreEqual(0, InspectionResultsForStandardModule(inputCode).Count()); |
77 | 54 | }
|
78 | 55 |
|
79 | 56 | [Test]
|
80 | 57 | [Category("Inspections")]
|
81 |
| - public void VariableNotUsed_ReturnsResult_MultipleVariables_SomeAssigned() |
| 58 | + public void VariableNotUsed_MultipleVariables_OneAssignedAndReferenced_ReturnsResult() |
82 | 59 | {
|
83 | 60 | const string inputCode =
|
84 |
| - @"Sub Foo() |
85 |
| - Dim var1 as Integer |
| 61 | +@"Sub Foo() |
| 62 | + Dim var1 As Integer |
86 | 63 | var1 = 8
|
87 | 64 |
|
88 |
| - Dim var2 as String |
| 65 | + Dim var2 As String |
89 | 66 |
|
90 | 67 | Goo var1
|
91 | 68 | End Sub
|
92 | 69 |
|
93 | 70 | Sub Goo(ByVal arg1 As Integer)
|
94 | 71 | End Sub";
|
95 | 72 |
|
96 |
| - var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out _); |
97 |
| - using (var state = MockParser.CreateAndParse(vbe.Object)) |
98 |
| - { |
99 |
| - |
100 |
| - var inspection = new VariableNotUsedInspection(state); |
101 |
| - var inspectionResults = inspection.GetInspectionResults(CancellationToken.None); |
102 |
| - |
103 |
| - Assert.AreEqual(1, inspectionResults.Count()); |
104 |
| - } |
| 73 | + Assert.AreEqual(1, InspectionResultsForStandardModule(inputCode).Count()); |
105 | 74 | }
|
106 | 75 |
|
107 | 76 | [Test]
|
108 | 77 | [Category("Inspections")]
|
109 | 78 | public void VariableNotUsed_Ignored_DoesNotReturnResult()
|
110 | 79 | {
|
111 | 80 | const string inputCode =
|
112 |
| - @"Sub Foo() |
| 81 | +@"Sub Foo() |
113 | 82 | '@Ignore VariableNotUsed
|
114 | 83 | Dim var1 As String
|
115 | 84 | End Sub";
|
116 | 85 |
|
117 |
| - var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out _); |
118 |
| - using (var state = MockParser.CreateAndParse(vbe.Object)) |
119 |
| - { |
120 |
| - |
121 |
| - var inspection = new VariableNotUsedInspection(state); |
122 |
| - var inspectionResults = inspection.GetInspectionResults(CancellationToken.None); |
123 |
| - |
124 |
| - Assert.IsFalse(inspectionResults.Any()); |
125 |
| - } |
| 86 | + Assert.AreEqual(0, InspectionResultsForStandardModule(inputCode).Count()); |
126 | 87 | }
|
127 | 88 |
|
128 | 89 | [Test]
|
129 | 90 | [Category("Inspections")]
|
130 |
| - public void VariableNotUsed_DoesNotReturnsResult_UsedInNameStatement() |
| 91 | + public void VariableNotUsed_UsedInNameStatement_DoesNotReturnsResult() |
131 | 92 | {
|
132 | 93 | const string inputCode =
|
133 |
| - @"Sub Foo() |
| 94 | +@"Sub Foo() |
134 | 95 | Dim var1 As String
|
135 | 96 | Name ""foo"" As var1
|
136 | 97 | End Sub";
|
137 | 98 |
|
138 |
| - var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out _); |
139 |
| - using (var state = MockParser.CreateAndParse(vbe.Object)) |
140 |
| - { |
141 |
| - |
142 |
| - var inspection = new VariableNotUsedInspection(state); |
143 |
| - var inspectionResults = inspection.GetInspectionResults(CancellationToken.None); |
144 |
| - |
145 |
| - Assert.IsFalse(inspectionResults.Any()); |
146 |
| - } |
| 99 | + Assert.AreEqual(0, InspectionResultsForStandardModule(inputCode).Count()); |
147 | 100 | }
|
148 | 101 |
|
| 102 | + //https://github.com/rubberduck-vba/Rubberduck/issues/5088 |
149 | 103 | [Test]
|
150 | 104 | [Category("Inspections")]
|
151 |
| - public void VariableUsed_DoesNotReturnResultIfAssigned() |
| 105 | + public void VariableNotUsed_AssignedButNeverReferenced_ReturnsResult() |
152 | 106 | {
|
153 | 107 | const string inputCode =
|
154 |
| - @"Function Foo() As Boolean |
155 |
| - Dim var1 as String |
| 108 | +@"Sub Foo() |
| 109 | + Dim var1 As String |
156 | 110 | var1 = ""test""
|
157 |
| -End Function"; |
| 111 | +End Sub"; |
158 | 112 |
|
159 |
| - var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out _); |
160 |
| - using (var state = MockParser.CreateAndParse(vbe.Object)) |
161 |
| - { |
| 113 | + Assert.AreEqual(1, InspectionResultsForStandardModule(inputCode).Count()); |
| 114 | + } |
162 | 115 |
|
163 |
| - var inspection = new VariableNotUsedInspection(state); |
164 |
| - var inspectionResults = inspection.GetInspectionResults(CancellationToken.None); |
| 116 | + [Test] |
| 117 | + [Category("Inspections")] |
| 118 | + public void VariableNotUsed_AssignedMultpleTimesButNeverReferenced_ReturnsResult() |
| 119 | + { |
| 120 | + const string inputCode = |
| 121 | +@"Public Sub Foo() |
| 122 | + Dim var2 As Long |
| 123 | + var2 = 4 |
| 124 | + var2 = 7 |
| 125 | + var2 = 8 |
| 126 | +End Sub"; |
165 | 127 |
|
166 |
| - Assert.AreEqual(0, inspectionResults.Count()); |
167 |
| - } |
| 128 | + Assert.AreEqual(1, InspectionResultsForStandardModule(inputCode).Count()); |
168 | 129 | }
|
169 | 130 |
|
| 131 | + protected override IInspection InspectionUnderTest(RubberduckParserState state) |
| 132 | + { |
| 133 | + return new VariableNotUsedInspection(state); |
| 134 | + } |
170 | 135 | }
|
171 | 136 | }
|
0 commit comments