From b4c35368f41c36484cfa7679acb53d40ffbcce35 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 26 Oct 2020 15:01:57 +0100 Subject: [PATCH] Add test for doc comments unindent fix --- .../passes/unindent_comments/tests.rs | 60 +++++++++---------- src/test/rustdoc/unindent.rs | 23 +++++++ 2 files changed, 51 insertions(+), 32 deletions(-) create mode 100644 src/test/rustdoc/unindent.rs diff --git a/src/librustdoc/passes/unindent_comments/tests.rs b/src/librustdoc/passes/unindent_comments/tests.rs index c39c03e1249..5c1307b6628 100644 --- a/src/librustdoc/passes/unindent_comments/tests.rs +++ b/src/librustdoc/passes/unindent_comments/tests.rs @@ -1,26 +1,38 @@ use super::*; +use rustc_span::source_map::DUMMY_SP; + +fn create_doc_fragment(s: &str) -> Vec { + vec![DocFragment { + line: 0, + span: DUMMY_SP, + parent_module: None, + doc: s.to_string(), + kind: DocFragmentKind::SugaredDoc, + }] +} + +#[track_caller] +fn run_test(input: &str, expected: &str) { + let mut s = create_doc_fragment(input); + unindent_fragments(&mut s); + assert_eq!(s[0].doc, expected); +} #[test] fn should_unindent() { - let s = " line1\n line2".to_string(); - let r = unindent(&s); - assert_eq!(r, "line1\nline2"); + run_test(" line1\n line2", "line1\nline2"); } #[test] fn should_unindent_multiple_paragraphs() { - let s = " line1\n\n line2".to_string(); - let r = unindent(&s); - assert_eq!(r, "line1\n\nline2"); + 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 - let s = " line1\n\n line2".to_string(); - let r = unindent(&s); - assert_eq!(r, "line1\n\n line2"); + run_test(" line1\n\n line2", "line1\n\n line2"); } #[test] @@ -30,43 +42,27 @@ fn should_ignore_first_line_indent() { // // #[doc = "Start way over here // and continue here"] - let s = "line1\n line2".to_string(); - let r = unindent(&s); - assert_eq!(r, "line1\nline2"); + run_test("line1\n line2", "line1\nline2"); } #[test] fn should_not_ignore_first_line_indent_in_a_single_line_para() { - let s = "line1\n\n line2".to_string(); - let r = unindent(&s); - assert_eq!(r, "line1\n\n line2"); + run_test("line1\n\n line2", "line1\n\n line2"); } #[test] fn should_unindent_tabs() { - let s = "\tline1\n\tline2".to_string(); - let r = unindent(&s); - assert_eq!(r, "line1\nline2"); + run_test("\tline1\n\tline2", "line1\nline2"); } #[test] fn should_trim_mixed_indentation() { - let s = "\t line1\n\t line2".to_string(); - let r = unindent(&s); - assert_eq!(r, "line1\nline2"); - - let s = " \tline1\n \tline2".to_string(); - let r = unindent(&s); - assert_eq!(r, "line1\nline2"); + run_test("\t line1\n\t line2", "line1\nline2"); + run_test(" \tline1\n \tline2", "line1\nline2"); } #[test] fn should_not_trim() { - let s = "\t line1 \n\t line2".to_string(); - let r = unindent(&s); - assert_eq!(r, "line1 \nline2"); - - let s = " \tline1 \n \tline2".to_string(); - let r = unindent(&s); - assert_eq!(r, "line1 \nline2"); + run_test("\t line1 \n\t line2", "line1 \nline2"); + run_test(" \tline1 \n \tline2", "line1 \nline2"); } diff --git a/src/test/rustdoc/unindent.rs b/src/test/rustdoc/unindent.rs new file mode 100644 index 00000000000..5e3d71ae7d0 --- /dev/null +++ b/src/test/rustdoc/unindent.rs @@ -0,0 +1,23 @@ +#![crate_name = "foo"] + +// @has foo/struct.Example.html +// @matches - '//pre[@class="rust rust-example-rendered"]' \ +// '(?m)let example = Example::new\(\)\n \.first\(\)\n \.second\(\)\n \.build\(\);\Z' +/// ```rust +/// let example = Example::new() +/// .first() +#[cfg_attr(not(feature = "one"), doc = " .second()")] +/// .build(); +/// ``` +pub struct Example; + +// @has foo/struct.F.html +// @matches - '//pre[@class="rust rust-example-rendered"]' \ +// '(?m)let example = Example::new\(\)\n \.first\(\)\n \.another\(\)\n \.build\(\);\Z' +///```rust +///let example = Example::new() +/// .first() +#[cfg_attr(not(feature = "one"), doc = " .another()")] +/// .build(); +/// ``` +pub struct F;