use std::default::Default; use easy_sgr::{CleanKind, Color::*, ColorKind, EasySGR, SGRString, Style::*, StyleKind}; #[test] fn general() { assert_eq!("", SGRString::default().to_string()); assert_eq!( "test\x1b[0m", String::from("test").clean(CleanKind::Reset).to_string() ); assert_eq!( "", (&String::default()).clean(CleanKind::Reverse).to_string() ); assert_eq!( "\x1b[31;1m", SGRString { bold: StyleKind::Place, foreground: ColorKind::Red, ..Default::default() } .to_string() ); assert_eq!( "\x1b[31;1mtest", SGRString { text: String::from("test"), bold: StyleKind::Place, foreground: ColorKind::Red, ..Default::default() } .to_string() ); } #[test] fn fully_loaded() { assert_eq!( "\x1b[0;31;41;1;2;3;4;5;7;8;9;100mtest\x1b[39;49;22;22;23;24;25;27;28;29;100m", SGRString { text: "test".to_string(), clean: CleanKind::Reverse, custom_places: vec![100], custom_cleans: vec![100], foreground: ColorKind::Red, background: ColorKind::Red, reset: true, bold: StyleKind::Place, dim: StyleKind::Place, italic: StyleKind::Place, underline: StyleKind::Place, blinking: StyleKind::Place, inverse: StyleKind::Place, hidden: StyleKind::Place, strikethrough: StyleKind::Place } .to_string() ); assert_eq!( "\x1b[0;31;41;22;22;23;24;25;27;28;29;100mtest\x1b[39;49;1;2;3;4;5;7;8;9;100m", SGRString { text: "test".to_string(), clean: CleanKind::Reverse, custom_places: vec![100], custom_cleans: vec![100], foreground: ColorKind::Red, background: ColorKind::Red, reset: true, bold: StyleKind::Clean, dim: StyleKind::Clean, italic: StyleKind::Clean, underline: StyleKind::Clean, blinking: StyleKind::Clean, inverse: StyleKind::Clean, hidden: StyleKind::Clean, strikethrough: StyleKind::Clean } .to_string() ); } #[test] fn colors() { for (correct, color) in [ ("", ColorKind::None), ("\x1b[30;40m", ColorKind::Black), ("\x1b[31;41m", ColorKind::Red), ("\x1b[32;42m", ColorKind::Green), ("\x1b[33;43m", ColorKind::Yellow), ("\x1b[34;44m", ColorKind::Blue), ("\x1b[35;45m", ColorKind::Magenta), ("\x1b[36;46m", ColorKind::Cyan), ("\x1b[37;47m", ColorKind::White), ("\x1b[38;5;208;48;5;208m", ColorKind::Byte(208)), ( "\x1b[38;2;208;208;208;48;2;208;208;208m", ColorKind::Rgb(208, 208, 208), ), ("\x1b[39;49m", ColorKind::Default), ] { assert_eq!( correct, SGRString { foreground: color.clone(), background: color, ..Default::default() } .to_string() ) } } #[test] fn easy_sgr() { assert_eq!("test", "test".to_sgr().to_string()); assert_eq!("test", "".text("test").to_string()); assert_eq!("\x1b[100mtest", "test".custom(100).to_string()); assert_eq!("\x1b[100mtest", "test".custom_place(100).to_string()); assert_eq!("test\x1b[100m", "test".custom_clean(100).to_string()); assert_eq!("\x1b[31;3m", Italic.color(RedFg).to_string()); assert_eq!("\x1b[31;3m", RedFg.style(Italic).to_string()); } #[test] fn easy_sgr_style() { for (correct, style) in [ ("\x1b[0m", Reset), ("\x1b[1m", Bold), ("\x1b[2m", Dim), ("\x1b[3m", Italic), ("\x1b[4m", Underline), ("\x1b[5m", Blinking), ("\x1b[7m", Inverse), ("\x1b[8m", Hidden), ("\x1b[9m", Strikethrough), ("\x1b[22m", NotBold), ("\x1b[22m", NotDim), ("\x1b[23m", NotItalic), ("\x1b[24m", NotUnderline), ("\x1b[25m", NotBlinking), ("\x1b[27m", NotInverse), ("\x1b[28m", NotHidden), ("\x1b[29m", NotStrikethrough), ] { assert_eq!(correct, "".style(style).to_string()); } } #[test] fn easy_sgr_color() { for (correct, color) in [ ("\x1b[30m", BlackFg), ("\x1b[31m", RedFg), ("\x1b[32m", GreenFg), ("\x1b[33m", YellowFg), ("\x1b[34m", BlueFg), ("\x1b[35m", MagentaFg), ("\x1b[36m", CyanFg), ("\x1b[37m", WhiteFg), ("\x1b[38;5;208m", ByteFg(208)), ("\x1b[38;2;208;208;208m", RgbFg(208, 208, 208)), ("\x1b[39m", DefaultFg), ("\x1b[40m", BlackBg), ("\x1b[41m", RedBg), ("\x1b[42m", GreenBg), ("\x1b[43m", YellowBg), ("\x1b[44m", BlueBg), ("\x1b[45m", MagentaBg), ("\x1b[46m", CyanBg), ("\x1b[47m", WhiteBg), ("\x1b[48;5;208m", ByteBg(208)), ("\x1b[48;2;208;208;208m", RgbBg(208, 208, 208)), ("\x1b[49m", DefaultBg), ] { assert_eq!(correct, "".color(color).to_string()) } }