Skip to content

Commit f02fc7c

Browse files
0xSwapFeeder0xmemorygrinder
authored andcommitted
wip(tests): added position to node tests and test utils
1 parent 71b2893 commit f02fc7c

File tree

2 files changed

+261
-1
lines changed

2 files changed

+261
-1
lines changed

libs/code-actions/src/references/position_node_visitor.rs

Lines changed: 184 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ mod test {
265265
line: 1,
266266
column: 1,
267267
};
268+
//eprintln!("{:?}", file.ast);
268269
let mut visitor = PositionNodeVisitor::new(position, &file.file.content);
269270
let node = visitor.find(&file.ast);
270271
assert!(node.is_some());
@@ -326,5 +327,187 @@ mod test {
326327
}
327328
}
328329

329-
330+
#[test]
331+
fn test_find_struct_definition() {
332+
let file = create_test_ast_file();
333+
let position = Position {
334+
line: 1,
335+
column: 1,
336+
};
337+
let mut visitor = PositionNodeVisitor::new(position, &file.file.content);
338+
let node = visitor.find(&file.ast);
339+
assert!(node.is_some());
340+
if let Some(InteractableNode::StructDefinition(struct_def)) = node {
341+
assert_eq!(struct_def.name, "TestStruct");
342+
} else {
343+
panic!("Expected StructDefinition, got {:?}", node);
344+
}
345+
}
346+
347+
#[test]
348+
fn test_find_user_defined_type_name() {
349+
let file = create_test_ast_file();
350+
let position = Position {
351+
line: 1,
352+
column: 1,
353+
};
354+
let mut visitor = PositionNodeVisitor::new(position, &file.file.content);
355+
let node = visitor.find(&file.ast);
356+
assert!(node.is_some());
357+
if let Some(InteractableNode::UserDefinedTypeName(udt)) = node {
358+
assert_eq!(udt.name, Some("TestStruct".to_string()));
359+
} else {
360+
panic!("Expected UserDefinedTypeName, got {:?}", node);
361+
}
362+
}
363+
364+
#[test]
365+
fn test_find_using_for_directive() {
366+
let file = create_test_ast_file();
367+
let position = Position {
368+
line: 1,
369+
column: 1,
370+
};
371+
let mut visitor = PositionNodeVisitor::new(position, &file.file.content);
372+
let node = visitor.find(&file.ast);
373+
assert!(node.is_some());
374+
if let Some(InteractableNode::UsingForDirective(_)) = node {
375+
assert_eq!(true, true);
376+
} else {
377+
panic!("Expected UsingForDirective, got {:?}", node);
378+
}
379+
}
380+
381+
#[test]
382+
fn test_find_import_directive() {
383+
let file = create_test_ast_file();
384+
let position = Position {
385+
line: 1,
386+
column: 1,
387+
};
388+
let mut visitor = PositionNodeVisitor::new(position, &file.file.content);
389+
let node = visitor.find(&file.ast);
390+
assert!(node.is_some());
391+
if let Some(InteractableNode::ImportDirective(id)) = node {
392+
assert_eq!(true, true);
393+
} else {
394+
panic!("Expected ImportDirective, got {:?}", node);
395+
}
396+
}
397+
398+
#[test]
399+
fn test_find_function_call() {
400+
let file = create_test_ast_file();
401+
let position = Position {
402+
line: 8,
403+
column: 22,
404+
};
405+
let mut visitor = PositionNodeVisitor::new(position, &file.file.content);
406+
let node = visitor.find(&file.ast);
407+
assert!(node.is_some());
408+
if let Some(InteractableNode::FunctionCall(_)) = node {
409+
assert_eq!(true, true);
410+
} else {
411+
panic!("Expected FunctionCall, got {:?}", node);
412+
}
413+
}
414+
415+
#[test]
416+
fn test_find_modifier_invocation() {
417+
let file = create_test_ast_file();
418+
let position = Position {
419+
line: 8,
420+
column: 22,
421+
};
422+
let mut visitor = PositionNodeVisitor::new(position, &file.file.content);
423+
let node = visitor.find(&file.ast);
424+
assert!(node.is_some());
425+
if let Some(InteractableNode::ModifierInvocation(_)) = node {
426+
assert_eq!(true, true);
427+
} else {
428+
panic!("Expected ModifierInvocation, got {:?}", node);
429+
}
430+
}
431+
432+
#[test]
433+
fn test_find_inheritance_specifier() {
434+
let file = create_test_ast_file();
435+
let position = Position {
436+
line: 8,
437+
column: 22,
438+
};
439+
let mut visitor = PositionNodeVisitor::new(position, &file.file.content);
440+
let node = visitor.find(&file.ast);
441+
assert!(node.is_some());
442+
if let Some(InteractableNode::InheritanceSpecifier(_)) = node {
443+
assert_eq!(true, true);
444+
} else {
445+
panic!("Expected InheritanceSpecifier, got {:?}", node);
446+
}
447+
}
448+
449+
#[test]
450+
fn test_find_identifier() {
451+
let file = create_test_ast_file();
452+
let position = Position {
453+
line: 8,
454+
column: 22,
455+
};
456+
let mut visitor = PositionNodeVisitor::new(position, &file.file.content);
457+
let node = visitor.find(&file.ast);
458+
assert!(node.is_some());
459+
if let Some(InteractableNode::Identifier(_)) = node {
460+
assert_eq!(true, true);
461+
} else {
462+
panic!("Expected Identifier, got {:?}", node);
463+
}
464+
}
465+
466+
#[test]
467+
fn test_find_member_access() {
468+
let file = create_test_ast_file();
469+
let position = Position {
470+
line: 8,
471+
column: 22,
472+
};
473+
let mut visitor = PositionNodeVisitor::new(position, &file.file.content);
474+
let node = visitor.find(&file.ast);
475+
assert!(node.is_some());
476+
if let Some(InteractableNode::MemberAccess(_)) = node {
477+
assert_eq!(true, true);
478+
} else {
479+
panic!("Expected MemberAccess, got {:?}", node);
480+
}
481+
}
482+
483+
#[test]
484+
fn test_find_new_expression() {
485+
let file = create_test_ast_file();
486+
let position = Position {
487+
line: 8,
488+
column: 22,
489+
};
490+
let mut visitor = PositionNodeVisitor::new(position, &file.file.content);
491+
let node = visitor.find(&file.ast);
492+
assert!(node.is_some());
493+
if let Some(InteractableNode::NewExpression(_, _)) = node {
494+
assert_eq!(true, true);
495+
} else {
496+
panic!("Expected NewExpression, got {:?}", node);
497+
}
498+
}
499+
500+
501+
#[test]
502+
fn test_find_nothing() {
503+
let file = create_test_ast_file();
504+
let position = Position {
505+
line: 100,
506+
column: 100,
507+
};
508+
let mut visitor = PositionNodeVisitor::new(position, &file.file.content);
509+
let node = visitor.find(&file.ast);
510+
assert!(node.is_none());
511+
}
512+
330513
}

libs/code-actions/src/test_utils.rs

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,11 +468,87 @@ pub fn create_test_ast_file() -> SolidityAstFile {
468468
uint256 x = 1;
469469
number;
470470
}
471+
472+
473+
474+
475+
476+
477+
478+
479+
480+
481+
482+
483+
484+
485+
486+
487+
488+
489+
490+
491+
492+
493+
494+
495+
496+
497+
498+
499+
500+
501+
502+
503+
504+
505+
506+
507+
508+
509+
510+
511+
512+
513+
514+
515+
516+
517+
471518
}";
472519
let path = "test.sol";
473520

474521
let mut function = create_test_function_definition();
475522
function.modifiers.push(create_test_modifier_invocation().into());
523+
function.body = Some(Block {
524+
documentation: None,
525+
id: 30,
526+
node_type: BlockNodeType::Block,
527+
src: SourceLocation::from_str("1:1:1").unwrap(),
528+
statements: Some([
529+
Statement::ExpressionStatement(ExpressionStatement {
530+
expression: create_test_function_call().into(),
531+
id: 100,
532+
node_type: ExpressionStatementNodeType::ExpressionStatement,
533+
src: SourceLocation::from_str("1:1:1").unwrap(),
534+
documentation: None,
535+
}),
536+
Statement::ExpressionStatement(ExpressionStatement {
537+
expression: create_test_member_access().into(),
538+
id: 102,
539+
node_type: ExpressionStatementNodeType::ExpressionStatement,
540+
src: SourceLocation::from_str("1:1:1").unwrap(),
541+
documentation: None,
542+
}),
543+
Statement::ExpressionStatement(ExpressionStatement {
544+
expression: create_test_new_expression().into(),
545+
id: 103,
546+
node_type: ExpressionStatementNodeType::ExpressionStatement,
547+
src: SourceLocation::from_str("1:1:1").unwrap(),
548+
documentation: None,
549+
}),
550+
].iter().cloned().collect()),
551+
});
476552
let mut contract = create_test_contract_definition();
477553
contract.nodes.push(function.into());
478554
contract.nodes.push(create_test_variable_declaration().into());
@@ -481,6 +557,7 @@ pub fn create_test_ast_file() -> SolidityAstFile {
481557
contract.nodes.push(create_test_event_definition().into());
482558
contract.nodes.push(create_test_using_for_directive().into());
483559
contract.nodes.push(create_test_error_definition().into());
560+
484561
contract.base_contracts.push(create_test_inheritance_specifier().into());
485562
SolidityAstFile {
486563
file: osmium_libs_solidity_ast_extractor::types::SolidityFile {

0 commit comments

Comments
 (0)