@@ -18,17 +18,18 @@ public class TodoExplorerTests
18
18
[ TestCategory ( "Annotations" ) ]
19
19
public void PicksUpComments ( )
20
20
{
21
- var content =
21
+ const string inputCode =
22
22
@"' Todo this is a todo comment
23
23
' Note this is a note comment
24
24
' Bug this is a bug comment
25
25
" ;
26
26
27
27
var builder = new MockVbeBuilder ( ) ;
28
28
var project = builder . ProjectBuilder ( "TestProject1" , ProjectProtection . Unprotected )
29
- . AddComponent ( "Module1" , ComponentType . StandardModule , content ) ;
29
+ . AddComponent ( "Module1" , ComponentType . StandardModule , inputCode )
30
+ . Build ( ) ;
30
31
31
- var vbe = builder . AddProject ( project . Build ( ) ) . Build ( ) ;
32
+ var vbe = builder . AddProject ( project ) . Build ( ) ;
32
33
var parser = MockParser . Create ( vbe . Object ) ;
33
34
using ( var state = parser . State )
34
35
{
@@ -51,7 +52,7 @@ public void PicksUpComments()
51
52
[ TestCategory ( "Annotations" ) ]
52
53
public void PicksUpComments_StrangeCasing ( )
53
54
{
54
- var content =
55
+ const string inputCode =
55
56
@"' tODO this is a todo comment
56
57
' NOTE this is a note comment
57
58
' bug this is a bug comment
@@ -60,9 +61,10 @@ public void PicksUpComments_StrangeCasing()
60
61
61
62
var builder = new MockVbeBuilder ( ) ;
62
63
var project = builder . ProjectBuilder ( "TestProject1" , ProjectProtection . Unprotected )
63
- . AddComponent ( "Module1" , ComponentType . StandardModule , content ) ;
64
+ . AddComponent ( "Module1" , ComponentType . StandardModule , inputCode )
65
+ . Build ( ) ;
64
66
65
- var vbe = builder . AddProject ( project . Build ( ) ) . Build ( ) ;
67
+ var vbe = builder . AddProject ( project ) . Build ( ) ;
66
68
var parser = MockParser . Create ( vbe . Object ) ;
67
69
using ( var state = parser . State )
68
70
{
@@ -81,19 +83,87 @@ public void PicksUpComments_StrangeCasing()
81
83
}
82
84
}
83
85
86
+ [ TestMethod ]
87
+ [ TestCategory ( "Annotations" ) ]
88
+ public void PicksUpComments_SpecialCharacters ( )
89
+ {
90
+ const string inputCode =
91
+ @"' To-do - this is a todo comment
92
+ ' N@TE this is a note comment
93
+ ' bug: this should work with a colon separator
94
+ " ;
95
+
96
+ var builder = new MockVbeBuilder ( ) ;
97
+ var project = builder . ProjectBuilder ( "TestProject1" , ProjectProtection . Unprotected )
98
+ . AddComponent ( "Module1" , ComponentType . StandardModule , inputCode )
99
+ . Build ( ) ;
100
+
101
+ var vbe = builder . AddProject ( project ) . Build ( ) ;
102
+ var parser = MockParser . Create ( vbe . Object ) ;
103
+ using ( var state = parser . State )
104
+ {
105
+ var cs = GetConfigService ( new [ ] { "TO-DO" , "N@TE" , "BUG" } ) ;
106
+ var vm = new ToDoExplorerViewModel ( state , cs , GetOperatingSystemMock ( ) . Object ) ;
107
+
108
+ parser . Parse ( new CancellationTokenSource ( ) ) ;
109
+ if ( state . Status >= ParserState . Error )
110
+ {
111
+ Assert . Inconclusive ( "Parser Error" ) ;
112
+ }
113
+
114
+ var comments = vm . Items . Select ( s => s . Type ) ;
115
+
116
+ Assert . IsTrue ( comments . SequenceEqual ( new [ ] { "TO-DO" , "N@TE" , "BUG" } ) ) ;
117
+ }
118
+ }
119
+
120
+ [ TestMethod ]
121
+ [ TestCategory ( "Annotations" ) ]
122
+ public void AvoidsFalsePositiveComments ( )
123
+ {
124
+ const string inputCode =
125
+ @"' Todon't should not get picked up
126
+ ' Debug.print() would trigger false positive if word boundaries not used
127
+ ' Denoted
128
+ " ;
129
+
130
+ var builder = new MockVbeBuilder ( ) ;
131
+ var project = builder . ProjectBuilder ( "TestProject1" , ProjectProtection . Unprotected )
132
+ . AddComponent ( "Module1" , ComponentType . StandardModule , inputCode )
133
+ . Build ( ) ;
134
+
135
+ var vbe = builder . AddProject ( project ) . Build ( ) ;
136
+ var parser = MockParser . Create ( vbe . Object ) ;
137
+ using ( var state = parser . State )
138
+ {
139
+ var cs = GetConfigService ( new [ ] { "TODO" , "NOTE" , "BUG" } ) ;
140
+ var vm = new ToDoExplorerViewModel ( state , cs , GetOperatingSystemMock ( ) . Object ) ;
141
+
142
+ parser . Parse ( new CancellationTokenSource ( ) ) ;
143
+ if ( state . Status >= ParserState . Error )
144
+ {
145
+ Assert . Inconclusive ( "Parser Error" ) ;
146
+ }
147
+
148
+ var comments = vm . Items . Select ( s => s . Type ) ;
149
+
150
+ Assert . IsTrue ( comments . Count ( ) == 0 ) ;
151
+ }
152
+ }
153
+
84
154
[ TestMethod ]
85
155
[ TestCategory ( "Annotations" ) ]
86
156
public void RemoveRemovesComment ( )
87
157
{
88
- var input =
158
+ const string inputCode =
89
159
@"Dim d As Variant ' bug should be Integer" ;
90
160
91
- var expected =
161
+ const string expected =
92
162
@"Dim d As Variant " ;
93
163
94
164
var builder = new MockVbeBuilder ( ) ;
95
165
var project = builder . ProjectBuilder ( "TestProject1" , ProjectProtection . Unprotected )
96
- . AddComponent ( "Module1" , ComponentType . StandardModule , input )
166
+ . AddComponent ( "Module1" , ComponentType . StandardModule , inputCode )
97
167
. Build ( ) ;
98
168
99
169
var vbe = builder . AddProject ( project ) . Build ( ) ;
0 commit comments