summaryrefslogtreecommitdiff
path: root/support/texlab/tests/lsp/workspace/symbol.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/tests/lsp/workspace/symbol.rs')
-rw-r--r--support/texlab/tests/lsp/workspace/symbol.rs124
1 files changed, 124 insertions, 0 deletions
diff --git a/support/texlab/tests/lsp/workspace/symbol.rs b/support/texlab/tests/lsp/workspace/symbol.rs
new file mode 100644
index 0000000000..e726ed6860
--- /dev/null
+++ b/support/texlab/tests/lsp/workspace/symbol.rs
@@ -0,0 +1,124 @@
+use insta::assert_json_snapshot;
+use lsp_types::{
+ request::WorkspaceSymbolRequest, ClientCapabilities, SymbolInformation, WorkspaceSymbolParams,
+ WorkspaceSymbolResponse,
+};
+
+use crate::fixture::TestBed;
+
+fn find_symbols(fixture: &str, query: &str) -> Vec<SymbolInformation> {
+ let test_bed = TestBed::new(fixture).unwrap();
+
+ test_bed.initialize(ClientCapabilities::default()).unwrap();
+
+ let mut symbols = match test_bed
+ .client()
+ .send_request::<WorkspaceSymbolRequest>(WorkspaceSymbolParams {
+ query: query.to_string(),
+ work_done_progress_params: Default::default(),
+ partial_result_params: Default::default(),
+ })
+ .unwrap()
+ {
+ Some(WorkspaceSymbolResponse::Flat(symbols)) => symbols,
+ Some(WorkspaceSymbolResponse::Nested(_)) => unreachable!(),
+ None => Vec::new(),
+ };
+
+ for symbol in &mut symbols {
+ symbol.location.uri = test_bed.redact(&symbol.location.uri);
+ }
+
+ symbols
+}
+
+const FIXTURE: &str = r#"
+%! main.tex
+\documentclass{article}
+\usepackage{caption}
+\usepackage{amsmath}
+\usepackage{amsthm}
+
+\begin{document}
+
+\section{Foo}\label{sec:foo}
+
+\begin{equation}\label{eq:foo}
+ Foo
+\end{equation}
+
+\section{Bar}\label{sec:bar}
+
+\begin{figure}
+ Bar
+ \caption{Bar}
+ \label{fig:bar}
+\end{figure}
+
+\section{Baz}\label{sec:baz}
+
+\begin{enumerate}
+ \item\label{itm:foo} Foo
+ \item\label{itm:bar} Bar
+ \item\label{itm:baz} Baz
+\end{enumerate}
+
+\section{Qux}\label{sec:qux}
+
+\newtheorem{lemma}{Lemma}
+
+\begin{lemma}[Qux]\label{thm:qux}
+ Qux
+\end{lemma}
+
+\end{document}
+|
+
+%! main.aux
+\relax
+\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Bar\relax }}{1}\protected@file@percent }
+\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
+\newlabel{fig:bar}{{1}{1}}
+\@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
+\newlabel{sec:foo}{{1}{1}}
+\newlabel{eq:foo}{{1}{1}}
+\@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}\protected@file@percent }
+\newlabel{sec:bar}{{2}{1}}
+\@writefile{toc}{\contentsline {section}{\numberline {3}Baz}{1}\protected@file@percent }
+\newlabel{sec:baz}{{3}{1}}
+\newlabel{itm:foo}{{1}{1}}
+\newlabel{itm:bar}{{2}{1}}
+\newlabel{itm:baz}{{3}{1}}
+\@writefile{toc}{\contentsline {section}{\numberline {4}Qux}{1}\protected@file@percent }
+\newlabel{sec:qux}{{4}{1}}
+\newlabel{thm:qux}{{1}{1}}
+
+%! main.bib
+@article{foo,}
+
+@string{bar = "bar"}"#;
+
+#[test]
+fn filter_type_section() {
+ assert_json_snapshot!(find_symbols(FIXTURE, "section"));
+}
+
+#[test]
+fn filter_type_figure() {
+ assert_json_snapshot!(find_symbols(FIXTURE, "figure"));
+}
+
+#[test]
+fn filter_type_item() {
+ assert_json_snapshot!(find_symbols(FIXTURE, "item"));
+}
+
+#[test]
+fn filter_type_math() {
+ assert_json_snapshot!(find_symbols(FIXTURE, "math"));
+}
+
+#[test]
+fn filter_bibtex() {
+ assert_json_snapshot!(find_symbols(FIXTURE, "bibtex"));
+}