summaryrefslogtreecommitdiff
path: root/support/texlab/tests/integration/lsp/text_document/references.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/tests/integration/lsp/text_document/references.rs')
-rw-r--r--support/texlab/tests/integration/lsp/text_document/references.rs275
1 files changed, 275 insertions, 0 deletions
diff --git a/support/texlab/tests/integration/lsp/text_document/references.rs b/support/texlab/tests/integration/lsp/text_document/references.rs
new file mode 100644
index 0000000000..ff272673dd
--- /dev/null
+++ b/support/texlab/tests/integration/lsp/text_document/references.rs
@@ -0,0 +1,275 @@
+use anyhow::Result;
+use assert_unordered::assert_eq_unordered;
+use lsp_types::{
+ request::References, ClientCapabilities, Location, ReferenceContext, ReferenceParams,
+};
+
+use crate::lsp::{client::Client, fixture};
+
+fn check(fixture: &str, context: ReferenceContext) -> 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_locations = Vec::new();
+ for ranges in fixture.ranges.values() {
+ expected_locations.push(Location::new(
+ client.uri(ranges[&1].name)?,
+ ranges[&1].range,
+ ));
+ }
+
+ let actual_locations = client
+ .request::<References>(ReferenceParams {
+ text_document_position: fixture.cursor.unwrap().into_params(&client)?,
+ context,
+ partial_result_params: Default::default(),
+ work_done_progress_params: Default::default(),
+ })?
+ .unwrap_or_default();
+
+ client.shutdown()?;
+
+ assert_eq_unordered!(actual_locations, expected_locations);
+ Ok(())
+}
+
+#[test]
+fn entry_definition() -> Result<()> {
+ check(
+ r#"
+%BIB foo.bib
+%SRC @article{foo,}
+%CUR ^
+
+%TEX bar.tex
+%SRC \cite{foo}
+%1.1 ^^^
+%SRC \addbibresource{foo.bib}
+"#,
+ ReferenceContext {
+ include_declaration: false,
+ },
+ )
+}
+
+#[test]
+fn entry_definition_include_decl() -> Result<()> {
+ check(
+ r#"
+%BIB foo.bib
+%SRC @article{foo,}
+%CUR ^
+%2.1 ^^^
+
+%TEX bar.tex
+%SRC \cite{foo}
+%1.1 ^^^
+%SRC \addbibresource{foo.bib}
+"#,
+ ReferenceContext {
+ include_declaration: true,
+ },
+ )
+}
+
+#[test]
+fn entry_reference() -> Result<()> {
+ check(
+ r#"
+%BIB foo.bib
+%SRC @article{foo,}
+
+%TEX bar.tex
+%SRC \cite{foo}
+%CUR ^
+%1.1 ^^^
+%SRC \addbibresource{foo.bib}
+"#,
+ ReferenceContext {
+ include_declaration: false,
+ },
+ )
+}
+
+#[test]
+fn entry_reference_include_decl() -> Result<()> {
+ check(
+ r#"
+%BIB foo.bib
+%SRC @article{foo,}
+%2.1 ^^^
+
+%TEX bar.tex
+%SRC \cite{foo}
+%CUR ^
+%1.1 ^^^
+%SRC \addbibresource{foo.bib}
+"#,
+ ReferenceContext {
+ include_declaration: true,
+ },
+ )
+}
+
+#[test]
+fn label_definition() -> Result<()> {
+ check(
+ r#"
+%TEX foo.tex
+%SRC \label{foo}
+%CUR ^
+
+%TEX bar.tex
+%SRC \ref{foo}
+%1.1 ^^^
+%SRC \input{foo.tex}
+"#,
+ ReferenceContext {
+ include_declaration: false,
+ },
+ )
+}
+
+#[test]
+fn label_definition_include_decl() -> Result<()> {
+ check(
+ r#"
+%TEX foo.tex
+%SRC \label{foo}
+%CUR ^
+%2.1 ^^^
+
+%TEX bar.tex
+%SRC \ref{foo}
+%1.1 ^^^
+%SRC \input{foo.tex}
+"#,
+ ReferenceContext {
+ include_declaration: true,
+ },
+ )
+}
+
+#[test]
+fn label_reference() -> Result<()> {
+ check(
+ r#"
+%TEX foo.tex
+%SRC \label{foo}
+%SRC \input{bar.tex}
+
+%TEX bar.tex
+%SRC \ref{foo}
+%CUR ^
+%1.1 ^^^
+
+%TEX baz.tex
+%SRC \ref{foo}
+%2.1 ^^^
+%SRC \input{bar.tex}
+"#,
+ ReferenceContext {
+ include_declaration: false,
+ },
+ )
+}
+
+#[test]
+fn label_reference_include_decl() -> Result<()> {
+ check(
+ r#"
+%TEX foo.tex
+%SRC \label{foo}
+%3.1 ^^^
+%SRC \input{bar.tex}
+
+%TEX bar.tex
+%SRC \ref{foo}
+%CUR ^
+%1.1 ^^^
+
+%TEX baz.tex
+%SRC \ref{foo}
+%2.1 ^^^
+%SRC \input{bar.tex}
+"#,
+ ReferenceContext {
+ include_declaration: true,
+ },
+ )
+}
+
+#[test]
+fn string_reference() -> Result<()> {
+ check(
+ r#"
+%BIB main.bib
+%SRC @string{foo = {Foo}}
+%SRC @string{bar = {Bar}}
+%SRC @article{baz, author = foo}
+%CUR ^
+%1.1 ^^^
+"#,
+ ReferenceContext {
+ include_declaration: false,
+ },
+ )
+}
+
+#[test]
+fn string_reference_include_decl() -> Result<()> {
+ check(
+ r#"
+%BIB main.bib
+%SRC @string{foo = {Foo}}
+%2.1 ^^^
+%SRC @string{bar = {Bar}}
+%SRC @article{baz, author = foo}
+%CUR ^
+%1.1 ^^^
+"#,
+ ReferenceContext {
+ include_declaration: true,
+ },
+ )
+}
+
+#[test]
+fn string_definition() -> Result<()> {
+ check(
+ r#"
+%BIB main.bib
+%SRC @string{foo = {Foo}}
+%CUR ^
+%SRC @string{bar = {Bar}}
+%SRC @article{baz, author = foo}
+%1.1 ^^^
+"#,
+ ReferenceContext {
+ include_declaration: false,
+ },
+ )
+}
+
+#[test]
+fn string_definition_include_decl() -> Result<()> {
+ check(
+ r#"
+%BIB main.bib
+%SRC @string{foo = {Foo}}
+%CUR ^
+%2.1 ^^^
+%SRC @string{bar = {Bar}}
+%SRC @article{baz, author = foo}
+%1.1 ^^^
+"#,
+ ReferenceContext {
+ include_declaration: true,
+ },
+ )
+}