mirror of
https://git.proxmox.com/git/rustc
synced 2025-10-21 07:58:06 +00:00
408 lines
13 KiB
Rust
408 lines
13 KiB
Rust
use annotate_snippets::display_list::DisplayList;
|
|
use annotate_snippets::{display_list as dl, formatter::get_term_style, snippet};
|
|
|
|
#[test]
|
|
fn test_format_title() {
|
|
let input = snippet::Snippet {
|
|
title: Some(snippet::Annotation {
|
|
id: Some("E0001"),
|
|
label: Some("This is a title"),
|
|
annotation_type: snippet::AnnotationType::Error,
|
|
}),
|
|
footer: vec![],
|
|
slices: vec![],
|
|
opt: Default::default(),
|
|
};
|
|
let output = dl::DisplayList {
|
|
body: vec![dl::DisplayLine::Raw(dl::DisplayRawLine::Annotation {
|
|
annotation: dl::Annotation {
|
|
annotation_type: dl::DisplayAnnotationType::Error,
|
|
id: Some("E0001"),
|
|
label: vec![dl::DisplayTextFragment {
|
|
content: "This is a title",
|
|
style: dl::DisplayTextStyle::Emphasis,
|
|
}],
|
|
},
|
|
source_aligned: false,
|
|
continuation: false,
|
|
})],
|
|
stylesheet: get_term_style(input.opt.color),
|
|
anonymized_line_numbers: input.opt.anonymized_line_numbers,
|
|
margin: None,
|
|
};
|
|
assert_eq!(dl::DisplayList::from(input), output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_format_slice() {
|
|
let line_1 = "This is line 1";
|
|
let line_2 = "This is line 2";
|
|
let source = vec![line_1, line_2].join("\n");
|
|
let input = snippet::Snippet {
|
|
title: None,
|
|
footer: vec![],
|
|
slices: vec![snippet::Slice {
|
|
source: &source,
|
|
line_start: 5402,
|
|
origin: None,
|
|
annotations: vec![],
|
|
fold: false,
|
|
}],
|
|
opt: Default::default(),
|
|
};
|
|
let output = dl::DisplayList {
|
|
body: vec![
|
|
dl::DisplayLine::Source {
|
|
lineno: None,
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Empty,
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: Some(5402),
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Content {
|
|
text: line_1,
|
|
range: (0, line_1.len()),
|
|
},
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: Some(5403),
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Content {
|
|
range: (line_1.len() + 1, source.len()),
|
|
text: line_2,
|
|
},
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: None,
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Empty,
|
|
},
|
|
],
|
|
stylesheet: get_term_style(input.opt.color),
|
|
anonymized_line_numbers: input.opt.anonymized_line_numbers,
|
|
margin: None,
|
|
};
|
|
assert_eq!(dl::DisplayList::from(input), output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_format_slices_continuation() {
|
|
let src_0 = "This is slice 1";
|
|
let src_0_len = src_0.len();
|
|
let src_1 = "This is slice 2";
|
|
let src_1_len = src_1.len();
|
|
let input = snippet::Snippet {
|
|
title: None,
|
|
footer: vec![],
|
|
slices: vec![
|
|
snippet::Slice {
|
|
source: src_0,
|
|
line_start: 5402,
|
|
origin: Some("file1.rs"),
|
|
annotations: vec![],
|
|
fold: false,
|
|
},
|
|
snippet::Slice {
|
|
source: src_1,
|
|
line_start: 2,
|
|
origin: Some("file2.rs"),
|
|
annotations: vec![],
|
|
fold: false,
|
|
},
|
|
],
|
|
opt: Default::default(),
|
|
};
|
|
let output = dl::DisplayList {
|
|
body: vec![
|
|
dl::DisplayLine::Raw(dl::DisplayRawLine::Origin {
|
|
path: "file1.rs",
|
|
pos: None,
|
|
header_type: dl::DisplayHeaderType::Initial,
|
|
}),
|
|
dl::DisplayLine::Source {
|
|
lineno: None,
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Empty,
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: Some(5402),
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Content {
|
|
text: src_0,
|
|
range: (0, src_0_len),
|
|
},
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: None,
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Empty,
|
|
},
|
|
dl::DisplayLine::Raw(dl::DisplayRawLine::Origin {
|
|
path: "file2.rs",
|
|
pos: None,
|
|
header_type: dl::DisplayHeaderType::Continuation,
|
|
}),
|
|
dl::DisplayLine::Source {
|
|
lineno: None,
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Empty,
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: Some(2),
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Content {
|
|
text: src_1,
|
|
range: (0, src_1_len),
|
|
},
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: None,
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Empty,
|
|
},
|
|
],
|
|
stylesheet: get_term_style(input.opt.color),
|
|
anonymized_line_numbers: input.opt.anonymized_line_numbers,
|
|
margin: None,
|
|
};
|
|
assert_eq!(dl::DisplayList::from(input), output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_format_slice_annotation_standalone() {
|
|
let line_1 = "This is line 1";
|
|
let line_2 = "This is line 2";
|
|
let source = vec![line_1, line_2].join("\n");
|
|
// In line 2
|
|
let range = (22, 24);
|
|
let input = snippet::Snippet {
|
|
title: None,
|
|
footer: vec![],
|
|
slices: vec![snippet::Slice {
|
|
source: &source,
|
|
line_start: 5402,
|
|
origin: None,
|
|
annotations: vec![snippet::SourceAnnotation {
|
|
range,
|
|
label: "Test annotation",
|
|
annotation_type: snippet::AnnotationType::Info,
|
|
}],
|
|
fold: false,
|
|
}],
|
|
opt: Default::default(),
|
|
};
|
|
let output = dl::DisplayList {
|
|
body: vec![
|
|
dl::DisplayLine::Source {
|
|
lineno: None,
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Empty,
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: Some(5402),
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Content {
|
|
range: (0, line_1.len()),
|
|
text: line_1,
|
|
},
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: Some(5403),
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Content {
|
|
range: (line_1.len() + 1, source.len()),
|
|
text: line_2,
|
|
},
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: None,
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Annotation {
|
|
annotation: dl::Annotation {
|
|
annotation_type: dl::DisplayAnnotationType::Info,
|
|
id: None,
|
|
label: vec![dl::DisplayTextFragment {
|
|
content: "Test annotation",
|
|
style: dl::DisplayTextStyle::Regular,
|
|
}],
|
|
},
|
|
range: (range.0 - (line_1.len() + 1), range.1 - (line_1.len() + 1)),
|
|
annotation_type: dl::DisplayAnnotationType::Info,
|
|
annotation_part: dl::DisplayAnnotationPart::Standalone,
|
|
},
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: None,
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Empty,
|
|
},
|
|
],
|
|
stylesheet: get_term_style(input.opt.color),
|
|
anonymized_line_numbers: input.opt.anonymized_line_numbers,
|
|
margin: None,
|
|
};
|
|
assert_eq!(dl::DisplayList::from(input), output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_format_label() {
|
|
let input = snippet::Snippet {
|
|
title: None,
|
|
footer: vec![snippet::Annotation {
|
|
id: None,
|
|
label: Some("This __is__ a title"),
|
|
annotation_type: snippet::AnnotationType::Error,
|
|
}],
|
|
slices: vec![],
|
|
opt: Default::default(),
|
|
};
|
|
let output = dl::DisplayList {
|
|
body: vec![dl::DisplayLine::Raw(dl::DisplayRawLine::Annotation {
|
|
annotation: dl::Annotation {
|
|
annotation_type: dl::DisplayAnnotationType::Error,
|
|
id: None,
|
|
label: vec![
|
|
dl::DisplayTextFragment {
|
|
content: "This ",
|
|
style: dl::DisplayTextStyle::Regular,
|
|
},
|
|
dl::DisplayTextFragment {
|
|
content: "is",
|
|
style: dl::DisplayTextStyle::Emphasis,
|
|
},
|
|
dl::DisplayTextFragment {
|
|
content: " a title",
|
|
style: dl::DisplayTextStyle::Regular,
|
|
},
|
|
],
|
|
},
|
|
source_aligned: true,
|
|
continuation: false,
|
|
})],
|
|
stylesheet: get_term_style(input.opt.color),
|
|
anonymized_line_numbers: input.opt.anonymized_line_numbers,
|
|
margin: None,
|
|
};
|
|
assert_eq!(dl::DisplayList::from(input), output);
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn test_i26() {
|
|
let source = "short";
|
|
let label = "label";
|
|
let input = snippet::Snippet {
|
|
title: None,
|
|
footer: vec![],
|
|
slices: vec![snippet::Slice {
|
|
annotations: vec![snippet::SourceAnnotation {
|
|
range: (0, source.len() + 1),
|
|
label,
|
|
annotation_type: snippet::AnnotationType::Error,
|
|
}],
|
|
source,
|
|
line_start: 0,
|
|
origin: None,
|
|
fold: false,
|
|
}],
|
|
opt: Default::default(),
|
|
};
|
|
|
|
let _ = dl::DisplayList::from(input);
|
|
}
|
|
|
|
#[test]
|
|
fn test_i_29() {
|
|
let snippets = snippet::Snippet {
|
|
title: Some(snippet::Annotation {
|
|
id: None,
|
|
label: Some("oops"),
|
|
annotation_type: snippet::AnnotationType::Error,
|
|
}),
|
|
footer: vec![],
|
|
slices: vec![snippet::Slice {
|
|
source: "First line\r\nSecond oops line",
|
|
line_start: 1,
|
|
origin: Some("<current file>"),
|
|
annotations: vec![snippet::SourceAnnotation {
|
|
range: (19, 23),
|
|
label: "oops",
|
|
annotation_type: snippet::AnnotationType::Error,
|
|
}],
|
|
fold: true,
|
|
}],
|
|
opt: Default::default(),
|
|
};
|
|
|
|
let expected = DisplayList {
|
|
body: vec![
|
|
dl::DisplayLine::Raw(dl::DisplayRawLine::Annotation {
|
|
annotation: dl::Annotation {
|
|
annotation_type: dl::DisplayAnnotationType::Error,
|
|
id: None,
|
|
label: vec![dl::DisplayTextFragment {
|
|
content: "oops",
|
|
style: dl::DisplayTextStyle::Emphasis,
|
|
}],
|
|
},
|
|
source_aligned: false,
|
|
continuation: false,
|
|
}),
|
|
dl::DisplayLine::Raw(dl::DisplayRawLine::Origin {
|
|
path: "<current file>",
|
|
pos: Some((2, 8)),
|
|
header_type: dl::DisplayHeaderType::Initial,
|
|
}),
|
|
dl::DisplayLine::Source {
|
|
lineno: None,
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Empty,
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: Some(1),
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Content {
|
|
text: "First line",
|
|
range: (0, 10),
|
|
},
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: Some(2),
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Content {
|
|
text: "Second oops line",
|
|
range: (12, 28),
|
|
},
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: None,
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Annotation {
|
|
annotation: dl::Annotation {
|
|
annotation_type: dl::DisplayAnnotationType::None,
|
|
id: None,
|
|
label: vec![dl::DisplayTextFragment {
|
|
content: "oops",
|
|
style: dl::DisplayTextStyle::Regular,
|
|
}],
|
|
},
|
|
range: (7, 11),
|
|
annotation_type: dl::DisplayAnnotationType::Error,
|
|
annotation_part: dl::DisplayAnnotationPart::Standalone,
|
|
},
|
|
},
|
|
dl::DisplayLine::Source {
|
|
lineno: None,
|
|
inline_marks: vec![],
|
|
line: dl::DisplaySourceLine::Empty,
|
|
},
|
|
],
|
|
stylesheet: get_term_style(false),
|
|
anonymized_line_numbers: false,
|
|
margin: None,
|
|
};
|
|
|
|
assert_eq!(DisplayList::from(snippets), expected);
|
|
}
|