1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
use super::*;
use crate::clean::collapse_doc_fragments;
use rustc_span::create_default_session_globals_then;
use rustc_span::source_map::DUMMY_SP;
use rustc_span::symbol::Symbol;
fn create_doc_fragment(s: &str) -> Vec<DocFragment> {
vec![DocFragment {
span: DUMMY_SP,
parent_module: None,
doc: Symbol::intern(s),
kind: DocFragmentKind::SugaredDoc,
indent: 0,
}]
}
#[track_caller]
fn run_test(input: &str, expected: &str) {
create_default_session_globals_then(|| {
let mut s = create_doc_fragment(input);
unindent_doc_fragments(&mut s);
assert_eq!(collapse_doc_fragments(&s), expected);
});
}
#[test]
fn should_unindent() {
run_test(" line1\n line2", "line1\nline2");
}
#[test]
fn should_unindent_multiple_paragraphs() {
run_test(" line1\n\n line2", "line1\n\nline2");
}
#[test]
fn should_leave_multiple_indent_levels() {
// Line 2 is indented another level beyond the
// base indentation and should be preserved
run_test(" line1\n\n line2", "line1\n\n line2");
}
#[test]
fn should_ignore_first_line_indent() {
run_test("line1\n line2", "line1\n line2");
}
#[test]
fn should_not_ignore_first_line_indent_in_a_single_line_para() {
run_test("line1\n\n line2", "line1\n\n line2");
}
#[test]
fn should_unindent_tabs() {
run_test("\tline1\n\tline2", "line1\nline2");
}
#[test]
fn should_trim_mixed_indentation() {
run_test("\t line1\n\t line2", "line1\nline2");
run_test(" \tline1\n \tline2", "line1\nline2");
}
#[test]
fn should_not_trim() {
run_test("\t line1 \n\t line2", "line1 \nline2");
run_test(" \tline1 \n \tline2", "line1 \nline2");
}
|