#[cfg(feature = "macros")]
mod macros {
use std::fmt::Write;
use easy_sgr::{eprint, eprintln, format, format_args, print, println, sgr, write, writeln};
macro_rules! sgr_tests {
($($input:tt = $result:literal),*) => {
$(
assert_eq!(sgr!($input), $result);
)*
};
}
#[test]
fn general() {
sgr_tests!(
"" = "",
"{[]}" = "\x1b[0m",
"{[reset bold]}" = "\x1b[0;1m",
"{[!bold]}" = "\x1b[22m",
"{[0,0,0 on-0,0,0]}" = "\x1b[38;2;0;0;0;48;2;0;0;0m",
"{[#00 on-#00]}" = "\x1b[38;5;0;48;5;0m",
"{{[]}" = "{[]}"
);
}
#[test]
fn raw_strings() {
sgr_tests!(
r"Not much to test for this one maybe, this can't really fail" =
"Not much to test for this one maybe, this can't really fail"
);
}
#[test]
fn styles() {
sgr_tests!(
"{[reset]}" = "\x1b[0m",
"{[bold]}" = "\x1b[1m",
"{[dim]}" = "\x1b[2m",
"{[italic]}" = "\x1b[3m",
"{[underline]}" = "\x1b[4m",
"{[blink]}" = "\x1b[5m",
"{[inverse]}" = "\x1b[7m",
"{[hide]}" = "\x1b[8m",
"{[strike]}" = "\x1b[9m",
"{[!bold]}" = "\x1b[22m",
"{[!dim]}" = "\x1b[22m",
"{[!italic]}" = "\x1b[23m",
"{[!underline]}" = "\x1b[24m",
"{[!blink]}" = "\x1b[25m",
"{[!inverse]}" = "\x1b[27m",
"{[!hide]}" = "\x1b[28m",
"{[!strike]}" = "\x1b[29m"
);
}
#[test]
fn standard_colors() {
sgr_tests!(
"{[black]}" = "\x1b[30m",
"{[red]}" = "\x1b[31m",
"{[green]}" = "\x1b[32m",
"{[yellow]}" = "\x1b[33m",
"{[blue]}" = "\x1b[34m",
"{[magenta]}" = "\x1b[35m",
"{[cyan]}" = "\x1b[36m",
"{[white]}" = "\x1b[37m",
"{[default]}" = "\x1b[39m",
"{[on-black]}" = "\x1b[40m",
"{[on-red]}" = "\x1b[41m",
"{[on-green]}" = "\x1b[42m",
"{[on-yellow]}" = "\x1b[43m",
"{[on-blue]}" = "\x1b[44m",
"{[on-magenta]}" = "\x1b[45m",
"{[on-cyan]}" = "\x1b[46m",
"{[on-white]}" = "\x1b[47m",
"{[on-default]}" = "\x1b[49m"
);
}
#[test]
fn byte_color() {
sgr_tests!(
"{[0]}" = "\x1b[38;5;0m",
"{[on-0]}" = "\x1b[48;5;0m",
"{[255]}" = "\x1b[38;5;255m",
"{[on-255]}" = "\x1b[48;5;255m",
"{[#00]}" = "\x1b[38;5;0m",
"{[on-#00]}" = "\x1b[48;5;0m",
"{[#ff]}" = "\x1b[38;5;255m",
"{[on-#ff]}" = "\x1b[48;5;255m"
);
}
#[test]
fn rgb_color() {
sgr_tests!(
"{[0,0,0]}" = "\x1b[38;2;0;0;0m",
"{[on-0,0,0]}" = "\x1b[48;2;0;0;0m",
"{[255,255,255]}" = "\x1b[38;2;255;255;255m",
"{[on-255,255,255]}" = "\x1b[48;2;255;255;255m",
"{[#000000]}" = "\x1b[38;2;0;0;0m",
"{[on-#000000]}" = "\x1b[48;2;0;0;0m",
"{[#ffffff]}" = "\x1b[38;2;255;255;255m",
"{[on-#ffffff]}" = "\x1b[48;2;255;255;255m"
);
}
#[test]
fn etc() {
let formatted = format!("Normal{[green]} now this is green{[]} and this is not");
let from_args = std::fmt::format(format_args!(
"Normal{[green]} now this is green{[]} and this is not"
));
let mut written_to = String::new();
writeln!(written_to).unwrap();
write!(
written_to,
"Normal{[green]} now this is green{[]} and this is not"
)
.unwrap();
writeln!(written_to).unwrap();
println!();
print!("Normal{[green]} now this is green{[]} and this is not");
println!();
eprintln!();
eprint!("Normal{[green]} now this is green{[]} and this is not");
eprintln!();
assert_eq!(
formatted,
"Normal\u{1b}[32m now this is green\u{1b}[0m and this is not"
);
assert_eq!(
from_args,
"Normal\u{1b}[32m now this is green\u{1b}[0m and this is not"
);
assert_eq!(
written_to,
"\nNormal\u{1b}[32m now this is green\u{1b}[0m and this is not\n"
);
}
}