summaryrefslogtreecommitdiff
path: root/support/texlab/tests/integration/issues.rs
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-05-23 03:00:39 +0000
committerNorbert Preining <norbert@preining.info>2021-05-23 03:00:39 +0000
commitf1261b349e875b842745b63258c3e338cb1fe3bf (patch)
treeb5d402b3e80818cde2c079a42249f3dcb9732247 /support/texlab/tests/integration/issues.rs
parent58aa1ac09b1d9e4769d0a0661cf12e2b2db41b14 (diff)
CTAN sync 202105230300
Diffstat (limited to 'support/texlab/tests/integration/issues.rs')
-rw-r--r--support/texlab/tests/integration/issues.rs389
1 files changed, 40 insertions, 349 deletions
diff --git a/support/texlab/tests/integration/issues.rs b/support/texlab/tests/integration/issues.rs
index 59a1bfeacb..5d6caeb79d 100644
--- a/support/texlab/tests/integration/issues.rs
+++ b/support/texlab/tests/integration/issues.rs
@@ -1,350 +1,41 @@
-use indoc::indoc;
-use texlab::{
- protocol::{HoverContents, Location, LocationLink, MarkupContent, MarkupKind, Range, RangeExt},
- test::{TestBedBuilder, LOCATION_LINK_CAPABILITIES, PULL_CAPABILITIES},
-};
-
-#[tokio::test]
-async fn issue_14() {
- let mut test_bed = TestBedBuilder::new()
- .file("main.tex", r#"\(\be\)"#)
- .build()
- .await;
- test_bed.spawn();
- test_bed.initialize(PULL_CAPABILITIES.clone()).await;
- test_bed.open("main.tex").await;
-
- let actual_items = test_bed.completion("main.tex", 0, 5).await.unwrap();
-
- test_bed.shutdown().await;
- assert!(actual_items.iter().any(|item| item.label == "beta"));
-}
-
-#[tokio::test]
-async fn issue_15_link() {
- let mut test_bed = TestBedBuilder::new()
- .file(
- "main.tex",
- indoc!(
- r#"
- \documentclass{article}
- \begin{document}
- \newcommand{\test}{test}
- hello \test{}
- \end{document}
- "#
- ),
- )
- .build()
- .await;
- test_bed.spawn();
- test_bed
- .initialize(LOCATION_LINK_CAPABILITIES.clone())
- .await;
- test_bed.open("main.tex").await;
-
- let actual_links = test_bed.definition_link("main.tex", 3, 9).await.unwrap();
-
- test_bed.shutdown().await;
- let expected_links = vec![LocationLink {
- origin_selection_range: Some(Range::new_simple(3, 6, 3, 13)),
- target_range: Range::new_simple(2, 0, 2, 24),
- target_selection_range: Range::new_simple(2, 0, 2, 24),
- target_uri: test_bed.uri("main.tex").into(),
- }];
- assert_eq!(actual_links, expected_links);
-}
-
-#[tokio::test]
-async fn issue_15_location() {
- let mut test_bed = TestBedBuilder::new()
- .file(
- "main.tex",
- indoc!(
- r#"
- \documentclass{article}
- \begin{document}
- \newcommand{\test}{test}
- hello \test{}
- \end{document}
- "#
- ),
- )
- .build()
- .await;
- test_bed.spawn();
- test_bed.initialize(PULL_CAPABILITIES.clone()).await;
- test_bed.open("main.tex").await;
-
- let actual_locations = test_bed
- .definition_location("main.tex", 3, 9)
- .await
- .unwrap();
-
- test_bed.shutdown().await;
- let expected_locations = vec![Location {
- range: Range::new_simple(2, 0, 2, 24),
- uri: test_bed.uri("main.tex").into(),
- }];
- assert_eq!(actual_locations, expected_locations);
-}
-
-#[tokio::test]
-async fn issue_17() {
- let mut test_bed = TestBedBuilder::new()
- .file("main.bib", r#"@ARTICLE{foo,}"#)
- .build()
- .await;
- test_bed.spawn();
- test_bed.initialize(PULL_CAPABILITIES.clone()).await;
- test_bed.open("main.bib").await;
-
- let actual_hover = test_bed.hover("main.bib", 0, 3).await.unwrap().unwrap();
-
- test_bed.shutdown().await;
- assert_eq!(actual_hover.range.unwrap(), Range::new_simple(0, 0, 0, 8));
-}
-
-#[tokio::test]
-async fn issue_21() {
- let mut test_bed = TestBedBuilder::new()
- .file(
- "main.tex",
- indoc!(
- r#"
- \label{foo}
- \cref{}
- "#
- ),
- )
- .build()
- .await;
- test_bed.spawn();
- test_bed.initialize(PULL_CAPABILITIES.clone()).await;
- test_bed.open("main.tex").await;
-
- let actual_items = test_bed.completion("main.tex", 1, 6).await.unwrap();
-
- test_bed.shutdown().await;
- assert!(actual_items.iter().any(|item| item.label == "foo"));
-}
-
-#[tokio::test]
-async fn issue_22_include() {
- let mut test_bed = TestBedBuilder::new()
- .file(
- "main.tex",
- indoc!(
- r#"
- \bibliography{bibfile}
- \cite{}
- "#
- ),
- )
- .file("bibfile.bib", r#"@article{foo,}"#)
- .build()
- .await;
-
- test_bed.spawn();
- test_bed.initialize(PULL_CAPABILITIES.clone()).await;
- test_bed.open("main.tex").await;
-
- let actual_items = test_bed.completion("main.tex", 1, 6).await.unwrap();
-
- test_bed.shutdown().await;
- assert!(actual_items.iter().any(|item| item.label == "foo"));
-}
-
-#[tokio::test]
-async fn issue_22_definition() {
- let mut test_bed = TestBedBuilder::new()
- .file(
- "main.tex",
- indoc!(
- r#"
- \bibliography{bibfile}
- \cite{A,B}
- "#
- ),
- )
- .file(
- "bibfile.bib",
- indoc!(
- r#"
- @article{A,}
- @article{B,}
- "#
- ),
- )
- .build()
- .await;
-
- test_bed.spawn();
- test_bed.initialize(PULL_CAPABILITIES.clone()).await;
- test_bed.open("main.tex").await;
-
- let actual_locations = test_bed
- .definition_location("main.tex", 1, 8)
- .await
- .unwrap();
-
- test_bed.shutdown().await;
- let expected_locations = vec![Location {
- range: Range::new_simple(1, 9, 1, 10),
- uri: test_bed.uri("bibfile.bib").into(),
- }];
- assert_eq!(actual_locations, expected_locations);
-}
-
-#[tokio::test]
-async fn issue_23_completion() {
- let mut test_bed = TestBedBuilder::new()
- .file(
- "main.tex",
- indoc!(
- r#"
- \documentclass{article}
- \begin{document}
- \include{test1}
- \include{test2}
- \end{document}
- "#
- ),
- )
- .file("test1.tex", r#"\section{Section 1}\label{sec:1}"#)
- .file(
- "test2.tex",
- indoc!(
- r#"
- \section{Section 2}\label{sec:2}
- %
- This section continues from Section \ref{sec}"#
- ),
- )
- .build()
- .await;
- test_bed.spawn();
- test_bed.initialize(PULL_CAPABILITIES.clone()).await;
- test_bed.open("test2.tex").await;
- test_bed.detect_root("test2.tex").await;
-
- let actual_items = test_bed.completion("test2.tex", 2, 42).await.unwrap();
-
- test_bed.shutdown().await;
- assert_eq!(actual_items.len(), 2);
-}
-
-#[tokio::test]
-async fn issue_23_rename() {
- let mut test_bed = TestBedBuilder::new()
- .file(
- "main.tex",
- indoc!(
- r#"
- \documentclass{article}
- \begin{document}
- \include{test1}
- \include{test2}
- \end{document}
- "#
- ),
- )
- .file("test1.tex", r#"\section{Section 1}\label{sec:1}"#)
- .file(
- "test2.tex",
- indoc!(
- r#"
- \section{Section 2}\label{sec:2}
- %
- This section continues from Section \ref{sec:1}"#
- ),
- )
- .build()
- .await;
- test_bed.spawn();
- test_bed.initialize(PULL_CAPABILITIES.clone()).await;
- test_bed.open("test1.tex").await;
- test_bed.detect_root("test1.tex").await;
-
- let workspace_edit = test_bed
- .rename("test1.tex", 0, 27, "foo")
- .await
- .unwrap()
- .unwrap();
-
- test_bed.shutdown().await;
- let changes = workspace_edit.changes.unwrap();
- assert!(changes.contains_key(&test_bed.uri("test1.tex")));
- assert!(changes.contains_key(&test_bed.uri("test2.tex")));
-}
-
-#[tokio::test]
-async fn issue_23_hover() {
- let mut test_bed = TestBedBuilder::new()
- .file(
- "main.tex",
- indoc!(
- r#"
- \documentclass{article}
- \begin{document}
- \include{test1}
- \include{test2}
- \end{document}
- "#
- ),
- )
- .file("test1.tex", r#"\section{Section 1}\label{sec:1}"#)
- .file(
- "test2.tex",
- indoc!(
- r#"
- \section{Section 2}\label{sec:2}
- %
- This section continues from Section \ref{sec:1}"#
- ),
- )
- .build()
- .await;
- test_bed.spawn();
- test_bed.initialize(PULL_CAPABILITIES.clone()).await;
- test_bed.open("test2.tex").await;
- test_bed.detect_root("test2.tex").await;
-
- let actual_hover = test_bed.hover("test2.tex", 2, 42).await.unwrap().unwrap();
-
- test_bed.shutdown().await;
- assert_eq!(
- actual_hover.contents,
- HoverContents::Markup(MarkupContent {
- kind: MarkupKind::PlainText,
- value: "Section (Section 1)".into()
- })
- );
-}
-
-#[tokio::test]
-async fn issue_26() {
- let mut test_bed = TestBedBuilder::new()
- .file(
- "main.tex",
- indoc!(
- r#"
- \section{Foo}\label{sec:foo}
- \begin{equation}\label{eq:bar}
- \end{equation}
- \eqref{}
- "#
- ),
- )
- .build()
- .await;
- test_bed.spawn();
- test_bed.initialize(PULL_CAPABILITIES.clone()).await;
- test_bed.open("main.tex").await;
-
- let actual_items = test_bed.completion("main.tex", 3, 7).await.unwrap();
-
- test_bed.shutdown().await;
- assert!(actual_items.iter().any(|item| item.label == "eq:bar"));
- assert!(actual_items.iter().all(|item| item.label != "sec:foo"));
+use std::{fs, thread, time::Duration};
+
+use anyhow::Result;
+use lsp_types::ClientCapabilities;
+
+use crate::common::ServerTester;
+
+#[test]
+#[cfg(feature = "completion")]
+fn test_408_parent_expansion() -> Result<()> {
+ let server = ServerTester::launch_new_instance()?;
+ server.initialize(ClientCapabilities::default(), None)?;
+ let root = server.directory.path();
+
+ let level1 = root.join("level1");
+ let level2 = level1.join("level2");
+ let level3 = level2.join("level3");
+ fs::create_dir_all(&level3)?;
+ fs::write(level3.join("d.tex"), "d")?;
+ fs::write(
+ level2.join("c.tex"),
+ r#"\documentclass{subfiles}\begin{document}\include{level3/d}\end{document}"#,
+ )?;
+ fs::write(
+ level1.join("b.tex"),
+ r#"\documentclass{article}\begin{document}\include{level2/c}\end{document}"#,
+ )?;
+ fs::write(root.join("a.tex"), "}")?;
+
+ thread::sleep(Duration::from_millis(300));
+
+ let uri = server.open("level1/level2/level3/d.tex", "d", "latex", false)?;
+ server.complete(uri, 0, 0)?;
+
+ let diagnostics_by_uri = server.diagnostics_by_uri.lock().unwrap();
+ assert!(diagnostics_by_uri
+ .iter()
+ .all(|(uri, _)| !uri.as_str().ends_with("a.tex")));
+
+ Ok(())
}