use erebus::{Files, Identifier, Label, Message, NoFile, Style};
use yansi::Paint;
static MESSAGES: &[&str] = &[
"This is a test message.",
"This is a test message, but it has more text so that it is longer, and will likely cause a text break on most terminals. This has been a test message.",
];
pub struct TestFiles;
impl<'a> Files<'a> for TestFiles {
type FileId = usize;
type Content = &'a str;
fn name(&self, id: &'a Self::FileId) -> Option<&'a str> {
match id {
0 => Some("hello.rs"),
1 => Some("stringtable.xml"),
_ => None,
}
}
fn content(&self, id: &'a Self::FileId) -> Option<Self::Content> {
match id {
0 => Some(include_str!("../tests/test_files/hello.rs")),
1 => Some(include_str!("../tests/test_files/stringtable.xml")),
_ => None,
}
}
}
#[test]
fn only_message() {
for message in MESSAGES {
let message = Message::builder((*message).to_string())
.build()
.render(&NoFile, &Style::default());
insta::assert_snapshot!(message);
}
}
#[test]
fn only_severity() {
for message in MESSAGES {
let message = Message::builder((*message).to_string())
.set_severity(erebus::Severity::Error)
.build()
.render(&NoFile, &Style::default());
insta::assert_snapshot!(message);
}
}
#[test]
fn only_identifier() {
for message in MESSAGES {
let message = Message::builder((*message).to_string())
.set_identifier(Identifier::simple("test".to_string()))
.build()
.render(&NoFile, &Style::default());
insta::assert_snapshot!(message);
}
}
#[test]
fn only_identifier_url() {
for message in MESSAGES {
let message = Message::builder((*message).to_string())
.set_identifier(Identifier::hyperlink(
"test".to_string(),
"https://github.com/brettmayson/erebus".to_string(),
))
.build()
.render(&NoFile, &Style::default());
insta::assert_snapshot!(message);
}
}
#[test]
fn only_severity_identifier() {
for message in MESSAGES {
let message = Message::builder((*message).to_string())
.set_severity(erebus::Severity::Warning)
.set_identifier(Identifier::simple("test".to_string()))
.build()
.render(&NoFile, &Style::default());
insta::assert_snapshot!(message);
}
}
#[test]
fn simple_label() {
let message = Message::builder_file("This is a test message.".to_string())
.set_severity(erebus::Severity::Error)
.set_identifier(Identifier::simple("test".to_string()))
.add_label(
Label::builder(0, 15..21)
.set_color(erebus::Color::Green)
.set_content("Parameter Type".to_string())
.build(),
)
.build()
.render(&TestFiles, &Style::default());
insta::assert_snapshot!(message);
}
#[test]
fn simple_label_two() {
let message = Message::builder_file("This is a test message.".to_string())
.set_severity(erebus::Severity::Error)
.set_identifier(Identifier::simple("test".to_string()))
.add_label(
Label::builder(0, 15..21)
.set_color(erebus::Color::Green)
.set_content("Param".to_string())
.build(),
)
.add_label(
Label::builder(0, 26..32)
.set_color(erebus::Color::Magenta)
.set_content("Return".to_string())
.build(),
)
.build()
.render(&TestFiles, &Style::default());
insta::assert_snapshot!(message);
}
#[test]
fn nested_label_color() {
let message = Message::builder_file("This is a test message.".to_string())
.set_severity(erebus::Severity::Error)
.set_identifier(Identifier::simple("test".to_string()))
.add_label(
Label::builder(0, 15..21)
.set_color(erebus::Color::Green)
.set_content("Param".to_string())
.build(),
)
.add_label(
Label::builder(0, 26..32)
.set_color(erebus::Color::Magenta)
.set_content("Return".to_string())
.build(),
)
.add_label(
Label::builder(0, 17..18)
.set_color(erebus::Color::Yellow)
.build(),
)
.build()
.render(&TestFiles, &Style::default());
insta::assert_snapshot!(message);
}
#[test]
fn nested_label_message() {
let message = Message::builder_file("This is a test message.".to_string())
.set_severity(erebus::Severity::Error)
.set_identifier(Identifier::simple("test".to_string()))
.add_label(
Label::builder(0, 15..21)
.set_color(erebus::Color::Green)
.set_content("Param".to_string())
.build(),
)
.add_label(
Label::builder(0, 26..32)
.set_color(erebus::Color::Magenta)
.set_content("Return".to_string())
.build(),
)
.add_label(
Label::builder(0, 17..18)
.set_color(erebus::Color::Yellow)
.set_content("R".to_string())
.build(),
)
.build()
.render(&TestFiles, &Style::default());
insta::assert_snapshot!(message);
}
#[test]
fn simple_label_two_lines() {
let message = Message::builder_file("This is a test message.".to_string())
.set_severity(erebus::Severity::Error)
.set_identifier(Identifier::simple("test".to_string()))
.add_label(
Label::builder(0, 15..21)
.set_color(erebus::Color::Green)
.set_content("Parameter Type".to_string())
.build(),
)
.add_label(
Label::builder(0, 49..54)
.set_color(erebus::Color::Yellow)
.set_content("oh hi".to_string())
.build(),
)
.build()
.render(&TestFiles, &Style::default());
insta::assert_snapshot!(message);
}
#[test]
fn multi_file() {
let message = Message::builder_file("This is a test message.".to_string())
.set_severity(erebus::Severity::Error)
.set_identifier(Identifier::simple("test".to_string()))
.add_label(
Label::builder(0, 15..21)
.set_color(erebus::Color::Green)
.set_content("Parameter Type".to_string())
.build(),
)
.add_label(
Label::builder(1, 480..483)
.set_color(erebus::Color::Yellow)
.set_content(format!("Korean for {}", "building".yellow()))
.build(),
)
.build()
.render(&TestFiles, &Style::default());
insta::assert_snapshot!(message);
}
#[test]
fn only_note() {
for message in MESSAGES {
let message = Message::builder_file("This is a test message.".to_string())
.set_severity(erebus::Severity::Error)
.set_identifier(Identifier::simple("test".to_string()))
.add_note(
erebus::Note::builder(
(*message).to_string(),
Identifier::simple("note".to_string()),
)
.build(),
)
.build()
.render(&NoFile, &Style::default());
insta::assert_snapshot!(message);
}
}