Skip to content

Commit c050de4

Browse files
authored
merge: PR #39 from chore/18-unit-testing/21-test-lib-code-actions-staging
21 - Test lib code-actions
2 parents aab4ca3 + 35e6207 commit c050de4

22 files changed

+5714
-3354
lines changed

libs/code-actions/src/code_actions_provider.rs

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

libs/code-actions/src/completions/auto_complete_provider.rs

+23
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,26 @@ impl AutoCompleteProvider {
104104
vec![]
105105
}
106106
}
107+
108+
#[cfg(test)]
109+
mod test {
110+
use crate::test_utils::{create_test_ast_file, create_test_ast_file_struct_definition};
111+
112+
use super::*;
113+
114+
#[test]
115+
fn test_get_suggestions() {
116+
let provider = AutoCompleteProvider::new();
117+
let uri = "test.sol";
118+
let position = Position {
119+
line: 10,
120+
column: 15,
121+
};
122+
let files = vec![
123+
create_test_ast_file(),
124+
create_test_ast_file_struct_definition(),
125+
];
126+
let completes = provider.get_suggestions(uri, position, &files);
127+
assert_eq!(completes.len(), 4);
128+
}
129+
}

libs/code-actions/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ mod code_actions_provider;
22
mod completions;
33
mod error;
44
mod references;
5+
mod test_utils;
56
mod types;
67
mod utils;
78

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

+196
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,199 @@ impl DefinitionVisitor {
7777
self.node.clone()
7878
}
7979
}
80+
81+
#[cfg(test)]
82+
mod test {
83+
use crate::test_utils::{
84+
create_test_ast_file_contract_definition, create_test_ast_file_enum_definition,
85+
create_test_ast_file_enum_value, create_test_ast_file_event_definition,
86+
create_test_ast_file_function_definition, create_test_ast_file_modifier_definition,
87+
create_test_ast_file_struct_definition, create_test_ast_file_variable_declaration,
88+
};
89+
90+
use super::*;
91+
92+
#[test]
93+
fn test_find_contract_definition() {
94+
let id = 1;
95+
let file = create_test_ast_file_contract_definition();
96+
let mut visitor = DefinitionVisitor::new(id);
97+
let node = visitor.find(&file.ast);
98+
assert!(node.is_some());
99+
if let Some(InteractableNode::ContractDefinition(contract)) = node {
100+
assert_eq!(contract.id, id);
101+
} else {
102+
panic!("Expected ContractDefinition node");
103+
}
104+
}
105+
106+
#[test]
107+
fn test_find_contract_definition_not_found() {
108+
let id = 0;
109+
let file = create_test_ast_file_contract_definition();
110+
let mut visitor = DefinitionVisitor::new(id);
111+
let node = visitor.find(&file.ast);
112+
assert!(node.is_none());
113+
}
114+
115+
#[test]
116+
fn test_find_function_definition() {
117+
let id = 2;
118+
let file = create_test_ast_file_function_definition();
119+
let mut visitor = DefinitionVisitor::new(id);
120+
let node = visitor.find(&file.ast);
121+
assert!(node.is_some());
122+
if let Some(InteractableNode::FunctionDefinition(function)) = node {
123+
assert_eq!(function.id, id);
124+
} else {
125+
panic!("Expected FunctionDefinition node");
126+
}
127+
}
128+
129+
#[test]
130+
fn test_find_function_definition_not_found() {
131+
let id = 0;
132+
let file = create_test_ast_file_function_definition();
133+
let mut visitor = DefinitionVisitor::new(id);
134+
let node = visitor.find(&file.ast);
135+
assert!(node.is_none());
136+
}
137+
138+
#[test]
139+
fn test_find_modifier_definition() {
140+
let id = 4;
141+
let file = create_test_ast_file_modifier_definition();
142+
let mut visitor = DefinitionVisitor::new(id);
143+
let node = visitor.find(&file.ast);
144+
assert!(node.is_some());
145+
if let Some(InteractableNode::ModifierDefinition(modifier)) = node {
146+
assert_eq!(modifier.id, id);
147+
} else {
148+
panic!("Expected ModifierDefinition node");
149+
}
150+
}
151+
152+
#[test]
153+
fn test_find_modifier_definition_not_found() {
154+
let id = 0;
155+
let file = create_test_ast_file_modifier_definition();
156+
let mut visitor = DefinitionVisitor::new(id);
157+
let node = visitor.find(&file.ast);
158+
assert!(node.is_none());
159+
}
160+
161+
#[test]
162+
fn test_find_struct_definition() {
163+
let id = 5;
164+
let file = create_test_ast_file_struct_definition();
165+
let mut visitor = DefinitionVisitor::new(id);
166+
let node = visitor.find(&file.ast);
167+
assert!(node.is_some());
168+
if let Some(InteractableNode::StructDefinition(struct_def)) = node {
169+
assert_eq!(struct_def.id, id);
170+
} else {
171+
panic!("Expected StructDefinition node");
172+
}
173+
}
174+
175+
#[test]
176+
fn test_find_struct_definition_not_found() {
177+
let id = 0;
178+
let file = create_test_ast_file_struct_definition();
179+
let mut visitor = DefinitionVisitor::new(id);
180+
let node = visitor.find(&file.ast);
181+
assert!(node.is_none());
182+
}
183+
184+
#[test]
185+
fn test_find_enum_definition() {
186+
let id = 6;
187+
let file = create_test_ast_file_enum_definition();
188+
let mut visitor = DefinitionVisitor::new(id);
189+
let node = visitor.find(&file.ast);
190+
assert!(node.is_some());
191+
if let Some(InteractableNode::EnumDefinition(enum_def)) = node {
192+
assert_eq!(enum_def.id, id);
193+
} else {
194+
panic!("Expected EnumDefinition node");
195+
}
196+
}
197+
198+
#[test]
199+
fn test_find_enum_definition_not_found() {
200+
let id = 0;
201+
let file = create_test_ast_file_enum_definition();
202+
let mut visitor = DefinitionVisitor::new(id);
203+
let node = visitor.find(&file.ast);
204+
assert!(node.is_none());
205+
}
206+
207+
#[test]
208+
fn test_find_variable_declaration() {
209+
let id = 3;
210+
let file = create_test_ast_file_variable_declaration();
211+
let mut visitor = DefinitionVisitor::new(id);
212+
let node = visitor.find(&file.ast);
213+
assert!(node.is_some());
214+
if let Some(InteractableNode::VariableDeclaration(variable)) = node {
215+
assert_eq!(variable.id, id);
216+
} else {
217+
panic!("Expected VariableDeclaration node");
218+
}
219+
}
220+
221+
#[test]
222+
fn test_find_variable_declaration_not_found() {
223+
let id = 0;
224+
let file = create_test_ast_file_variable_declaration();
225+
let mut visitor = DefinitionVisitor::new(id);
226+
let node = visitor.find(&file.ast);
227+
assert!(node.is_none());
228+
}
229+
230+
#[test]
231+
fn test_find_enum_value() {
232+
let id = 8;
233+
let file = create_test_ast_file_enum_value();
234+
let mut visitor = DefinitionVisitor::new(id);
235+
let node = visitor.find(&file.ast);
236+
assert!(node.is_some());
237+
if let Some(InteractableNode::EnumValue(enum_def)) = node {
238+
assert_eq!(enum_def.id, id);
239+
} else {
240+
panic!("Expected EnumDefinition node");
241+
}
242+
}
243+
244+
#[test]
245+
fn test_find_enum_value_not_found() {
246+
let id = 0;
247+
let file = create_test_ast_file_enum_value();
248+
let mut visitor = DefinitionVisitor::new(id);
249+
let node = visitor.find(&file.ast);
250+
assert!(node.is_none());
251+
}
252+
253+
#[test]
254+
fn test_find_event_definition() {
255+
let id = 7;
256+
let file = create_test_ast_file_event_definition();
257+
let mut visitor = DefinitionVisitor::new(id);
258+
let node = visitor.find(&file.ast);
259+
assert!(node.is_some());
260+
if let Some(InteractableNode::EventDefinition(event)) = node {
261+
assert_eq!(event.id, id);
262+
} else {
263+
panic!("Expected EventDefinition node");
264+
}
265+
}
266+
267+
#[test]
268+
fn test_find_event_definition_not_found() {
269+
let id = 0;
270+
let file = create_test_ast_file_event_definition();
271+
let mut visitor = DefinitionVisitor::new(id);
272+
let node = visitor.find(&file.ast);
273+
assert!(node.is_none());
274+
}
275+
}

0 commit comments

Comments
 (0)