diff options
Diffstat (limited to 'crates')
19 files changed, 425 insertions, 187 deletions
diff --git a/crates/ra_ide_api/Cargo.toml b/crates/ra_ide_api/Cargo.toml index d42a664b6..f7013c3c1 100644 --- a/crates/ra_ide_api/Cargo.toml +++ b/crates/ra_ide_api/Cargo.toml | |||
@@ -21,3 +21,6 @@ ra_text_edit = { path = "../ra_text_edit" } | |||
21 | ra_db = { path = "../ra_db" } | 21 | ra_db = { path = "../ra_db" } |
22 | hir = { path = "../ra_hir", package = "ra_hir" } | 22 | hir = { path = "../ra_hir", package = "ra_hir" } |
23 | test_utils = { path = "../test_utils" } | 23 | test_utils = { path = "../test_utils" } |
24 | |||
25 | [dev-dependencies] | ||
26 | insta = "0.1.4" | ||
diff --git a/crates/ra_ide_api/src/extend_selection.rs b/crates/ra_ide_api/src/extend_selection.rs index c3c809c9f..9f0ab2f1c 100644 --- a/crates/ra_ide_api/src/extend_selection.rs +++ b/crates/ra_ide_api/src/extend_selection.rs | |||
@@ -38,8 +38,9 @@ fn find_macro_call(node: &SyntaxNode, range: TextRange) -> Option<&ast::MacroCal | |||
38 | 38 | ||
39 | #[cfg(test)] | 39 | #[cfg(test)] |
40 | mod tests { | 40 | mod tests { |
41 | use ra_syntax::TextRange; | ||
42 | |||
41 | use crate::mock_analysis::single_file_with_range; | 43 | use crate::mock_analysis::single_file_with_range; |
42 | use test_utils::assert_eq_dbg; | ||
43 | 44 | ||
44 | #[test] | 45 | #[test] |
45 | fn extend_selection_inside_macros() { | 46 | fn extend_selection_inside_macros() { |
@@ -51,6 +52,6 @@ mod tests { | |||
51 | ", | 52 | ", |
52 | ); | 53 | ); |
53 | let r = analysis.extend_selection(frange); | 54 | let r = analysis.extend_selection(frange); |
54 | assert_eq_dbg("[51; 56)", &r); | 55 | assert_eq!(r, TextRange::from_to(51.into(), 56.into())); |
55 | } | 56 | } |
56 | } | 57 | } |
diff --git a/crates/ra_ide_api/src/runnables.rs b/crates/ra_ide_api/src/runnables.rs index 53e49da5b..f1de28094 100644 --- a/crates/ra_ide_api/src/runnables.rs +++ b/crates/ra_ide_api/src/runnables.rs | |||
@@ -92,3 +92,100 @@ fn runnable_mod(db: &RootDatabase, file_id: FileId, module: &ast::Module) -> Opt | |||
92 | kind: RunnableKind::TestMod { path }, | 92 | kind: RunnableKind::TestMod { path }, |
93 | }) | 93 | }) |
94 | } | 94 | } |
95 | |||
96 | #[cfg(test)] | ||
97 | mod tests { | ||
98 | use insta::assert_debug_snapshot_matches; | ||
99 | |||
100 | use crate::mock_analysis::analysis_and_position; | ||
101 | |||
102 | #[test] | ||
103 | fn test_runnables() { | ||
104 | let (analysis, pos) = analysis_and_position( | ||
105 | r#" | ||
106 | //- /lib.rs | ||
107 | <|> //empty | ||
108 | fn main() {} | ||
109 | |||
110 | #[test] | ||
111 | fn test_foo() {} | ||
112 | |||
113 | #[test] | ||
114 | #[ignore] | ||
115 | fn test_foo() {} | ||
116 | "#, | ||
117 | ); | ||
118 | let runnables = analysis.runnables(pos.file_id).unwrap(); | ||
119 | assert_debug_snapshot_matches!("runnables", &runnables) | ||
120 | } | ||
121 | |||
122 | #[test] | ||
123 | fn test_runnables_module() { | ||
124 | let (analysis, pos) = analysis_and_position( | ||
125 | r#" | ||
126 | //- /lib.rs | ||
127 | <|> //empty | ||
128 | mod test_mod { | ||
129 | #[test] | ||
130 | fn test_foo1() {} | ||
131 | } | ||
132 | "#, | ||
133 | ); | ||
134 | let runnables = analysis.runnables(pos.file_id).unwrap(); | ||
135 | assert_debug_snapshot_matches!("runnables_module", &runnables) | ||
136 | } | ||
137 | |||
138 | #[test] | ||
139 | fn test_runnables_one_depth_layer_module() { | ||
140 | let (analysis, pos) = analysis_and_position( | ||
141 | r#" | ||
142 | //- /lib.rs | ||
143 | <|> //empty | ||
144 | mod foo { | ||
145 | mod test_mod { | ||
146 | #[test] | ||
147 | fn test_foo1() {} | ||
148 | } | ||
149 | } | ||
150 | "#, | ||
151 | ); | ||
152 | let runnables = analysis.runnables(pos.file_id).unwrap(); | ||
153 | assert_debug_snapshot_matches!("runnables_one_depth_layer_module", &runnables) | ||
154 | } | ||
155 | |||
156 | #[test] | ||
157 | fn test_runnables_multiple_depth_module() { | ||
158 | let (analysis, pos) = analysis_and_position( | ||
159 | r#" | ||
160 | //- /lib.rs | ||
161 | <|> //empty | ||
162 | mod foo { | ||
163 | mod bar { | ||
164 | mod test_mod { | ||
165 | #[test] | ||
166 | fn test_foo1() {} | ||
167 | } | ||
168 | } | ||
169 | } | ||
170 | "#, | ||
171 | ); | ||
172 | let runnables = analysis.runnables(pos.file_id).unwrap(); | ||
173 | assert_debug_snapshot_matches!("runnables_multiple_depth_module", &runnables) | ||
174 | } | ||
175 | |||
176 | #[test] | ||
177 | fn test_runnables_no_test_function_in_module() { | ||
178 | let (analysis, pos) = analysis_and_position( | ||
179 | r#" | ||
180 | //- /lib.rs | ||
181 | <|> //empty | ||
182 | mod test_mod { | ||
183 | fn foo1() {} | ||
184 | } | ||
185 | "#, | ||
186 | ); | ||
187 | let runnables = analysis.runnables(pos.file_id).unwrap(); | ||
188 | assert!(runnables.is_empty()) | ||
189 | } | ||
190 | |||
191 | } | ||
diff --git a/crates/ra_ide_api/src/snapshots/tests__highlight_query_group_macro.snap b/crates/ra_ide_api/src/snapshots/tests__highlight_query_group_macro.snap new file mode 100644 index 000000000..b84aa9c78 --- /dev/null +++ b/crates/ra_ide_api/src/snapshots/tests__highlight_query_group_macro.snap | |||
@@ -0,0 +1,26 @@ | |||
1 | Created: 2019-01-15T11:15:20.732493641+00:00 | ||
2 | Creator: [email protected] | ||
3 | Source: crates/ra_ide_api/src/syntax_highlighting.rs | ||
4 | |||
5 | [ | ||
6 | HighlightedRange { | ||
7 | range: [20; 32), | ||
8 | tag: "macro" | ||
9 | }, | ||
10 | HighlightedRange { | ||
11 | range: [13; 18), | ||
12 | tag: "text" | ||
13 | }, | ||
14 | HighlightedRange { | ||
15 | range: [51; 54), | ||
16 | tag: "keyword" | ||
17 | }, | ||
18 | HighlightedRange { | ||
19 | range: [55; 60), | ||
20 | tag: "keyword" | ||
21 | }, | ||
22 | HighlightedRange { | ||
23 | range: [61; 72), | ||
24 | tag: "function" | ||
25 | } | ||
26 | ] | ||
diff --git a/crates/ra_ide_api/src/snapshots/tests__highlights_code_inside_macros.snap b/crates/ra_ide_api/src/snapshots/tests__highlights_code_inside_macros.snap new file mode 100644 index 000000000..14c6e5a4e --- /dev/null +++ b/crates/ra_ide_api/src/snapshots/tests__highlights_code_inside_macros.snap | |||
@@ -0,0 +1,70 @@ | |||
1 | Created: 2019-01-15T11:15:20.732523231+00:00 | ||
2 | Creator: [email protected] | ||
3 | Source: crates/ra_ide_api/src/syntax_highlighting.rs | ||
4 | |||
5 | [ | ||
6 | HighlightedRange { | ||
7 | range: [13; 15), | ||
8 | tag: "keyword" | ||
9 | }, | ||
10 | HighlightedRange { | ||
11 | range: [16; 20), | ||
12 | tag: "function" | ||
13 | }, | ||
14 | HighlightedRange { | ||
15 | range: [41; 46), | ||
16 | tag: "macro" | ||
17 | }, | ||
18 | HighlightedRange { | ||
19 | range: [49; 52), | ||
20 | tag: "keyword" | ||
21 | }, | ||
22 | HighlightedRange { | ||
23 | range: [57; 59), | ||
24 | tag: "literal" | ||
25 | }, | ||
26 | HighlightedRange { | ||
27 | range: [82; 86), | ||
28 | tag: "macro" | ||
29 | }, | ||
30 | HighlightedRange { | ||
31 | range: [89; 92), | ||
32 | tag: "keyword" | ||
33 | }, | ||
34 | HighlightedRange { | ||
35 | range: [97; 99), | ||
36 | tag: "literal" | ||
37 | }, | ||
38 | HighlightedRange { | ||
39 | range: [49; 52), | ||
40 | tag: "keyword" | ||
41 | }, | ||
42 | HighlightedRange { | ||
43 | range: [53; 54), | ||
44 | tag: "function" | ||
45 | }, | ||
46 | HighlightedRange { | ||
47 | range: [57; 59), | ||
48 | tag: "literal" | ||
49 | }, | ||
50 | HighlightedRange { | ||
51 | range: [61; 62), | ||
52 | tag: "text" | ||
53 | }, | ||
54 | HighlightedRange { | ||
55 | range: [89; 92), | ||
56 | tag: "keyword" | ||
57 | }, | ||
58 | HighlightedRange { | ||
59 | range: [93; 94), | ||
60 | tag: "function" | ||
61 | }, | ||
62 | HighlightedRange { | ||
63 | range: [97; 99), | ||
64 | tag: "literal" | ||
65 | }, | ||
66 | HighlightedRange { | ||
67 | range: [101; 102), | ||
68 | tag: "text" | ||
69 | } | ||
70 | ] | ||
diff --git a/crates/ra_ide_api/src/snapshots/tests__runnables.snap b/crates/ra_ide_api/src/snapshots/tests__runnables.snap new file mode 100644 index 000000000..ba6cba0ab --- /dev/null +++ b/crates/ra_ide_api/src/snapshots/tests__runnables.snap | |||
@@ -0,0 +1,22 @@ | |||
1 | Created: 2019-01-15T11:15:20.732460119+00:00 | ||
2 | Creator: [email protected] | ||
3 | Source: crates/ra_ide_api/src/runnables.rs | ||
4 | |||
5 | [ | ||
6 | Runnable { | ||
7 | range: [1; 21), | ||
8 | kind: Bin | ||
9 | }, | ||
10 | Runnable { | ||
11 | range: [22; 46), | ||
12 | kind: Test { | ||
13 | name: "test_foo" | ||
14 | } | ||
15 | }, | ||
16 | Runnable { | ||
17 | range: [47; 81), | ||
18 | kind: Test { | ||
19 | name: "test_foo" | ||
20 | } | ||
21 | } | ||
22 | ] | ||
diff --git a/crates/ra_ide_api/src/snapshots/tests__runnables_module.snap b/crates/ra_ide_api/src/snapshots/tests__runnables_module.snap new file mode 100644 index 000000000..b3f2d4d6e --- /dev/null +++ b/crates/ra_ide_api/src/snapshots/tests__runnables_module.snap | |||
@@ -0,0 +1,18 @@ | |||
1 | Created: 2019-01-15T11:15:20.732460109+00:00 | ||
2 | Creator: [email protected] | ||
3 | Source: crates/ra_ide_api/src/runnables.rs | ||
4 | |||
5 | [ | ||
6 | Runnable { | ||
7 | range: [1; 59), | ||
8 | kind: TestMod { | ||
9 | path: "test_mod" | ||
10 | } | ||
11 | }, | ||
12 | Runnable { | ||
13 | range: [28; 57), | ||
14 | kind: Test { | ||
15 | name: "test_foo1" | ||
16 | } | ||
17 | } | ||
18 | ] | ||
diff --git a/crates/ra_ide_api/src/snapshots/tests__runnables_multiple_depth_module.snap b/crates/ra_ide_api/src/snapshots/tests__runnables_multiple_depth_module.snap new file mode 100644 index 000000000..6eba482e7 --- /dev/null +++ b/crates/ra_ide_api/src/snapshots/tests__runnables_multiple_depth_module.snap | |||
@@ -0,0 +1,18 @@ | |||
1 | Created: 2019-01-15T11:15:20.732522773+00:00 | ||
2 | Creator: [email protected] | ||
3 | Source: crates/ra_ide_api/src/runnables.rs | ||
4 | |||
5 | [ | ||
6 | Runnable { | ||
7 | range: [41; 115), | ||
8 | kind: TestMod { | ||
9 | path: "foo::bar::test_mod" | ||
10 | } | ||
11 | }, | ||
12 | Runnable { | ||
13 | range: [68; 105), | ||
14 | kind: Test { | ||
15 | name: "test_foo1" | ||
16 | } | ||
17 | } | ||
18 | ] | ||
diff --git a/crates/ra_ide_api/src/snapshots/tests__runnables_one_depth_layer_module.snap b/crates/ra_ide_api/src/snapshots/tests__runnables_one_depth_layer_module.snap new file mode 100644 index 000000000..f40c762f3 --- /dev/null +++ b/crates/ra_ide_api/src/snapshots/tests__runnables_one_depth_layer_module.snap | |||
@@ -0,0 +1,18 @@ | |||
1 | Created: 2019-01-15T11:15:20.732480089+00:00 | ||
2 | Creator: [email protected] | ||
3 | Source: crates/ra_ide_api/src/runnables.rs | ||
4 | |||
5 | [ | ||
6 | Runnable { | ||
7 | range: [23; 85), | ||
8 | kind: TestMod { | ||
9 | path: "foo::test_mod" | ||
10 | } | ||
11 | }, | ||
12 | Runnable { | ||
13 | range: [46; 79), | ||
14 | kind: Test { | ||
15 | name: "test_foo1" | ||
16 | } | ||
17 | } | ||
18 | ] | ||
diff --git a/crates/ra_ide_api/src/syntax_highlighting.rs b/crates/ra_ide_api/src/syntax_highlighting.rs index cb19e9515..480b78dce 100644 --- a/crates/ra_ide_api/src/syntax_highlighting.rs +++ b/crates/ra_ide_api/src/syntax_highlighting.rs | |||
@@ -34,7 +34,8 @@ pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Cancelable<Vec<Hi | |||
34 | #[cfg(test)] | 34 | #[cfg(test)] |
35 | mod tests { | 35 | mod tests { |
36 | use crate::mock_analysis::single_file; | 36 | use crate::mock_analysis::single_file; |
37 | use test_utils::assert_eq_dbg; | 37 | |
38 | use insta::assert_debug_snapshot_matches; | ||
38 | 39 | ||
39 | #[test] | 40 | #[test] |
40 | fn highlights_code_inside_macros() { | 41 | fn highlights_code_inside_macros() { |
@@ -47,25 +48,7 @@ mod tests { | |||
47 | ", | 48 | ", |
48 | ); | 49 | ); |
49 | let highlights = analysis.highlight(file_id).unwrap(); | 50 | let highlights = analysis.highlight(file_id).unwrap(); |
50 | assert_eq_dbg( | 51 | assert_debug_snapshot_matches!("highlights_code_inside_macros", &highlights); |
51 | r#"[HighlightedRange { range: [13; 15), tag: "keyword" }, | ||
52 | HighlightedRange { range: [16; 20), tag: "function" }, | ||
53 | HighlightedRange { range: [41; 46), tag: "macro" }, | ||
54 | HighlightedRange { range: [49; 52), tag: "keyword" }, | ||
55 | HighlightedRange { range: [57; 59), tag: "literal" }, | ||
56 | HighlightedRange { range: [82; 86), tag: "macro" }, | ||
57 | HighlightedRange { range: [89; 92), tag: "keyword" }, | ||
58 | HighlightedRange { range: [97; 99), tag: "literal" }, | ||
59 | HighlightedRange { range: [49; 52), tag: "keyword" }, | ||
60 | HighlightedRange { range: [53; 54), tag: "function" }, | ||
61 | HighlightedRange { range: [57; 59), tag: "literal" }, | ||
62 | HighlightedRange { range: [61; 62), tag: "text" }, | ||
63 | HighlightedRange { range: [89; 92), tag: "keyword" }, | ||
64 | HighlightedRange { range: [93; 94), tag: "function" }, | ||
65 | HighlightedRange { range: [97; 99), tag: "literal" }, | ||
66 | HighlightedRange { range: [101; 102), tag: "text" }]"#, | ||
67 | &highlights, | ||
68 | ) | ||
69 | } | 52 | } |
70 | 53 | ||
71 | // FIXME: this test is not really necessary: artifact of the inital hacky | 54 | // FIXME: this test is not really necessary: artifact of the inital hacky |
@@ -80,13 +63,6 @@ mod tests { | |||
80 | ", | 63 | ", |
81 | ); | 64 | ); |
82 | let highlights = analysis.highlight(file_id).unwrap(); | 65 | let highlights = analysis.highlight(file_id).unwrap(); |
83 | assert_eq_dbg( | 66 | assert_debug_snapshot_matches!("highlight_query_group_macro", &highlights); |
84 | r#"[HighlightedRange { range: [20; 32), tag: "macro" }, | ||
85 | HighlightedRange { range: [13; 18), tag: "text" }, | ||
86 | HighlightedRange { range: [51; 54), tag: "keyword" }, | ||
87 | HighlightedRange { range: [55; 60), tag: "keyword" }, | ||
88 | HighlightedRange { range: [61; 72), tag: "function" }]"#, | ||
89 | &highlights, | ||
90 | ) | ||
91 | } | 67 | } |
92 | } | 68 | } |
diff --git a/crates/ra_ide_api/tests/test/main.rs b/crates/ra_ide_api/tests/test/main.rs index 7dc1dba73..2b863aedf 100644 --- a/crates/ra_ide_api/tests/test/main.rs +++ b/crates/ra_ide_api/tests/test/main.rs | |||
@@ -1,7 +1,6 @@ | |||
1 | mod runnables; | ||
2 | |||
3 | use ra_syntax::TextRange; | 1 | use ra_syntax::TextRange; |
4 | use test_utils::{assert_eq_dbg, assert_eq_text}; | 2 | use test_utils::assert_eq_text; |
3 | use insta::assert_debug_snapshot_matches; | ||
5 | 4 | ||
6 | use ra_ide_api::{ | 5 | use ra_ide_api::{ |
7 | mock_analysis::{single_file, single_file_with_position, MockAnalysis}, | 6 | mock_analysis::{single_file, single_file_with_position, MockAnalysis}, |
@@ -12,18 +11,7 @@ use ra_ide_api::{ | |||
12 | fn test_unresolved_module_diagnostic() { | 11 | fn test_unresolved_module_diagnostic() { |
13 | let (analysis, file_id) = single_file("mod foo;"); | 12 | let (analysis, file_id) = single_file("mod foo;"); |
14 | let diagnostics = analysis.diagnostics(file_id).unwrap(); | 13 | let diagnostics = analysis.diagnostics(file_id).unwrap(); |
15 | assert_eq_dbg( | 14 | assert_debug_snapshot_matches!("unresolved_module_diagnostic", &diagnostics); |
16 | r#"[Diagnostic { | ||
17 | message: "unresolved module", | ||
18 | range: [4; 7), | ||
19 | fix: Some(SourceChange { | ||
20 | label: "create module", | ||
21 | source_file_edits: [], | ||
22 | file_system_edits: [CreateFile { source_root: SourceRootId(0), path: "foo.rs" }], | ||
23 | cursor_position: None }), | ||
24 | severity: Error }]"#, | ||
25 | &diagnostics, | ||
26 | ); | ||
27 | } | 15 | } |
28 | 16 | ||
29 | // FIXME: move this test to hir | 17 | // FIXME: move this test to hir |
@@ -31,7 +19,7 @@ fn test_unresolved_module_diagnostic() { | |||
31 | fn test_unresolved_module_diagnostic_no_diag_for_inline_mode() { | 19 | fn test_unresolved_module_diagnostic_no_diag_for_inline_mode() { |
32 | let (analysis, file_id) = single_file("mod foo {}"); | 20 | let (analysis, file_id) = single_file("mod foo {}"); |
33 | let diagnostics = analysis.diagnostics(file_id).unwrap(); | 21 | let diagnostics = analysis.diagnostics(file_id).unwrap(); |
34 | assert_eq_dbg(r#"[]"#, &diagnostics); | 22 | assert!(diagnostics.is_empty()); |
35 | } | 23 | } |
36 | 24 | ||
37 | #[test] | 25 | #[test] |
diff --git a/crates/ra_ide_api/tests/test/runnables.rs b/crates/ra_ide_api/tests/test/runnables.rs deleted file mode 100644 index da8d5e0d5..000000000 --- a/crates/ra_ide_api/tests/test/runnables.rs +++ /dev/null | |||
@@ -1,109 +0,0 @@ | |||
1 | use test_utils::assert_eq_dbg; | ||
2 | |||
3 | use ra_ide_api::mock_analysis::analysis_and_position; | ||
4 | |||
5 | #[test] | ||
6 | fn test_runnables() { | ||
7 | let (analysis, pos) = analysis_and_position( | ||
8 | r#" | ||
9 | //- /lib.rs | ||
10 | <|> //empty | ||
11 | fn main() {} | ||
12 | |||
13 | #[test] | ||
14 | fn test_foo() {} | ||
15 | |||
16 | #[test] | ||
17 | #[ignore] | ||
18 | fn test_foo() {} | ||
19 | "#, | ||
20 | ); | ||
21 | let runnables = analysis.runnables(pos.file_id).unwrap(); | ||
22 | assert_eq_dbg( | ||
23 | r#"[Runnable { range: [1; 21), kind: Bin }, | ||
24 | Runnable { range: [22; 46), kind: Test { name: "test_foo" } }, | ||
25 | Runnable { range: [47; 81), kind: Test { name: "test_foo" } }]"#, | ||
26 | &runnables, | ||
27 | ) | ||
28 | } | ||
29 | |||
30 | #[test] | ||
31 | fn test_runnables_module() { | ||
32 | let (analysis, pos) = analysis_and_position( | ||
33 | r#" | ||
34 | //- /lib.rs | ||
35 | <|> //empty | ||
36 | mod test_mod { | ||
37 | #[test] | ||
38 | fn test_foo1() {} | ||
39 | } | ||
40 | "#, | ||
41 | ); | ||
42 | let runnables = analysis.runnables(pos.file_id).unwrap(); | ||
43 | assert_eq_dbg( | ||
44 | r#"[Runnable { range: [1; 59), kind: TestMod { path: "test_mod" } }, | ||
45 | Runnable { range: [28; 57), kind: Test { name: "test_foo1" } }]"#, | ||
46 | &runnables, | ||
47 | ) | ||
48 | } | ||
49 | |||
50 | #[test] | ||
51 | fn test_runnables_one_depth_layer_module() { | ||
52 | let (analysis, pos) = analysis_and_position( | ||
53 | r#" | ||
54 | //- /lib.rs | ||
55 | <|> //empty | ||
56 | mod foo { | ||
57 | mod test_mod { | ||
58 | #[test] | ||
59 | fn test_foo1() {} | ||
60 | } | ||
61 | } | ||
62 | "#, | ||
63 | ); | ||
64 | let runnables = analysis.runnables(pos.file_id).unwrap(); | ||
65 | assert_eq_dbg( | ||
66 | r#"[Runnable { range: [23; 85), kind: TestMod { path: "foo::test_mod" } }, | ||
67 | Runnable { range: [46; 79), kind: Test { name: "test_foo1" } }]"#, | ||
68 | &runnables, | ||
69 | ) | ||
70 | } | ||
71 | |||
72 | #[test] | ||
73 | fn test_runnables_multiple_depth_module() { | ||
74 | let (analysis, pos) = analysis_and_position( | ||
75 | r#" | ||
76 | //- /lib.rs | ||
77 | <|> //empty | ||
78 | mod foo { | ||
79 | mod bar { | ||
80 | mod test_mod { | ||
81 | #[test] | ||
82 | fn test_foo1() {} | ||
83 | } | ||
84 | } | ||
85 | } | ||
86 | "#, | ||
87 | ); | ||
88 | let runnables = analysis.runnables(pos.file_id).unwrap(); | ||
89 | assert_eq_dbg( | ||
90 | r#"[Runnable { range: [41; 115), kind: TestMod { path: "foo::bar::test_mod" } }, | ||
91 | Runnable { range: [68; 105), kind: Test { name: "test_foo1" } }]"#, | ||
92 | &runnables, | ||
93 | ) | ||
94 | } | ||
95 | |||
96 | #[test] | ||
97 | fn test_runnables_no_test_function_in_module() { | ||
98 | let (analysis, pos) = analysis_and_position( | ||
99 | r#" | ||
100 | //- /lib.rs | ||
101 | <|> //empty | ||
102 | mod test_mod { | ||
103 | fn foo1() {} | ||
104 | } | ||
105 | "#, | ||
106 | ); | ||
107 | let runnables = analysis.runnables(pos.file_id).unwrap(); | ||
108 | assert_eq_dbg(r#"[]"#, &runnables) | ||
109 | } | ||
diff --git a/crates/ra_ide_api/tests/test/snapshots/test__unresolved_module_diagnostic.snap b/crates/ra_ide_api/tests/test/snapshots/test__unresolved_module_diagnostic.snap new file mode 100644 index 000000000..1b41e2b00 --- /dev/null +++ b/crates/ra_ide_api/tests/test/snapshots/test__unresolved_module_diagnostic.snap | |||
@@ -0,0 +1,26 @@ | |||
1 | Created: 2019-01-15T11:15:20.891129945+00:00 | ||
2 | Creator: [email protected] | ||
3 | Source: crates/ra_ide_api/tests/test/main.rs | ||
4 | |||
5 | [ | ||
6 | Diagnostic { | ||
7 | message: "unresolved module", | ||
8 | range: [4; 7), | ||
9 | fix: Some( | ||
10 | SourceChange { | ||
11 | label: "create module", | ||
12 | source_file_edits: [], | ||
13 | file_system_edits: [ | ||
14 | CreateFile { | ||
15 | source_root: SourceRootId( | ||
16 | 0 | ||
17 | ), | ||
18 | path: "foo.rs" | ||
19 | } | ||
20 | ], | ||
21 | cursor_position: None | ||
22 | } | ||
23 | ), | ||
24 | severity: Error | ||
25 | } | ||
26 | ] | ||
diff --git a/crates/ra_ide_api_light/Cargo.toml b/crates/ra_ide_api_light/Cargo.toml index 8c192fca6..16cf228e7 100644 --- a/crates/ra_ide_api_light/Cargo.toml +++ b/crates/ra_ide_api_light/Cargo.toml | |||
@@ -17,3 +17,4 @@ ra_text_edit = { path = "../ra_text_edit" } | |||
17 | [dev-dependencies] | 17 | [dev-dependencies] |
18 | test_utils = { path = "../test_utils" } | 18 | test_utils = { path = "../test_utils" } |
19 | proptest = "0.8.7" | 19 | proptest = "0.8.7" |
20 | insta = "0.1.4" | ||
diff --git a/crates/ra_ide_api_light/src/lib.rs b/crates/ra_ide_api_light/src/lib.rs index 72fba9402..9dd72701d 100644 --- a/crates/ra_ide_api_light/src/lib.rs +++ b/crates/ra_ide_api_light/src/lib.rs | |||
@@ -132,8 +132,9 @@ pub fn syntax_tree(file: &SourceFile) -> String { | |||
132 | #[cfg(test)] | 132 | #[cfg(test)] |
133 | mod tests { | 133 | mod tests { |
134 | use ra_syntax::AstNode; | 134 | use ra_syntax::AstNode; |
135 | use insta::assert_debug_snapshot_matches; | ||
135 | 136 | ||
136 | use crate::test_utils::{add_cursor, assert_eq_dbg, assert_eq_text, extract_offset}; | 137 | use crate::test_utils::{add_cursor, assert_eq_text, extract_offset}; |
137 | 138 | ||
138 | use super::*; | 139 | use super::*; |
139 | 140 | ||
@@ -147,15 +148,7 @@ fn main() {} | |||
147 | "#, | 148 | "#, |
148 | ); | 149 | ); |
149 | let hls = highlight(file.syntax()); | 150 | let hls = highlight(file.syntax()); |
150 | assert_eq_dbg( | 151 | assert_debug_snapshot_matches!("highlighting", hls); |
151 | r#"[HighlightedRange { range: [1; 11), tag: "comment" }, | ||
152 | HighlightedRange { range: [12; 14), tag: "keyword" }, | ||
153 | HighlightedRange { range: [15; 19), tag: "function" }, | ||
154 | HighlightedRange { range: [29; 37), tag: "macro" }, | ||
155 | HighlightedRange { range: [38; 50), tag: "string" }, | ||
156 | HighlightedRange { range: [52; 54), tag: "literal" }]"#, | ||
157 | &hls, | ||
158 | ); | ||
159 | } | 152 | } |
160 | 153 | ||
161 | #[test] | 154 | #[test] |
diff --git a/crates/ra_ide_api_light/src/snapshots/tests__file_structure.snap b/crates/ra_ide_api_light/src/snapshots/tests__file_structure.snap new file mode 100644 index 000000000..10eb5c724 --- /dev/null +++ b/crates/ra_ide_api_light/src/snapshots/tests__file_structure.snap | |||
@@ -0,0 +1,80 @@ | |||
1 | Created: 2019-01-15T11:15:21.073862814+00:00 | ||
2 | Creator: [email protected] | ||
3 | Source: crates/ra_ide_api_light/src/structure.rs | ||
4 | |||
5 | [ | ||
6 | StructureNode { | ||
7 | parent: None, | ||
8 | label: "Foo", | ||
9 | navigation_range: [8; 11), | ||
10 | node_range: [1; 26), | ||
11 | kind: STRUCT_DEF | ||
12 | }, | ||
13 | StructureNode { | ||
14 | parent: Some( | ||
15 | 0 | ||
16 | ), | ||
17 | label: "x", | ||
18 | navigation_range: [18; 19), | ||
19 | node_range: [18; 24), | ||
20 | kind: NAMED_FIELD_DEF | ||
21 | }, | ||
22 | StructureNode { | ||
23 | parent: None, | ||
24 | label: "m", | ||
25 | navigation_range: [32; 33), | ||
26 | node_range: [28; 53), | ||
27 | kind: MODULE | ||
28 | }, | ||
29 | StructureNode { | ||
30 | parent: Some( | ||
31 | 2 | ||
32 | ), | ||
33 | label: "bar", | ||
34 | navigation_range: [43; 46), | ||
35 | node_range: [40; 51), | ||
36 | kind: FN_DEF | ||
37 | }, | ||
38 | StructureNode { | ||
39 | parent: None, | ||
40 | label: "E", | ||
41 | navigation_range: [60; 61), | ||
42 | node_range: [55; 75), | ||
43 | kind: ENUM_DEF | ||
44 | }, | ||
45 | StructureNode { | ||
46 | parent: None, | ||
47 | label: "T", | ||
48 | navigation_range: [81; 82), | ||
49 | node_range: [76; 88), | ||
50 | kind: TYPE_DEF | ||
51 | }, | ||
52 | StructureNode { | ||
53 | parent: None, | ||
54 | label: "S", | ||
55 | navigation_range: [96; 97), | ||
56 | node_range: [89; 108), | ||
57 | kind: STATIC_DEF | ||
58 | }, | ||
59 | StructureNode { | ||
60 | parent: None, | ||
61 | label: "C", | ||
62 | navigation_range: [115; 116), | ||
63 | node_range: [109; 127), | ||
64 | kind: CONST_DEF | ||
65 | }, | ||
66 | StructureNode { | ||
67 | parent: None, | ||
68 | label: "impl E", | ||
69 | navigation_range: [134; 135), | ||
70 | node_range: [129; 138), | ||
71 | kind: IMPL_BLOCK | ||
72 | }, | ||
73 | StructureNode { | ||
74 | parent: None, | ||
75 | label: "impl fmt::Debug for E", | ||
76 | navigation_range: [160; 161), | ||
77 | node_range: [140; 164), | ||
78 | kind: IMPL_BLOCK | ||
79 | } | ||
80 | ] | ||
diff --git a/crates/ra_ide_api_light/src/snapshots/tests__highlighting.snap b/crates/ra_ide_api_light/src/snapshots/tests__highlighting.snap new file mode 100644 index 000000000..d8f44a713 --- /dev/null +++ b/crates/ra_ide_api_light/src/snapshots/tests__highlighting.snap | |||
@@ -0,0 +1,30 @@ | |||
1 | Created: 2019-01-15T11:15:21.073858657+00:00 | ||
2 | Creator: [email protected] | ||
3 | Source: crates/ra_ide_api_light/src/lib.rs | ||
4 | |||
5 | [ | ||
6 | HighlightedRange { | ||
7 | range: [1; 11), | ||
8 | tag: "comment" | ||
9 | }, | ||
10 | HighlightedRange { | ||
11 | range: [12; 14), | ||
12 | tag: "keyword" | ||
13 | }, | ||
14 | HighlightedRange { | ||
15 | range: [15; 19), | ||
16 | tag: "function" | ||
17 | }, | ||
18 | HighlightedRange { | ||
19 | range: [29; 37), | ||
20 | tag: "macro" | ||
21 | }, | ||
22 | HighlightedRange { | ||
23 | range: [38; 50), | ||
24 | tag: "string" | ||
25 | }, | ||
26 | HighlightedRange { | ||
27 | range: [52; 54), | ||
28 | tag: "literal" | ||
29 | } | ||
30 | ] | ||
diff --git a/crates/ra_ide_api_light/src/structure.rs b/crates/ra_ide_api_light/src/structure.rs index 8bd57555f..3c6f39e16 100644 --- a/crates/ra_ide_api_light/src/structure.rs +++ b/crates/ra_ide_api_light/src/structure.rs | |||
@@ -87,7 +87,7 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> { | |||
87 | #[cfg(test)] | 87 | #[cfg(test)] |
88 | mod tests { | 88 | mod tests { |
89 | use super::*; | 89 | use super::*; |
90 | use test_utils::assert_eq_dbg; | 90 | use insta::assert_debug_snapshot_matches; |
91 | 91 | ||
92 | #[test] | 92 | #[test] |
93 | fn test_file_structure() { | 93 | fn test_file_structure() { |
@@ -112,18 +112,6 @@ impl fmt::Debug for E {} | |||
112 | "#, | 112 | "#, |
113 | ); | 113 | ); |
114 | let structure = file_structure(&file); | 114 | let structure = file_structure(&file); |
115 | assert_eq_dbg( | 115 | assert_debug_snapshot_matches!("file_structure", structure); |
116 | r#"[StructureNode { parent: None, label: "Foo", navigation_range: [8; 11), node_range: [1; 26), kind: STRUCT_DEF }, | ||
117 | StructureNode { parent: Some(0), label: "x", navigation_range: [18; 19), node_range: [18; 24), kind: NAMED_FIELD_DEF }, | ||
118 | StructureNode { parent: None, label: "m", navigation_range: [32; 33), node_range: [28; 53), kind: MODULE }, | ||
119 | StructureNode { parent: Some(2), label: "bar", navigation_range: [43; 46), node_range: [40; 51), kind: FN_DEF }, | ||
120 | StructureNode { parent: None, label: "E", navigation_range: [60; 61), node_range: [55; 75), kind: ENUM_DEF }, | ||
121 | StructureNode { parent: None, label: "T", navigation_range: [81; 82), node_range: [76; 88), kind: TYPE_DEF }, | ||
122 | StructureNode { parent: None, label: "S", navigation_range: [96; 97), node_range: [89; 108), kind: STATIC_DEF }, | ||
123 | StructureNode { parent: None, label: "C", navigation_range: [115; 116), node_range: [109; 127), kind: CONST_DEF }, | ||
124 | StructureNode { parent: None, label: "impl E", navigation_range: [134; 135), node_range: [129; 138), kind: IMPL_BLOCK }, | ||
125 | StructureNode { parent: None, label: "impl fmt::Debug for E", navigation_range: [160; 161), node_range: [140; 164), kind: IMPL_BLOCK }]"#, | ||
126 | &structure, | ||
127 | ) | ||
128 | } | 116 | } |
129 | } | 117 | } |
diff --git a/crates/test_utils/src/lib.rs b/crates/test_utils/src/lib.rs index 9b1c9c9a0..6489033dd 100644 --- a/crates/test_utils/src/lib.rs +++ b/crates/test_utils/src/lib.rs | |||
@@ -1,8 +1,6 @@ | |||
1 | use std::fmt; | ||
2 | use std::fs; | 1 | use std::fs; |
3 | use std::path::{Path, PathBuf}; | 2 | use std::path::{Path, PathBuf}; |
4 | 3 | ||
5 | use itertools::Itertools; | ||
6 | use text_unit::{TextRange, TextUnit}; | 4 | use text_unit::{TextRange, TextUnit}; |
7 | use serde_json::Value; | 5 | use serde_json::Value; |
8 | 6 | ||
@@ -31,12 +29,6 @@ macro_rules! assert_eq_text { | |||
31 | }}; | 29 | }}; |
32 | } | 30 | } |
33 | 31 | ||
34 | pub fn assert_eq_dbg(expected: &str, actual: &impl fmt::Debug) { | ||
35 | let actual = format!("{:?}", actual); | ||
36 | let expected = expected.lines().map(|l| l.trim()).join(" "); | ||
37 | assert_eq!(expected, actual); | ||
38 | } | ||
39 | |||
40 | pub fn extract_offset(text: &str) -> (TextUnit, String) { | 32 | pub fn extract_offset(text: &str) -> (TextUnit, String) { |
41 | match try_extract_offset(text) { | 33 | match try_extract_offset(text) { |
42 | None => panic!("text should contain cursor marker"), | 34 | None => panic!("text should contain cursor marker"), |