@@ -58,7 +58,7 @@ impl<'ast> Visit<'ast> for PositionNodeVisitor {
58
58
}
59
59
60
60
fn visit_enum_definition ( & mut self , enum_def : & ' ast EnumDefinition ) {
61
- if is_node_in_range ( & enum_def. src , & self . position , & self . source ) {
61
+ if log_is_node_in_range ( & enum_def. src , & self . position , & self . source ) {
62
62
self . above_node = self . node . clone ( ) ;
63
63
self . node = Some ( InteractableNode :: EnumDefinition ( enum_def. clone ( ) ) ) ;
64
64
}
@@ -184,3 +184,147 @@ impl PositionNodeVisitor {
184
184
self . node . clone ( )
185
185
}
186
186
}
187
+
188
+ #[ cfg( test) ]
189
+ mod test {
190
+ use super :: * ;
191
+ use crate :: test_utils:: create_test_ast_file;
192
+
193
+ #[ test]
194
+ fn test_find_function_declaration ( ) {
195
+ let file = create_test_ast_file ( ) ;
196
+ let position = Position {
197
+ line : 8 ,
198
+ column : 22 ,
199
+ } ;
200
+ let mut visitor = PositionNodeVisitor :: new ( position, & file. file . content ) ;
201
+ let node = visitor. find ( & file. ast ) ;
202
+ assert ! ( node. is_some( ) ) ;
203
+ if let Some ( InteractableNode :: FunctionDefinition ( function) ) = node {
204
+ assert_eq ! ( function. name, "notUsed" ) ;
205
+ } else {
206
+ panic ! ( "Expected FunctionDefinition, got {:?}" , node) ;
207
+ }
208
+ }
209
+
210
+ #[ test]
211
+ fn test_find_contract_definition ( ) {
212
+ let file = create_test_ast_file ( ) ;
213
+ let position = Position {
214
+ line : 3 ,
215
+ column : 14 ,
216
+ } ;
217
+ let mut visitor = PositionNodeVisitor :: new ( position, & file. file . content ) ;
218
+ let node = visitor. find ( & file. ast ) ;
219
+ assert ! ( node. is_some( ) ) ;
220
+ if let Some ( InteractableNode :: ContractDefinition ( contract) ) = node {
221
+ assert_eq ! ( contract. name, "Test" ) ;
222
+ } else {
223
+ panic ! ( "Expected ContractDefinition, got {:?}" , node) ;
224
+ }
225
+ }
226
+
227
+ #[ test]
228
+ fn test_find_variable_declaration ( ) {
229
+ let file = create_test_ast_file ( ) ;
230
+ let position = Position {
231
+ line : 4 ,
232
+ column : 22 ,
233
+ } ;
234
+ let mut visitor = PositionNodeVisitor :: new ( position, & file. file . content ) ;
235
+ let node = visitor. find ( & file. ast ) ;
236
+ assert ! ( node. is_some( ) ) ;
237
+ if let Some ( InteractableNode :: VariableDeclaration ( variable) ) = node {
238
+ assert_eq ! ( variable. name, "number" ) ;
239
+ } else {
240
+ panic ! ( "Expected VariableDeclaration, got {:?}" , node) ;
241
+ }
242
+ }
243
+
244
+ #[ test]
245
+ fn test_find_modifier_definition ( ) {
246
+ let file = create_test_ast_file ( ) ;
247
+ let position = Position {
248
+ line : 1 ,
249
+ column : 1 ,
250
+ } ;
251
+ let mut visitor = PositionNodeVisitor :: new ( position, & file. file . content ) ;
252
+ let node = visitor. find ( & file. ast ) ;
253
+ assert ! ( node. is_some( ) ) ;
254
+ if let Some ( InteractableNode :: ModifierDefinition ( modifier) ) = node {
255
+ assert_eq ! ( modifier. name, "modifier" ) ;
256
+ } else {
257
+ panic ! ( "Expected ModifierDefinition, got {:?}" , node) ;
258
+ }
259
+ }
260
+
261
+ #[ test]
262
+ fn test_find_enum_definition ( ) {
263
+ let file = create_test_ast_file ( ) ;
264
+ let position = Position {
265
+ line : 1 ,
266
+ column : 1 ,
267
+ } ;
268
+ let mut visitor = PositionNodeVisitor :: new ( position, & file. file . content ) ;
269
+ let node = visitor. find ( & file. ast ) ;
270
+ assert ! ( node. is_some( ) ) ;
271
+ if let Some ( InteractableNode :: EnumDefinition ( enum_def) ) = node {
272
+ assert_eq ! ( enum_def. name, "TestEnum" ) ;
273
+ } else {
274
+ panic ! ( "Expected EnumDefinition, got {:?}" , node) ;
275
+ }
276
+ }
277
+
278
+ #[ test]
279
+ fn test_find_enum_value ( ) {
280
+ let file = create_test_ast_file ( ) ;
281
+ let position = Position {
282
+ line : 1 ,
283
+ column : 1 ,
284
+ } ;
285
+ let mut visitor = PositionNodeVisitor :: new ( position, & file. file . content ) ;
286
+ let node = visitor. find ( & file. ast ) ;
287
+ assert ! ( node. is_some( ) ) ;
288
+ if let Some ( InteractableNode :: EnumValue ( enum_value) ) = node {
289
+ assert_eq ! ( enum_value. name, "TestEnumValue" ) ;
290
+ } else {
291
+ panic ! ( "Expected EnumValue, got {:?}" , node) ;
292
+ }
293
+ }
294
+
295
+ #[ test]
296
+ fn test_find_event_definition ( ) {
297
+ let file = create_test_ast_file ( ) ;
298
+ let position = Position {
299
+ line : 1 ,
300
+ column : 1 ,
301
+ } ;
302
+ let mut visitor = PositionNodeVisitor :: new ( position, & file. file . content ) ;
303
+ let node = visitor. find ( & file. ast ) ;
304
+ assert ! ( node. is_some( ) ) ;
305
+ if let Some ( InteractableNode :: EventDefinition ( event) ) = node {
306
+ assert_eq ! ( event. name, "TestEvent" ) ;
307
+ } else {
308
+ panic ! ( "Expected EventDefinition, got {:?}" , node) ;
309
+ }
310
+ }
311
+
312
+ #[ test]
313
+ fn test_find_error_definition ( ) {
314
+ let file = create_test_ast_file ( ) ;
315
+ let position = Position {
316
+ line : 1 ,
317
+ column : 1 ,
318
+ } ;
319
+ let mut visitor = PositionNodeVisitor :: new ( position, & file. file . content ) ;
320
+ let node = visitor. find ( & file. ast ) ;
321
+ assert ! ( node. is_some( ) ) ;
322
+ if let Some ( InteractableNode :: ErrorDefinition ( error) ) = node {
323
+ assert_eq ! ( error. name, "TestError" ) ;
324
+ } else {
325
+ panic ! ( "Expected ErrorDefinition, got {:?}" , node) ;
326
+ }
327
+ }
328
+
329
+
330
+ }
0 commit comments