use std::str::FromStr;
use aisling::{Color, Effect, EffectConfig, EffectKind, Frame, Gradient, GradientDirection};
fn final_plain(frame: &Frame) -> String {
frame.to_plain_string()
}
#[test]
fn exposes_effect_catalog() {
assert_eq!(EffectKind::all().len(), 37);
for kind in EffectKind::all() {
assert_eq!(EffectKind::from_str(kind.name()).unwrap(), *kind);
}
assert_eq!(
EffectKind::from_str("orbiting-volley").unwrap(),
EffectKind::OrbittingVolley
);
}
#[test]
fn every_effect_finishes_on_input_text() {
let config = EffectConfig::default().with_duration(12).with_seed(123);
for kind in EffectKind::all() {
let effect = Effect::with_config(*kind, "Hi\nRS", config.clone());
let frames = effect.frames();
assert_eq!(frames.len(), config.duration, "{kind}");
assert_eq!(final_plain(frames.last().unwrap()), "Hi\nRS", "{kind}");
}
}
#[test]
fn ansi_input_is_parsed_and_final_text_is_plain() {
let config = EffectConfig::default().with_duration(4).with_seed(1);
let frame = Effect::with_config(EffectKind::Print, "\x1b[31mRed\x1b[0m", config).final_frame();
assert_eq!(frame.to_plain_string(), "Red");
assert!(frame.cell(0, 0).unwrap().colors.fg.is_some());
}
#[test]
fn gradient_maps_coordinates() {
let gradient = Gradient::new(vec![Color::BLACK, Color::WHITE], 4);
assert_eq!(
gradient.coordinate_color(0, 0, 5, 1, GradientDirection::Horizontal),
Color::BLACK
);
assert_eq!(
gradient.coordinate_color(4, 0, 5, 1, GradientDirection::Horizontal),
Color::WHITE
);
}