Skip to content

Commit 71b2893

Browse files
0xSwapFeeder0xmemorygrinder
authored andcommitted
tests(libs/code-actions): added some tests for utils, types and references
1 parent b07dd53 commit 71b2893

File tree

7 files changed

+1335
-7
lines changed

7 files changed

+1335
-7
lines changed

libs/code-actions/src/code_actions_provider.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,24 @@ impl CodeActionsProvider {
6262
provider.get_suggestions(uri, position, &files)
6363
}
6464
}
65+
66+
67+
#[cfg(test)]
68+
mod test {
69+
use super::*;
70+
71+
#[test]
72+
fn test_set_base_path() {
73+
let provider = CodeActionsProvider::new();
74+
provider.set_base_path("test".to_string());
75+
assert_eq!(*provider.base_path.read().unwrap(), "test");
76+
}
77+
78+
#[test]
79+
fn test_update_file_content() {
80+
let provider = CodeActionsProvider::new();
81+
provider.set_base_path("tests".to_string());
82+
let result = provider.update_file_content();
83+
assert!(!result.is_ok());
84+
}
85+
}

libs/code-actions/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ mod error;
44
mod references;
55
mod types;
66
mod utils;
7+
mod test_utils;
78

89
pub use code_actions_provider::CodeActionsProvider;
910
pub use types::{Location, Position};

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

Lines changed: 145 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ impl<'ast> Visit<'ast> for PositionNodeVisitor {
5858
}
5959

6060
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) {
6262
self.above_node = self.node.clone();
6363
self.node = Some(InteractableNode::EnumDefinition(enum_def.clone()));
6464
}
@@ -184,3 +184,147 @@ impl PositionNodeVisitor {
184184
self.node.clone()
185185
}
186186
}
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+
}

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,25 @@ impl UsageVisitor {
103103
self.to_find.clone()
104104
}
105105
}
106+
107+
#[cfg(test)]
108+
mod test {
109+
use super::*;
110+
use crate::types::InteractableNode;
111+
use crate::test_utils::create_test_ast_file;
112+
113+
#[test]
114+
fn test_find_usages() {
115+
let file = create_test_ast_file();
116+
let id = 3;
117+
let mut visitor = UsageVisitor::new(id);
118+
let usages = visitor.find(&file.ast);
119+
assert_eq!(usages.len(), 1);
120+
if let InteractableNode::Identifier(identifier) = &usages[0] {
121+
assert_eq!(identifier.referenced_declaration, Some(id));
122+
assert_eq!(identifier.name, "number");
123+
} else {
124+
panic!("Expected IdentifierPath, got: {:?}", usages[0]);
125+
}
126+
}
127+
}

0 commit comments

Comments
 (0)