summaryrefslogtreecommitdiff
path: root/support/texlab/tests/integration/lsp/text_document/formatting.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/tests/integration/lsp/text_document/formatting.rs')
-rw-r--r--support/texlab/tests/integration/lsp/text_document/formatting.rs148
1 files changed, 148 insertions, 0 deletions
diff --git a/support/texlab/tests/integration/lsp/text_document/formatting.rs b/support/texlab/tests/integration/lsp/text_document/formatting.rs
new file mode 100644
index 0000000000..a0c02bf4b1
--- /dev/null
+++ b/support/texlab/tests/integration/lsp/text_document/formatting.rs
@@ -0,0 +1,148 @@
+use anyhow::Result;
+use insta::assert_snapshot;
+use lsp_types::{
+ request::Formatting, ClientCapabilities, DocumentFormattingParams, FormattingOptions,
+ TextDocumentIdentifier,
+};
+use texlab::{LineIndex, LineIndexExt};
+
+use crate::lsp::{client::Client, fixture};
+
+fn format(fixture: &str) -> Result<String> {
+ let mut client = Client::spawn()?;
+ client.initialize(ClientCapabilities::default(), None)?;
+
+ let fixture = fixture::parse(fixture);
+ let file = fixture.files.into_iter().next().unwrap();
+ let old_text = file.text.clone();
+ client.open(file.name, file.lang, file.text)?;
+
+ let actual_edits = client
+ .request::<Formatting>(DocumentFormattingParams {
+ text_document: TextDocumentIdentifier::new(client.uri(file.name)?),
+ work_done_progress_params: Default::default(),
+ options: FormattingOptions {
+ insert_spaces: true,
+ tab_size: 4,
+ ..Default::default()
+ },
+ })?
+ .unwrap_or_default();
+
+ client.shutdown()?;
+
+ let line_index = LineIndex::new(&old_text);
+ let mut actual_text = old_text;
+ for edit in actual_edits.into_iter().rev() {
+ let range = line_index.offset_lsp_range(edit.range);
+ actual_text.replace_range::<std::ops::Range<usize>>(range.into(), &edit.new_text);
+ }
+
+ Ok(actual_text)
+}
+
+#[test]
+fn bibtex_internal_wrap_long_lines() -> Result<()> {
+ assert_snapshot!(format(
+ r#"
+%BIB main.bib
+%SRC @article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+%SRC Lorem ipsum dolor sit amet,
+%SRC consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}"#,
+ )?);
+
+ Ok(())
+}
+
+#[test]
+fn bibtex_internal_multiple_entries() -> Result<()> {
+ assert_snapshot!(format(
+ r#"
+%BIB main.bib
+%SRC @article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet,
+%SRC consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}
+%SRC
+%SRC @article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet,
+%SRC consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}""#,
+ )?);
+
+ Ok(())
+}
+
+#[test]
+fn bibtex_internal_trailing_comma() -> Result<()> {
+ assert_snapshot!(format(
+ r#"
+%BIB main.bib
+%SRC @article{foo, bar = baz}"#,
+ )?);
+
+ Ok(())
+}
+
+#[test]
+fn bibtex_internal_insert_braces() -> Result<()> {
+ assert_snapshot!(format(
+ r#"
+%BIB main.bib
+%SRC @article{foo, bar = baz,"#,
+ )?);
+
+ Ok(())
+}
+
+#[test]
+fn bibtex_internal_command() -> Result<()> {
+ assert_snapshot!(format(
+ r#"
+%BIB main.bib
+%SRC @article{foo, bar = "\baz",}"#,
+ )?);
+
+ Ok(())
+}
+
+#[test]
+fn bibtex_internal_join_strings() -> Result<()> {
+ assert_snapshot!(format(
+ r#"
+%BIB main.bib
+%SRC @article{foo, bar = "baz" # "qux"}"#,
+ )?);
+
+ Ok(())
+}
+
+#[test]
+fn bibtex_internal_parens() -> Result<()> {
+ assert_snapshot!(format(
+ r#"
+%BIB main.bib
+%SRC @article(foo,)"#,
+ )?);
+
+ Ok(())
+}
+
+#[test]
+fn bibtex_internal_string() -> Result<()> {
+ assert_snapshot!(format(
+ r#"
+%BIB main.bib
+%SRC @string{foo="bar"}"#,
+ )?);
+
+ Ok(())
+}
+
+#[test]
+fn bibtex_internal_preamble() -> Result<()> {
+ assert_snapshot!(format(
+ r#"
+%BIB main.bib
+%SRC @preamble{
+%SRC "foo bar baz" }"#,
+ )?);
+
+ Ok(())
+}