blob: a3bedb21cd00e4628beea1ad832df3e3cf62d9e4 [file]
#![expect(rustc::symbol_intern_string_literal)] // for unit-testing
use std::path::PathBuf;
use rustc_ast::AttrStyle;
use rustc_span::source_map::{FilePathMapping, SourceMap};
use rustc_span::{BytePos, DUMMY_SP, FileName, Span, Symbol};
use super::{DocFragment, DocFragmentKind, source_span_for_markdown_range_inner};
fn filename(sm: &SourceMap, path: &str) -> FileName {
FileName::Real(sm.path_mapping().to_real_filename(sm.working_dir(), PathBuf::from(path)))
}
#[test]
fn single_backtick() {
rustc_span::create_session_if_not_set_then(rustc_span::edition::DEFAULT_EDITION, |_| {
let sm = SourceMap::new(FilePathMapping::empty());
sm.new_source_file(filename(&sm, "foo.rs"), r#"#[doc = "`"] fn foo() {}"#.to_string());
let (span, _) = source_span_for_markdown_range_inner(
&sm,
"`",
&(0..1),
&[DocFragment {
span: Span::with_root_ctxt(BytePos(8), BytePos(11)),
item_id: None,
kind: DocFragmentKind::Raw(DUMMY_SP),
doc: Symbol::intern("`"),
indent: 0,
from_expansion: false,
style: AttrStyle::Outer,
}],
)
.unwrap();
assert_eq!(span.lo(), BytePos(9));
assert_eq!(span.hi(), BytePos(10));
});
}
#[test]
fn utf8() {
rustc_span::create_session_if_not_set_then(rustc_span::edition::DEFAULT_EDITION, |_| {
// regression test for https://github.com/rust-lang/rust/issues/141665
let sm = SourceMap::new(FilePathMapping::empty());
sm.new_source_file(filename(&sm, "foo.rs"), r#"#[doc = "⚠"] fn foo() {}"#.to_string());
let (span, _) = source_span_for_markdown_range_inner(
&sm,
"⚠",
&(0..3),
&[DocFragment {
span: Span::with_root_ctxt(BytePos(8), BytePos(14)),
item_id: None,
kind: DocFragmentKind::Raw(DUMMY_SP),
doc: Symbol::intern("⚠"),
indent: 0,
from_expansion: false,
style: AttrStyle::Outer,
}],
)
.unwrap();
assert_eq!(span.lo(), BytePos(9));
assert_eq!(span.hi(), BytePos(12));
});
}