blob: ee7c0068eb44d216e8ea0d3c6f3a4344ba753662 [file] [log] [blame]
use super::*;
use rustc_resolve::rustdoc::{unindent_doc_fragments, DocFragment, DocFragmentKind};
use rustc_span::symbol::Symbol;
use rustc_span::{create_default_session_globals_then, DUMMY_SP};
fn create_doc_fragment(s: &str) -> Vec<DocFragment> {
vec![DocFragment {
span: DUMMY_SP,
item_id: 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);
let attrs = Attributes { doc_strings: s, other_attrs: Default::default() };
assert_eq!(attrs.doc_value(), 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");
}
#[test]
fn is_same_generic() {
use crate::clean::types::{PrimitiveType, Type};
use crate::formats::cache::Cache;
let cache = Cache::new(false, false);
let generic = Type::Generic(rustc_span::symbol::sym::Any);
let unit = Type::Primitive(PrimitiveType::Unit);
assert!(!generic.is_doc_subtype_of(&unit, &cache));
assert!(unit.is_doc_subtype_of(&generic, &cache));
}