summaryrefslogtreecommitdiff
path: root/support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs')
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs454
1 files changed, 29 insertions, 425 deletions
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs b/support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs
index 6ac00176b9..e22c9374ad 100644
--- a/support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs
+++ b/support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs
@@ -1,441 +1,45 @@
-use insta::assert_json_snapshot;
-use lsp_types::{
- notification::DidChangeConfiguration, request::DocumentSymbolRequest,
- DidChangeConfigurationParams, DocumentSymbolParams, DocumentSymbolResponse,
-};
+use insta::assert_debug_snapshot;
+use lsp_types::{notification::DidOpenTextDocument, request::DocumentSymbolRequest, *};
use crate::fixture::TestBed;
-fn find_symbols(
- fixture: &str,
- capabilities: serde_json::Value,
- settings: serde_json::Value,
-) -> DocumentSymbolResponse {
- let test_bed = TestBed::new(fixture).unwrap();
-
+#[test]
+fn test_smoke() {
+ let test_bed = TestBed::new("").unwrap();
test_bed
- .initialize(serde_json::from_value(capabilities).unwrap())
+ .initialize(ClientCapabilities {
+ text_document: Some(TextDocumentClientCapabilities {
+ document_symbol: Some(DocumentSymbolClientCapabilities {
+ hierarchical_document_symbol_support: Some(true),
+ ..Default::default()
+ }),
+ ..Default::default()
+ }),
+ ..Default::default()
+ })
.unwrap();
+ let uri = Url::parse("file:///texlab/main.tex").unwrap();
test_bed
.client()
- .send_notification::<DidChangeConfiguration>(DidChangeConfigurationParams { settings })
+ .send_notification::<DidOpenTextDocument>(DidOpenTextDocumentParams {
+ text_document: TextDocumentItem::new(
+ uri.clone(),
+ "latex".into(),
+ 0,
+ r#"\section{Foo} \subsection{Bar} \section{Baz}"#.into(),
+ ),
+ })
.unwrap();
- let text_document = test_bed.cursor().unwrap().text_document;
-
- let mut response = test_bed
+ let Some(DocumentSymbolResponse::Nested(symbols)) = test_bed
.client()
.send_request::<DocumentSymbolRequest>(DocumentSymbolParams {
- text_document,
- work_done_progress_params: Default::default(),
+ text_document: TextDocumentIdentifier { uri },
partial_result_params: Default::default(),
+ work_done_progress_params: Default::default(),
})
- .unwrap()
- .unwrap_or_else(|| DocumentSymbolResponse::Flat(vec![]));
-
- if let DocumentSymbolResponse::Flat(symbols) = &mut response {
- for symbol in symbols {
- symbol.location.uri = test_bed.redact(&symbol.location.uri);
- }
- }
-
- response
-}
-
-#[test]
-fn enumerate_nested() {
- assert_json_snapshot!(find_symbols(
- r#"
-%! main.tex
-\documentclass{article}
-
-\begin{document}
-
-\begin{enumerate}
- \item\label{it:foo} Foo
- \item\label{it:bar} Bar
- \item[Baz] Baz
- \item[Qux]\label{it:qux} Qux
-\end{enumerate}
-
-\end{document}
-|
-
-%! main.aux
-\relax
-\newlabel{it:foo}{{1}{1}}
-\newlabel{it:qux}{{2}{1}}"#,
- serde_json::json!({
- "textDocument": {
- "documentSymbol": {
- "hierarchicalDocumentSymbolSupport": true,
- },
- },
- }),
- serde_json::Value::Null,
- ));
-}
-
-#[test]
-fn enumerate_flat() {
- assert_json_snapshot!(find_symbols(
- r#"
-%! main.tex
-\documentclass{article}
-
-\begin{document}
-
-\begin{enumerate}
- \item\label{it:foo} Foo
- \item\label{it:bar} Bar
- \item[Baz] Baz
- \item[Qux]\label{it:qux} Qux
-\end{enumerate}
-
-\end{document}
-|
-
-%! main.aux
-\relax
-\newlabel{it:foo}{{1}{1}}
-\newlabel{it:qux}{{2}{1}}"#,
- serde_json::json!({}),
- serde_json::Value::Null,
- ));
-}
-
-#[test]
-fn equation_nested() {
- assert_json_snapshot!(find_symbols(
- r#"
-%! main.tex
-\documentclass{article}
-
-\begin{document}
-
-\begin{equation}\label{eq:foo}
- Foo
-\end{equation}
-
-\begin{equation}\label{eq:bar}
- Bar
-\end{equation}
-
-\begin{equation}
- Baz
-\end{equation}
-
-\end{document}
-|
-
-%! main.aux
-\relax
-\newlabel{eq:foo}{{1}{1}}"#,
- serde_json::json!({
- "textDocument": {
- "documentSymbol": {
- "hierarchicalDocumentSymbolSupport": true,
- },
- },
- }),
- serde_json::Value::Null,
- ));
-}
-
-#[test]
-fn equation_flat() {
- assert_json_snapshot!(find_symbols(
- r#"
-%! main.tex
-\documentclass{article}
-
-\begin{document}
-
-\begin{equation}\label{eq:foo}
- Foo
-\end{equation}
-
-\begin{equation}\label{eq:bar}
- Bar
-\end{equation}
-
-\begin{equation}
- Baz
-\end{equation}
-
-\end{document}
-|
-
-%! main.aux
-\relax
-\newlabel{eq:foo}{{1}{1}}"#,
- serde_json::json!({}),
- serde_json::Value::Null,
- ));
-}
-
-#[test]
-fn float_nested() {
- assert_json_snapshot!(find_symbols(
- r#"
-%! main.tex
-\documentclass{article}
-
-\begin{document}
-
-\begin{figure}
- Foo
- \caption{Foo}\label{fig:foo}
-\end{figure}
-
-\begin{figure}
- Bar
- \caption{Bar}\label{fig:bar}
-\end{figure}
-
-\begin{figure}
- Baz
- \caption{Baz}
-\end{figure}
-
-\begin{figure}
- Qux
-\end{figure}
-
-\end{document}
-|
-
-%! main.aux
-\relax
-\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Foo}}{1}\protected@file@percent }
-\newlabel{fig:foo}{{1}{1}}
-\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Bar}}{1}\protected@file@percent }
-\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Baz}}{1}\protected@file@percent }"#,
- serde_json::json!({
- "textDocument": {
- "documentSymbol": {
- "hierarchicalDocumentSymbolSupport": true,
- },
- },
- }),
- serde_json::Value::Null,
- ));
-}
-
-#[test]
-fn float_flat() {
- assert_json_snapshot!(find_symbols(
- r#"
-%! main.tex
-\documentclass{article}
-
-\begin{document}
-
-\begin{figure}
- Foo
- \caption{Foo}\label{fig:foo}
-\end{figure}
-
-\begin{figure}
- Bar
- \caption{Bar}\label{fig:bar}
-\end{figure}
-
-\begin{figure}
- Baz
- \caption{Baz}
-\end{figure}
-
-\begin{figure}
- Qux
-\end{figure}
-
-\end{document}
-|
-
-%! main.aux
-\relax
-\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Foo}}{1}\protected@file@percent }
-\newlabel{fig:foo}{{1}{1}}
-\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Bar}}{1}\protected@file@percent }
-\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Baz}}{1}\protected@file@percent }"#,
- serde_json::json!({}),
- serde_json::Value::Null,
- ));
-}
-
-#[test]
-fn section_nested() {
- assert_json_snapshot!(find_symbols(
- r#"
-%! main.tex
-\documentclass{article}
-
-\begin{document}
-
-\section{Foo}
-
-\section{Bar}\label{sec:bar}
-
-\subsection{Baz}\label{sec:baz}
-
-\end{document}
-|
-
-%! main.aux
-\relax
-\@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
-\@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}\protected@file@percent }
-\newlabel{sec:bar}{{2}{1}}"#,
- serde_json::json!({
- "textDocument": {
- "documentSymbol": {
- "hierarchicalDocumentSymbolSupport": true,
- },
- },
- }),
- serde_json::Value::Null,
- ));
-}
-
-#[test]
-fn section_flat() {
- assert_json_snapshot!(find_symbols(
- r#"
-%! main.tex
-\documentclass{article}
-
-\begin{document}
-
-\section{Foo}
-
-\section{Bar}\label{sec:bar}
-
-\subsection{Baz}\label{sec:baz}
-
-\end{document}
-|
-
-%! main.aux
-\relax
-\@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
-\@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}\protected@file@percent }
-\newlabel{sec:bar}{{2}{1}}"#,
- serde_json::json!({}),
- serde_json::Value::Null,
- ));
-}
-
-#[test]
-fn theorem_nested() {
- assert_json_snapshot!(find_symbols(
- r#"
-%! main.tex
-\documentclass{article}
-\usepackage{amsthm}
-\newtheorem{lemma}{Lemma}
-
-\begin{document}
-
-\begin{lemma}[Foo]\label{thm:foo}
- Foo
-\end{lemma}
-
-\begin{lemma}\label{thm:bar}
- Bar
-\end{lemma}
-
-\begin{lemma}\label{thm:baz}
- Baz
-\end{lemma}
-
-\begin{lemma}[Qux]
- Qux
-\end{lemma}
-
-\end{document}
-|
-
-%! main.aux
-\relax
-\newlabel{thm:foo}{{1}{1}}
-\newlabel{thm:bar}{{2}{1}}"#,
- serde_json::json!({
- "textDocument": {
- "documentSymbol": {
- "hierarchicalDocumentSymbolSupport": true,
- },
- },
- }),
- serde_json::Value::Null,
- ));
-}
-
-#[test]
-fn theorem_flat() {
- assert_json_snapshot!(find_symbols(
- r#"
-%! main.tex
-\documentclass{article}
-\usepackage{amsthm}
-\newtheorem{lemma}{Lemma}
-
-\begin{document}
-
-\begin{lemma}[Foo]\label{thm:foo}
- Foo
-\end{lemma}
-
-\begin{lemma}\label{thm:bar}
- Bar
-\end{lemma}
-
-\begin{lemma}\label{thm:baz}
- Baz
-\end{lemma}
-
-\begin{lemma}[Qux]
- Qux
-\end{lemma}
-
-\end{document}
-|
-
-%! main.aux
-\relax
-\newlabel{thm:foo}{{1}{1}}
-\newlabel{thm:bar}{{2}{1}}"#,
- serde_json::json!({}),
- serde_json::Value::Null,
- ));
-}
-
-#[test]
-fn ignored_patterns() {
- assert_json_snapshot!(find_symbols(
- r#"
-%! main.tex
-\documentclass{article}
-
-\begin{document}
-
-\begin{equation}\label{eq:foo}
- Foo
-\end{equation}
-
-\begin{enumerate}
- \item Foo
- \item Bar
-\end{enumerate}
+ .unwrap() else { unreachable!() };
-\end{document}
-|"#,
- serde_json::json!({}),
- serde_json::json!({
- "symbols": {
- "ignoredPatterns": ["Item", "Enumerate"]
- }
- }),
- ));
+ assert_debug_snapshot!(symbols);
}