Skip to content

Commit 961502d

Browse files
committed
优化 handlers 测试
1 parent 492c78f commit 961502d

File tree

8 files changed

+238
-329
lines changed

8 files changed

+238
-329
lines changed

crates/emmylua_ls/src/handlers/completion/test/completion_resolve_test.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
#[cfg(test)]
22
mod tests {
33

4-
use crate::handlers::completion::test::{
5-
CompletionVirtualWorkspace, VirtualCompletionResolveItem,
6-
};
4+
use crate::handlers::test_lib::{ProviderVirtualWorkspace, VirtualCompletionResolveItem};
75

86
#[test]
97
fn test_1() {
10-
let mut ws = CompletionVirtualWorkspace::new();
8+
let mut ws = ProviderVirtualWorkspace::new();
119

1210
assert!(ws.check_completion_resolve(
1311
r#"
@@ -32,7 +30,7 @@ mod tests {
3230
}
3331
#[test]
3432
fn test_2() {
35-
let mut ws = CompletionVirtualWorkspace::new();
33+
let mut ws = ProviderVirtualWorkspace::new();
3634

3735
assert!(ws.check_completion_resolve(
3836
r#"

crates/emmylua_ls/src/handlers/completion/test/completion_test.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ mod tests {
33

44
use lsp_types::{CompletionItemKind, CompletionTriggerKind};
55

6-
use crate::handlers::completion::test::{CompletionVirtualWorkspace, VirtualCompletionItem};
6+
use crate::handlers::test_lib::{ProviderVirtualWorkspace, VirtualCompletionItem};
77

88
#[test]
99
fn test_1() {
10-
let mut ws = CompletionVirtualWorkspace::new();
10+
let mut ws = ProviderVirtualWorkspace::new();
1111

1212
assert!(ws.check_completion(
1313
r#"
@@ -23,7 +23,7 @@ mod tests {
2323

2424
#[test]
2525
fn test_2() {
26-
let mut ws = CompletionVirtualWorkspace::new();
26+
let mut ws = ProviderVirtualWorkspace::new();
2727
assert!(ws.check_completion(
2828
r#"
2929
---@overload fun(event: "AAA", callback: fun(trg: string, data: number)): number
@@ -101,7 +101,7 @@ mod tests {
101101

102102
#[test]
103103
fn test_3() {
104-
let mut ws = CompletionVirtualWorkspace::new();
104+
let mut ws = ProviderVirtualWorkspace::new();
105105
// 被动触发补全
106106
assert!(ws.check_completion_with_kind(
107107
r#"
@@ -166,7 +166,7 @@ mod tests {
166166

167167
#[test]
168168
fn test_4() {
169-
let mut ws = CompletionVirtualWorkspace::new_with_init_std_lib();
169+
let mut ws = ProviderVirtualWorkspace::new_with_init_std_lib();
170170
assert!(ws.check_completion(
171171
r#"
172172
local isIn = setmetatable({}, {
@@ -180,7 +180,7 @@ mod tests {
180180

181181
#[test]
182182
fn test_5() {
183-
let mut ws = CompletionVirtualWorkspace::new_with_init_std_lib();
183+
let mut ws = ProviderVirtualWorkspace::new_with_init_std_lib();
184184
assert!(ws.check_completion(
185185
r#"
186186
---@class Test
@@ -224,7 +224,7 @@ mod tests {
224224

225225
#[test]
226226
fn test_enum() {
227-
let mut ws = CompletionVirtualWorkspace::new_with_init_std_lib();
227+
let mut ws = ProviderVirtualWorkspace::new_with_init_std_lib();
228228

229229
assert!(ws.check_completion(
230230
r#"
@@ -256,7 +256,7 @@ mod tests {
256256

257257
#[test]
258258
fn test_enum_string() {
259-
let mut ws = CompletionVirtualWorkspace::new_with_init_std_lib();
259+
let mut ws = ProviderVirtualWorkspace::new_with_init_std_lib();
260260

261261
assert!(ws.check_completion(
262262
r#"
@@ -288,7 +288,7 @@ mod tests {
288288

289289
#[test]
290290
fn test_type_comparison() {
291-
let mut ws = CompletionVirtualWorkspace::new();
291+
let mut ws = ProviderVirtualWorkspace::new();
292292
ws.def(
293293
r#"
294294
---@alias std.type
@@ -377,7 +377,7 @@ mod tests {
377377

378378
#[test]
379379
fn test_issue_272() {
380-
let mut ws = CompletionVirtualWorkspace::new();
380+
let mut ws = ProviderVirtualWorkspace::new();
381381
assert!(ws.check_completion_with_kind(
382382
r#"
383383
---@class Box
@@ -403,7 +403,7 @@ mod tests {
403403

404404
#[test]
405405
fn test_function_self() {
406-
let mut ws = CompletionVirtualWorkspace::new();
406+
let mut ws = ProviderVirtualWorkspace::new();
407407
assert!(ws.check_completion_with_kind(
408408
r#"
409409
---@class A
@@ -422,7 +422,7 @@ mod tests {
422422

423423
#[test]
424424
fn test_class_attr() {
425-
let mut ws = CompletionVirtualWorkspace::new();
425+
let mut ws = ProviderVirtualWorkspace::new();
426426
assert!(ws.check_completion_with_kind(
427427
r#"
428428
---@class (<??>) A
Lines changed: 0 additions & 193 deletions
Original file line numberDiff line numberDiff line change
@@ -1,195 +1,2 @@
1-
use emmylua_code_analysis::{EmmyLuaAnalysis, FileId, VirtualUrlGenerator};
2-
use emmylua_parser::LuaAstNode;
3-
use lsp_types::{CompletionItemKind, CompletionResponse, CompletionTriggerKind, Position};
4-
use tokio_util::sync::CancellationToken;
5-
61
mod completion_resolve_test;
72
mod completion_test;
8-
9-
use crate::context::ClientId;
10-
11-
use super::{completion, completion_resolve};
12-
13-
/// A virtual workspace for testing.
14-
#[allow(unused)]
15-
#[derive(Debug)]
16-
struct CompletionVirtualWorkspace {
17-
pub virtual_url_generator: VirtualUrlGenerator,
18-
pub analysis: EmmyLuaAnalysis,
19-
id_counter: u32,
20-
}
21-
22-
#[derive(Debug)]
23-
struct VirtualCompletionItem {
24-
pub label: String,
25-
pub kind: CompletionItemKind,
26-
}
27-
28-
#[derive(Debug)]
29-
struct VirtualCompletionResolveItem {
30-
pub detail: String,
31-
}
32-
33-
#[allow(unused)]
34-
impl CompletionVirtualWorkspace {
35-
pub fn new() -> Self {
36-
let gen = VirtualUrlGenerator::new();
37-
let mut analysis = EmmyLuaAnalysis::new();
38-
let base = &gen.base;
39-
analysis.add_main_workspace(base.clone());
40-
CompletionVirtualWorkspace {
41-
virtual_url_generator: gen,
42-
analysis,
43-
id_counter: 0,
44-
}
45-
}
46-
47-
pub fn new_with_init_std_lib() -> Self {
48-
let gen = VirtualUrlGenerator::new();
49-
let mut analysis = EmmyLuaAnalysis::new();
50-
analysis.init_std_lib(None);
51-
let base = &gen.base;
52-
analysis.add_main_workspace(base.clone());
53-
CompletionVirtualWorkspace {
54-
virtual_url_generator: gen,
55-
analysis,
56-
id_counter: 0,
57-
}
58-
}
59-
60-
pub fn def(&mut self, content: &str) -> FileId {
61-
let id = self.id_counter;
62-
self.id_counter += 1;
63-
self.def_file(&format!("virtual_{}.lua", id), content)
64-
}
65-
66-
pub fn def_file(&mut self, file_name: &str, content: &str) -> FileId {
67-
let uri = self.virtual_url_generator.new_uri(file_name);
68-
let file_id = self
69-
.analysis
70-
.update_file_by_uri(&uri, Some(content.to_string()))
71-
.unwrap();
72-
file_id
73-
}
74-
75-
pub fn get_node<Ast: LuaAstNode>(&self, file_id: FileId) -> Ast {
76-
let tree = self
77-
.analysis
78-
.compilation
79-
.get_db()
80-
.get_vfs()
81-
.get_syntax_tree(&file_id)
82-
.unwrap();
83-
tree.get_chunk_node().descendants::<Ast>().next().unwrap()
84-
}
85-
86-
/// 处理文件内容
87-
fn handle_file_content(content: &str) -> Option<(String, Position)> {
88-
let content = content.to_string();
89-
let cursor_byte_pos = content.find("<??>")?;
90-
if content.matches("<??>").count() > 1 {
91-
return None;
92-
}
93-
94-
let mut line = 0;
95-
let mut column = 0;
96-
97-
for (byte_pos, c) in content.char_indices() {
98-
if byte_pos >= cursor_byte_pos {
99-
break;
100-
}
101-
if c == '\n' {
102-
line += 1;
103-
column = 0;
104-
} else {
105-
column += 1;
106-
}
107-
}
108-
109-
let new_content = content.replace("<??>", "");
110-
Some((new_content, Position::new(line as u32, column as u32)))
111-
}
112-
113-
pub fn check_completion(
114-
&mut self,
115-
block_str: &str,
116-
expect: Vec<VirtualCompletionItem>,
117-
) -> bool {
118-
self.check_completion_with_kind(block_str, expect, CompletionTriggerKind::INVOKED)
119-
}
120-
121-
pub fn check_completion_with_kind(
122-
&mut self,
123-
block_str: &str,
124-
expect: Vec<VirtualCompletionItem>,
125-
trigger_kind: CompletionTriggerKind,
126-
) -> bool {
127-
let content = Self::handle_file_content(block_str);
128-
let Some((content, position)) = content else {
129-
return false;
130-
};
131-
let file_id = self.def(&content);
132-
let result = completion(
133-
&self.analysis,
134-
file_id,
135-
position,
136-
trigger_kind,
137-
CancellationToken::new(),
138-
);
139-
let Some(result) = result else {
140-
return false;
141-
};
142-
// 对比
143-
let items = match result {
144-
CompletionResponse::Array(items) => items,
145-
CompletionResponse::List(list) => list.items,
146-
};
147-
if items.len() != expect.len() {
148-
return false;
149-
}
150-
// 需要顺序一致
151-
for (item, expect) in items.iter().zip(expect.iter()) {
152-
if item.label != expect.label || item.kind != Some(expect.kind) {
153-
return false;
154-
}
155-
}
156-
true
157-
}
158-
159-
pub fn check_completion_resolve(
160-
&mut self,
161-
block_str: &str,
162-
expect: VirtualCompletionResolveItem,
163-
) -> bool {
164-
let content = Self::handle_file_content(block_str);
165-
let Some((content, position)) = content else {
166-
return false;
167-
};
168-
let file_id = self.def(&content);
169-
let result = completion(
170-
&self.analysis,
171-
file_id,
172-
position,
173-
CompletionTriggerKind::INVOKED,
174-
CancellationToken::new(),
175-
);
176-
let Some(result) = result else {
177-
return false;
178-
};
179-
let items = match result {
180-
CompletionResponse::Array(items) => items,
181-
CompletionResponse::List(list) => list.items,
182-
};
183-
let Some(param) = items.get(0) else {
184-
return false;
185-
};
186-
let item = completion_resolve(&self.analysis, param.clone(), ClientId::VSCode);
187-
let Some(item_detail) = item.detail else {
188-
return false;
189-
};
190-
if item_detail != expect.detail {
191-
return false;
192-
}
193-
true
194-
}
195-
}

crates/emmylua_ls/src/handlers/hover/test/hover_function_test.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
#[cfg(test)]
22
mod tests {
33

4-
use crate::handlers::hover::test::{HoverVirtualWorkspace, VirtualHoverResult};
4+
use crate::handlers::test_lib::{ProviderVirtualWorkspace, VirtualHoverResult};
55

66
#[test]
77
fn test_1() {
8-
let mut ws = HoverVirtualWorkspace::new();
8+
let mut ws = ProviderVirtualWorkspace::new();
99
assert!(ws.check_hover(
1010
r#"
1111
---@param a number 参数a
@@ -67,7 +67,7 @@ mod tests {
6767

6868
#[test]
6969
fn test_2() {
70-
let mut ws = HoverVirtualWorkspace::new();
70+
let mut ws = ProviderVirtualWorkspace::new();
7171
ws.def(
7272
r#"
7373
---@class Game
@@ -103,7 +103,7 @@ mod tests {
103103

104104
#[test]
105105
fn test_3() {
106-
let mut ws = HoverVirtualWorkspace::new();
106+
let mut ws = ProviderVirtualWorkspace::new();
107107
ws.def(
108108
r#"
109109
---@class Hover.Test3<T>
@@ -128,7 +128,7 @@ mod tests {
128128

129129
#[test]
130130
fn test_union_function() {
131-
let mut ws = HoverVirtualWorkspace::new();
131+
let mut ws = ProviderVirtualWorkspace::new();
132132
assert!(ws.check_hover(
133133
r#"
134134
---@diagnostic disable: missing-return

0 commit comments

Comments
 (0)