flp-tsl 0.1.2

Template Script Language
Documentation
#![allow(clippy::should_implement_trait)]

pub mod error;
mod parser;
mod player;

pub use parser::{Line, Script};
pub use player::Player;

#[cfg(test)]
mod tests {
    use std::{collections::HashMap, fs::File, io::BufReader};

    use crate::{error::Result, Player, Script};

    #[test]
    fn sample() -> Result<()> {
        let mut map = HashMap::new();
        map.insert("character_1_name".to_string(), "tester1".to_string());
        map.insert("character_2_name".to_string(), "tester2".to_string());
        map.insert("window_width".to_string(), "1000".to_string());
        map.insert("window_height".to_string(), "800".to_string());

        let script =
            Script::try_from_buf_read(BufReader::new(File::open("./sample/intro.tsl")?), &map)?;
        assert_eq!(script.lines().len(), 6);

        let mut player = Player::new(script);
        let (utilities, output) = player.begin()?;
        assert_eq!(utilities.len(), 0);
        assert_eq!(
            output.expect("No output line found").chars().next(),
            Some('I')
        );

        let (utilities, output) = player.next()?;
        assert_eq!(utilities.len(), 2);
        assert_eq!(output, None);
        println!("{:?}", player);

        Ok(())
    }
}