Skip to content

Commit 104379d

Browse files
committed
test: add more diag tests using expect crate
1 parent be46617 commit 104379d

File tree

10 files changed

+502
-105
lines changed

10 files changed

+502
-105
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
# Set default behavior to automatically normalize line endings.
22
* text=auto
3+
*.pi eol=lf

Cargo.lock

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,8 @@ lto = "fat"
9898
incremental = true
9999
codegen-units = 1
100100
# rpath = true
101+
102+
103+
[dev-dependencies]
104+
expect-test = "1.4.1"
105+

src/ast/diag.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,13 @@ impl Pos {
232232
}
233233
use std::fmt::Debug;
234234
impl PLDiag {
235+
#[cfg(test)]
236+
pub fn rm_file(&mut self) {
237+
self.raw.source = None;
238+
self.raw.labels.iter_mut().for_each(|label| {
239+
label.file = String::new();
240+
})
241+
}
235242
pub fn print(&self, path: &str, f: impl Fn(&dyn Db, &str) -> Source + 'static, db: &dyn Db) {
236243
let mut colors = ColorGenerator::new();
237244
let mut rb = Report::build(

src/ast/test.rs

Lines changed: 11 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use std::{
55
sync::{Arc, Mutex},
66
};
77

8+
use expect_test::expect_file;
89
use lsp_types::{
910
CompletionItemKind, GotoDefinitionResponse, HoverContents, InlayHintLabel, MarkedString,
1011
};
@@ -17,7 +18,6 @@ use crate::{
1718
PLSignatureHelp,
1819
},
1920
compiler::{compile_dry, ActionType},
20-
diag::DiagCode,
2121
range::Pos,
2222
},
2323
db::Database,
@@ -66,7 +66,14 @@ fn test_diag() {
6666
assert!(!comps.is_empty());
6767
let (file, diag) = &comps[0];
6868
assert!(file.contains("test_diag.pi"));
69-
let mut diag = diag.clone();
69+
let mut diag = diag
70+
.iter()
71+
.map(|d| {
72+
let mut d = d.clone();
73+
d.rm_file();
74+
d
75+
})
76+
.collect::<Vec<_>>();
7077
diag.sort_by(|a, b| {
7178
if a.raw.range.start.line < b.raw.range.start.line
7279
|| (a.raw.range.start.line == b.raw.range.start.line
@@ -81,95 +88,8 @@ fn test_diag() {
8188
std::cmp::Ordering::Greater
8289
}
8390
});
84-
assert_eq!(diag.len(), 11);
85-
assert_eq!(
86-
new_diag_range(10, 14, 10, 15),
87-
diag[0].get_range().to_diag_range()
88-
);
89-
assert_eq!(
90-
diag[0].get_diag_code(),
91-
DiagCode::Err(crate::ast::diag::ErrorCode::TYPE_MISMATCH)
92-
);
93-
assert_eq!(
94-
new_diag_range(19, 16, 19, 19),
95-
diag[1].get_range().to_diag_range()
96-
);
97-
assert_eq!(
98-
diag[1].get_diag_code(),
99-
DiagCode::Err(crate::ast::diag::ErrorCode::TYPE_MISMATCH)
100-
);
101-
assert_eq!(
102-
new_diag_range(21, 12, 21, 21),
103-
diag[2].get_range().to_diag_range()
104-
);
105-
assert_eq!(
106-
diag[2].get_diag_code(),
107-
DiagCode::Err(crate::ast::diag::ErrorCode::INVALID_DIRECT_UNION_CAST)
108-
);
109-
assert_eq!(
110-
new_diag_range(22, 13, 22, 22),
111-
diag[3].get_range().to_diag_range()
112-
);
113-
assert_eq!(
114-
diag[3].get_diag_code(),
115-
DiagCode::Err(crate::ast::diag::ErrorCode::INVALID_UNION_CAST)
116-
);
117-
assert_eq!(
118-
new_diag_range(23, 18, 23, 21),
119-
diag[4].get_range().to_diag_range()
120-
);
121-
assert_eq!(
122-
diag[4].get_diag_code(),
123-
DiagCode::Err(crate::ast::diag::ErrorCode::UNION_DOES_NOT_CONTAIN_TYPE)
124-
);
125-
assert_eq!(
126-
new_diag_range(24, 13, 24, 21),
127-
diag[5].get_range().to_diag_range()
128-
);
129-
assert_eq!(
130-
diag[5].get_diag_code(),
131-
DiagCode::Err(crate::ast::diag::ErrorCode::INVALID_IS_EXPR)
132-
);
133-
assert_eq!(
134-
new_diag_range(28, 11, 28, 11),
135-
diag[6].get_range().to_diag_range()
136-
);
137-
assert_eq!(
138-
diag[6].get_diag_code(),
139-
DiagCode::Err(crate::ast::diag::ErrorCode::MISSING_SEMI)
140-
);
141-
assert_eq!(
142-
new_diag_range(30, 8, 30, 9),
143-
diag[7].get_range().to_diag_range()
144-
);
145-
assert_eq!(
146-
diag[7].get_diag_code(),
147-
DiagCode::Warn(crate::ast::diag::WarnCode::UNUSED_VARIABLE)
148-
);
149-
assert_eq!(
150-
new_diag_range(30, 13, 30, 13),
151-
diag[8].get_range().to_diag_range()
152-
);
153-
assert_eq!(
154-
diag[8].get_diag_code(),
155-
DiagCode::Err(crate::ast::diag::ErrorCode::MISSING_SEMI)
156-
);
157-
assert_eq!(
158-
new_diag_range(31, 15, 31, 15),
159-
diag[9].get_range().to_diag_range()
160-
);
161-
assert_eq!(
162-
diag[9].get_diag_code(),
163-
DiagCode::Err(crate::ast::diag::ErrorCode::MISSING_SEMI)
164-
);
165-
assert_eq!(
166-
new_diag_range(41, 5, 41, 7),
167-
diag[10].get_range().to_diag_range()
168-
);
169-
assert_eq!(
170-
diag[10].get_diag_code(),
171-
DiagCode::Err(crate::ast::diag::ErrorCode::DERIVE_TRAIT_NOT_IMPL)
172-
);
91+
let expected = expect_file!["test_diag.expect"];
92+
expected.assert_eq(&format!("{:#?}", diag));
17393
}
17494
#[test]
17595
fn test_memory_leak() {

0 commit comments

Comments
 (0)