summaryrefslogtreecommitdiff
path: root/crates/typst-ide/src/complete.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2024-04-13 10:39:45 +0200
committerGitHub <noreply@github.com>2024-04-13 08:39:45 +0000
commit020294fca9a7065d4b9cf4e677f606ebaaa29b00 (patch)
treec0027ad22046e2726c22298461327823d6b88d53 /crates/typst-ide/src/complete.rs
parent72dd79210602ecc799726fc096b078afbb47f299 (diff)
Better test runner (#3922)
Diffstat (limited to 'crates/typst-ide/src/complete.rs')
-rw-r--r--crates/typst-ide/src/complete.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/crates/typst-ide/src/complete.rs b/crates/typst-ide/src/complete.rs
index be28a431..c758dd1c 100644
--- a/crates/typst-ide/src/complete.rs
+++ b/crates/typst-ide/src/complete.rs
@@ -1403,3 +1403,34 @@ impl<'a> CompletionContext<'a> {
}
}
}
+
+#[cfg(test)]
+mod tests {
+ use typst::eval::Tracer;
+
+ use super::autocomplete;
+ use crate::tests::TestWorld;
+
+ #[track_caller]
+ fn test(text: &str, cursor: usize, contains: &[&str], excludes: &[&str]) {
+ let world = TestWorld::new(text);
+ let doc = typst::compile(&world, &mut Tracer::new()).ok();
+ let (_, completions) =
+ autocomplete(&world, doc.as_ref(), &world.main, cursor, true)
+ .unwrap_or_default();
+
+ let labels: Vec<_> = completions.iter().map(|c| c.label.as_str()).collect();
+ for item in contains {
+ assert!(labels.contains(item), "{item:?} was not contained in {labels:?}");
+ }
+ for item in excludes {
+ assert!(!labels.contains(item), "{item:?} was not excluded in {labels:?}");
+ }
+ }
+
+ #[test]
+ fn test_autocomplete() {
+ test("#i", 2, &["int", "if conditional"], &["foo"]);
+ test("#().", 4, &["insert", "remove", "len", "all"], &["foo"]);
+ }
+}