diff options
Diffstat (limited to 'support/texlab/tests/integration/lsp/text_document/folding_range.rs')
-rw-r--r-- | support/texlab/tests/integration/lsp/text_document/folding_range.rs | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/support/texlab/tests/integration/lsp/text_document/folding_range.rs b/support/texlab/tests/integration/lsp/text_document/folding_range.rs new file mode 100644 index 0000000000..1d75ba3e0e --- /dev/null +++ b/support/texlab/tests/integration/lsp/text_document/folding_range.rs @@ -0,0 +1,97 @@ +use anyhow::Result; +use assert_unordered::assert_eq_unordered; +use lsp_types::{ + request::FoldingRangeRequest, ClientCapabilities, FoldingRange, FoldingRangeKind, + FoldingRangeParams, TextDocumentIdentifier, +}; + +use crate::lsp::{client::Client, fixture}; + +fn check(fixture: &str, expected_ranges: Vec<(u32, u32, u32, u32)>) -> Result<()> { + let mut client = Client::spawn()?; + client.initialize(ClientCapabilities::default(), None)?; + + let fixture = fixture::parse(fixture); + for file in fixture.files { + client.open(file.name, file.lang, file.text)?; + } + + let actual_foldings = client + .request::<FoldingRangeRequest>(FoldingRangeParams { + text_document: TextDocumentIdentifier::new(client.uri(fixture.cursor.unwrap().name)?), + work_done_progress_params: Default::default(), + partial_result_params: Default::default(), + })? + .unwrap_or_default(); + + client.shutdown()?; + + let expected_foldings = expected_ranges + .into_iter() + .map( + |(start_line, start_character, end_line, end_character)| FoldingRange { + start_line, + start_character: Some(start_character), + end_line, + end_character: Some(end_character), + kind: Some(FoldingRangeKind::Region), + }, + ) + .collect(); + + assert_eq_unordered!(actual_foldings, expected_foldings); + Ok(()) +} + +#[test] +fn latex() -> Result<()> { + check( + r#" +%TEX main.tex +%SRC \begin{document} +%SRC \section{Foo} +%SRC foo +%SRC \subsection{Bar} +%SRC bar +%SRC \section{Baz} +%SRC baz +%SRC \section{Qux} +%SRC \end{document} +%CUR ^ +"#, + vec![ + (0, 0, 8, 14), + (1, 4, 4, 7), + (3, 4, 4, 7), + (5, 4, 6, 7), + (7, 4, 7, 17), + ], + ) +} + +#[test] +fn bibtex() -> Result<()> { + check( + r#" +%BIB main.bib +%SRC some junk +%SRC here +%SRC +%SRC @article{foo, +%SRC author = {bar}, +%SRC title = {baz} +%SRC } +%SRC +%SRC @string{foo = "bar"} +%SRC +%SRC @comment{foo, +%SRC author = {bar}, +%SRC title = {baz} +%SRC } +%SRC +%SRC @preamble{"foo"} +%CUR ^ +"#, + vec![(3, 0, 6, 1), (8, 0, 8, 20), (15, 0, 15, 16)], + ) +} |