1
+ using System . Collections . Generic ;
1
2
using System . Linq ;
2
3
using System . Threading ;
3
4
using NUnit . Framework ;
4
5
using Rubberduck . Inspections . Concrete ;
6
+ using Rubberduck . Parsing . Inspections . Abstract ;
5
7
using Rubberduck . VBEditor . SafeComWrappers ;
6
8
using RubberduckTests . Mocks ;
7
9
@@ -10,194 +12,167 @@ namespace RubberduckTests.Inspections
10
12
[ TestFixture ]
11
13
public class UnassignedVariableUsageInspectionTests
12
14
{
13
- [ Test ]
14
- [ Category ( "Inspections" ) ]
15
- public void UnassignedVariableUsage_ReturnsResult ( )
15
+ private IEnumerable < IInspectionResult > GetInspectionResults ( string code )
16
16
{
17
- const string inputCode = @"
18
- Sub Foo()
19
- Dim b As Boolean
20
- Dim bb As Boolean
21
- bb = b
22
- End Sub" ;
23
-
24
- var vbe = MockVbeBuilder . BuildFromSingleModule ( inputCode , ComponentType . ClassModule , out _ ) ;
17
+ var vbe = MockVbeBuilder . BuildFromSingleModule ( code , ComponentType . ClassModule , out _ ) ;
25
18
using ( var state = MockParser . CreateAndParse ( vbe . Object ) )
26
19
{
27
20
28
21
var inspection = new UnassignedVariableUsageInspection ( state ) ;
29
- var inspectionResults = inspection . GetInspectionResults ( CancellationToken . None ) ;
30
-
31
- Assert . AreEqual ( 1 , inspectionResults . Count ( ) ) ;
22
+ return inspection . GetInspectionResults ( CancellationToken . None ) ;
32
23
}
33
24
}
34
25
35
- // this test will eventually be removed once we can fire the inspection on a specific reference
36
26
[ Test ]
37
27
[ Category ( "Inspections" ) ]
38
- public void UnassignedVariableUsage_ReturnsSingleResult_MultipleReferences ( )
28
+ public void IgnoresExplicitArrays ( )
39
29
{
40
- const string inputCode =
41
- @"Sub tester()
42
- Dim myarr() As Variant
43
- Dim i As Long
44
-
45
- ReDim myarr(1 To 10)
46
-
47
- For i = 1 To 10
48
- DoSomething myarr(i)
49
- Next
50
-
30
+ const string code = @"
31
+ Sub Foo()
32
+ Dim bar() As String
33
+ bar(1) = ""value""
51
34
End Sub
35
+ " ;
36
+ var results = GetInspectionResults ( code ) ;
37
+ Assert . AreEqual ( 0 , results . Count ( ) ) ;
38
+ }
52
39
53
- Sub DoSomething(ByVal foo As Variant)
40
+ [ Test ]
41
+ [ Category ( "Inspections" ) ]
42
+ public void IgnoresArrayReDim ( )
43
+ {
44
+ const string code = @"
45
+ Sub Foo()
46
+ Dim bar As Variant
47
+ ReDim bar(1 To 10)
54
48
End Sub
55
49
" ;
50
+ var results = GetInspectionResults ( code ) ;
51
+ Assert . AreEqual ( 0 , results . Count ( ) ) ;
52
+ }
56
53
57
- var vbe = MockVbeBuilder . BuildFromSingleModule ( inputCode , ComponentType . ClassModule , out _ ) ;
58
- using ( var state = MockParser . CreateAndParse ( vbe . Object ) )
59
- {
60
-
61
- var inspection = new UnassignedVariableUsageInspection ( state ) ;
62
- var inspectionResults = inspection . GetInspectionResults ( CancellationToken . None ) ;
54
+ [ Test ]
55
+ [ Category ( "Inspections" ) ]
56
+ public void IgnoresArraySubscripts ( )
57
+ {
58
+ const string code = @"
59
+ Sub Foo()
60
+ Dim bar As Variant
61
+ ReDim bar(1 To 10)
62
+ bar(1) = 42
63
+ End Sub
64
+ " ;
65
+ var results = GetInspectionResults ( code ) ;
66
+ Assert . AreEqual ( 0 , results . Count ( ) ) ;
67
+ }
63
68
64
- Assert . AreEqual ( 2 , inspectionResults . Count ( ) ) ;
65
- }
69
+ [ Test ]
70
+ [ Category ( "Inspections" ) ]
71
+ public void UnassignedVariableUsage_ReturnsResult ( )
72
+ {
73
+ const string code = @"
74
+ Sub Foo()
75
+ Dim b As Boolean
76
+ Dim bb As Boolean
77
+ bb = b
78
+ End Sub
79
+ " ;
80
+ var results = GetInspectionResults ( code ) ;
81
+ Assert . AreEqual ( 1 , results . Count ( ) ) ;
66
82
}
67
83
68
84
[ Test ]
69
85
[ Category ( "Inspections" ) ]
70
86
public void UnassignedVariableUsage_DoesNotReturnResult ( )
71
87
{
72
- const string inputCode =
73
- @" Sub Foo()
88
+ const string code = @"
89
+ Sub Foo()
74
90
Dim b As Boolean
75
91
Dim bb As Boolean
76
92
b = True
77
93
bb = b
78
- End Sub" ;
79
-
80
- var vbe = MockVbeBuilder . BuildFromSingleModule ( inputCode , ComponentType . ClassModule , out _ ) ;
81
- using ( var state = MockParser . CreateAndParse ( vbe . Object ) )
82
- {
83
-
84
- var inspection = new UnassignedVariableUsageInspection ( state ) ;
85
- var inspectionResults = inspection . GetInspectionResults ( CancellationToken . None ) ;
94
+ End Sub
95
+ " ;
86
96
87
- Assert . IsFalse ( inspectionResults . Any ( ) ) ;
88
- }
97
+ var results = GetInspectionResults ( code ) ;
98
+ Assert . AreEqual ( 0 , results . Count ( ) ) ;
89
99
}
90
100
91
101
[ Test ]
92
102
[ Category ( "Inspections" ) ]
93
103
public void UnassignedVariableUsage_Ignored_DoesNotReturnResult ( )
94
104
{
95
- const string inputCode =
96
- @" Sub Foo()
105
+ const string code = @"
106
+ Sub Foo()
97
107
Dim b As Boolean
98
108
Dim bb As Boolean
99
109
100
110
'@Ignore UnassignedVariableUsage
101
111
bb = b
102
- End Sub" ;
103
-
104
- var vbe = MockVbeBuilder . BuildFromSingleModule ( inputCode , ComponentType . ClassModule , out _ ) ;
105
- using ( var state = MockParser . CreateAndParse ( vbe . Object ) )
106
- {
107
-
108
- var inspection = new UnassignedVariableUsageInspection ( state ) ;
109
- var inspectionResults = inspection . GetInspectionResults ( CancellationToken . None ) ;
110
-
111
- Assert . IsFalse ( inspectionResults . Any ( ) ) ;
112
- }
112
+ End Sub
113
+ " ;
114
+ var results = GetInspectionResults ( code ) ;
115
+ Assert . AreEqual ( 0 , results . Count ( ) ) ;
113
116
}
114
117
115
118
[ Test ]
116
119
[ Category ( "Inspections" ) ]
117
120
public void UnassignedVariableUsage_Ignored_DoesNotReturnResultMultipleIgnores ( )
118
121
{
119
- const string inputCode =
120
- @" Sub Foo()
122
+ const string code = @"
123
+ Sub Foo()
121
124
Dim b As Boolean
122
125
Dim bb As Boolean
123
126
124
127
'@Ignore UnassignedVariableUsage, VariableNotAssigned
125
128
bb = b
126
- End Sub" ;
127
-
128
- var vbe = MockVbeBuilder . BuildFromSingleModule ( inputCode , ComponentType . ClassModule , out _ ) ;
129
- using ( var state = MockParser . CreateAndParse ( vbe . Object ) )
130
- {
131
-
132
- var inspection = new UnassignedVariableUsageInspection ( state ) ;
133
- var inspectionResults = inspection . GetInspectionResults ( CancellationToken . None ) ;
134
-
135
- Assert . IsFalse ( inspectionResults . Any ( ) ) ;
136
- }
129
+ End Sub
130
+ " ;
131
+ var results = GetInspectionResults ( code ) ;
132
+ Assert . AreEqual ( 0 , results . Count ( ) ) ;
137
133
}
138
134
139
135
[ Test ]
140
136
[ Category ( "Inspections" ) ]
141
137
public void UnassignedVariableUsage_NoResultIfNoReferences ( )
142
138
{
143
- const string inputCode =
144
- @" Sub DoSomething()
139
+ const string code = @"
140
+ Sub DoSomething()
145
141
Dim foo
146
- End Sub" ;
147
-
148
- var vbe = MockVbeBuilder . BuildFromSingleModule ( inputCode , ComponentType . ClassModule , out _ ) ;
149
- using ( var state = MockParser . CreateAndParse ( vbe . Object ) )
150
- {
151
-
152
- var inspection = new UnassignedVariableUsageInspection ( state ) ;
153
- var inspectionResults = inspection . GetInspectionResults ( CancellationToken . None ) ;
154
-
155
- Assert . IsFalse ( inspectionResults . Any ( ) ) ;
156
- }
142
+ End Sub
143
+ " ;
144
+ var results = GetInspectionResults ( code ) ;
145
+ Assert . AreEqual ( 0 , results . Count ( ) ) ;
157
146
}
158
147
159
148
[ Test ]
160
149
[ Ignore ( "Test concurrency issue. Only passes if run individually." ) ]
161
150
[ Category ( "Inspections" ) ]
162
151
public void UnassignedVariableUsage_NoResultForLenFunction ( )
163
152
{
164
- const string inputCode =
165
- @" Sub DoSomething()
153
+ const string code = @"
154
+ Sub DoSomething()
166
155
Dim foo As LongPtr
167
156
Debug.Print Len(foo)
168
- End Sub" ;
169
-
170
- var vbe = MockVbeBuilder . BuildFromSingleModule ( inputCode , ComponentType . ClassModule , out _ ) ;
171
- using ( var state = MockParser . CreateAndParse ( vbe . Object ) )
172
- {
173
-
174
- var inspection = new UnassignedVariableUsageInspection ( state ) ;
175
- var inspectionResults = inspection . GetInspectionResults ( CancellationToken . None ) ;
176
-
177
- Assert . IsFalse ( inspectionResults . Any ( ) ) ;
178
- }
157
+ End Sub
158
+ " ;
159
+ var results = GetInspectionResults ( code ) ;
160
+ Assert . AreEqual ( 0 , results . Count ( ) ) ;
179
161
}
180
162
181
163
[ Test ]
182
164
[ Ignore ( "Test concurrency issue. Only passes if run individually." ) ]
183
165
[ Category ( "Inspections" ) ]
184
166
public void UnassignedVariableUsage_NoResultForLenBFunction ( )
185
167
{
186
- const string inputCode =
187
- @" Sub DoSomething()
168
+ const string code = @"
169
+ Sub DoSomething()
188
170
Dim foo As LongPtr
189
171
Debug.Print LenB(foo)
190
- End Sub" ;
191
-
192
- var vbe = MockVbeBuilder . BuildFromSingleModule ( inputCode , ComponentType . ClassModule , out _ ) ;
193
- using ( var state = MockParser . CreateAndParse ( vbe . Object ) )
194
- {
195
-
196
- var inspection = new UnassignedVariableUsageInspection ( state ) ;
197
- var inspectionResults = inspection . GetInspectionResults ( CancellationToken . None ) ;
198
-
199
- Assert . IsFalse ( inspectionResults . Any ( ) ) ;
200
- }
172
+ End Sub
173
+ " ;
174
+ var results = GetInspectionResults ( code ) ;
175
+ Assert . AreEqual ( 0 , results . Count ( ) ) ;
201
176
}
202
177
203
178
[ Test ]
0 commit comments