diff options
Diffstat (limited to 'support/texlab/tests/lsp/text_document/formatting.rs')
-rw-r--r-- | support/texlab/tests/lsp/text_document/formatting.rs | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/support/texlab/tests/lsp/text_document/formatting.rs b/support/texlab/tests/lsp/text_document/formatting.rs new file mode 100644 index 0000000000..295022c76a --- /dev/null +++ b/support/texlab/tests/lsp/text_document/formatting.rs @@ -0,0 +1,134 @@ +use insta::assert_snapshot; +use lsp_types::{ + request::Formatting, ClientCapabilities, DocumentFormattingParams, FormattingOptions, +}; +use texlab::util::{line_index::LineIndex, line_index_ext::LineIndexExt}; + +use crate::fixture::TestBed; + +fn format(fixture: &str) -> String { + let test_bed = TestBed::new(fixture).unwrap(); + test_bed.initialize(ClientCapabilities::default()).unwrap(); + + let text_document = test_bed.cursor().unwrap().text_document; + let edits = test_bed + .client() + .send_request::<Formatting>(DocumentFormattingParams { + text_document, + work_done_progress_params: Default::default(), + options: FormattingOptions { + insert_spaces: true, + tab_size: 4, + ..Default::default() + }, + }) + .unwrap() + .unwrap_or_default(); + + let old_text = &test_bed.documents()[0].text; + let line_index = LineIndex::new(old_text); + let mut new_text = String::from(old_text); + for edit in edits.into_iter().rev() { + let range = line_index.offset_lsp_range(edit.range); + new_text.replace_range::<std::ops::Range<usize>>(range.into(), &edit.new_text); + } + + new_text +} + +#[test] +fn bibtex_internal_wrap_long_lines() { + assert_snapshot!(format( + r#" +%! main.bib +@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. +Lorem ipsum dolor sit amet, +consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},} +|"#, + )); +} + +#[test] +fn bibtex_internal_multiple_entries() { + assert_snapshot!(format( + r#" +%! main.bib +@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, +consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},} + +@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, +consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}" +|"#, + )); +} + +#[test] +fn bibtex_internal_trailing_comma() { + assert_snapshot!(format( + r#" +%! main.bib +@article{foo, bar = baz} +|"#, + )); +} + +#[test] +fn bibtex_internal_insert_braces() { + assert_snapshot!(format( + r#" +%! main.bib +@article{foo, bar = baz, +|"#, + )); +} + +#[test] +fn bibtex_internal_command() { + assert_snapshot!(format( + r#" +%! main.bib +@article{foo, bar = "\baz",} +|"#, + )); +} + +#[test] +fn bibtex_internal_join_strings() { + assert_snapshot!(format( + r#" +%! main.bib +@article{foo, bar = "baz" # "qux"} +|"#, + )); +} + +#[test] +fn bibtex_internal_parens() { + assert_snapshot!(format( + r#" +%! main.bib +@article(foo,) +|"#, + )); +} + +#[test] +fn bibtex_internal_string() { + assert_snapshot!(format( + r#" +%! main.bib +@string{foo="bar"} +|"#, + )); +} + +#[test] +fn bibtex_internal_preamble() { + assert_snapshot!(format( + r#" +%! main.bib +@preamble{ + "foo bar baz" } +|"#, + )); +} |