pub struct Color;
impl Color {
pub const RESET: &'static str = "\x1b[0m";
pub const BLACK: &'static str = "\x1b[30m";
pub const RED: &'static str = "\x1b[31m";
pub const GREEN: &'static str = "\x1b[32m";
pub const YELLOW: &'static str = "\x1b[33m";
pub const BLUE: &'static str = "\x1b[34m";
pub const MAGENTA: &'static str = "\x1b[35m";
pub const CYAN: &'static str = "\x1b[36m";
pub const WHITE: &'static str = "\x1b[37m";
pub const BRIGHT_BLACK: &'static str = "\x1b[90m";
pub const BRIGHT_RED: &'static str = "\x1b[91m";
pub const BRIGHT_GREEN: &'static str = "\x1b[92m";
pub const BRIGHT_YELLOW: &'static str = "\x1b[93m";
pub const BRIGHT_BLUE: &'static str = "\x1b[94m";
pub const BRIGHT_MAGENTA: &'static str = "\x1b[95m";
pub const BRIGHT_CYAN: &'static str = "\x1b[96m";
pub const BRIGHT_WHITE: &'static str = "\x1b[97m";
pub const BOLD: &'static str = "\x1b[1m";
pub const UNDERLINE: &'static str = "\x1b[4m";
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_color_constants_are_correct() {
assert_eq!(Color::RESET, "\x1b[0m");
assert_eq!(Color::RED, "\x1b[31m");
assert_eq!(Color::BLUE, "\x1b[34m");
assert_eq!(Color::BOLD, "\x1b[1m");
}
#[test]
fn test_color_combination() {
let bold_red = format!("{}{}", Color::BOLD, Color::RED);
assert_eq!(bold_red, "\x1b[1m\x1b[31m");
let bold_red_reset = format!("{}{}test{}", Color::BOLD, Color::RED, Color::RESET);
assert_eq!(bold_red_reset, "\x1b[1m\x1b[31mtest\x1b[0m");
}
#[test]
fn test_bright_colors() {
assert_eq!(Color::BRIGHT_GREEN, "\x1b[92m");
assert_eq!(Color::BRIGHT_YELLOW, "\x1b[93m");
assert_ne!(Color::GREEN, Color::BRIGHT_GREEN);
assert_ne!(Color::MAGENTA, Color::BRIGHT_MAGENTA);
}
#[test]
fn test_styles() {
assert_eq!(Color::BOLD, "\x1b[1m");
assert_eq!(Color::UNDERLINE, "\x1b[4m");
let bold_underline = format!("{}{}", Color::BOLD, Color::UNDERLINE);
assert_eq!(bold_underline, "\x1b[1m\x1b[4m");
}
}