diff options
Diffstat (limited to 'support/texlab/tests/integration/lsp/text_document/document_link.rs')
-rw-r--r-- | support/texlab/tests/integration/lsp/text_document/document_link.rs | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/support/texlab/tests/integration/lsp/text_document/document_link.rs b/support/texlab/tests/integration/lsp/text_document/document_link.rs new file mode 100644 index 0000000000..1a773fd478 --- /dev/null +++ b/support/texlab/tests/integration/lsp/text_document/document_link.rs @@ -0,0 +1,73 @@ +use anyhow::Result; +use assert_unordered::assert_eq_unordered; +use lsp_types::{ + request::DocumentLinkRequest, ClientCapabilities, DocumentLink, DocumentLinkParams, + TextDocumentIdentifier, +}; + +use crate::lsp::{client::Client, fixture}; + +fn check(fixture: &str) -> 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 mut expected_links = Vec::new(); + for ranges in fixture.ranges.values() { + expected_links.push(DocumentLink { + range: ranges[&1].range, + target: Some(client.uri(ranges[&2].name)?), + tooltip: None, + data: None, + }); + } + + let actual_links = client + .request::<DocumentLinkRequest>(DocumentLinkParams { + 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()?; + + assert_eq_unordered!(actual_links, expected_links); + Ok(()) +} + +#[test] +fn document_include() -> Result<()> { + check( + r#" +%TEX foo.tex +%SRC \input{bar.tex} +%1.1 ^^^^^^^ +%CUR ^ + +%TEX bar.tex +%SRC +%1.2 +"#, + ) +} + +#[test] +fn document_import() -> Result<()> { + check( + r#" +%TEX foo.tex +%SRC \import{bar/}{baz} +%1.1 ^^^ +%CUR ^ + +%TEX bar/baz.tex +%SRC +%1.2 +"#, + ) +} |