diff options
author | Norbert Preining <norbert@preining.info> | 2021-05-23 03:00:39 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2021-05-23 03:00:39 +0000 |
commit | f1261b349e875b842745b63258c3e338cb1fe3bf (patch) | |
tree | b5d402b3e80818cde2c079a42249f3dcb9732247 /support/texlab/tests/integration/issues.rs | |
parent | 58aa1ac09b1d9e4769d0a0661cf12e2b2db41b14 (diff) |
CTAN sync 202105230300
Diffstat (limited to 'support/texlab/tests/integration/issues.rs')
-rw-r--r-- | support/texlab/tests/integration/issues.rs | 389 |
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(()) } |