nixterm 0.1.2

A terminal library for rust
Documentation
mod argument;
pub mod executor;
pub mod parser;
pub mod printf;

pub use self::argument::*;
pub use self::executor::Executor;

#[cfg(test)]
mod tests {
    use terminfo::lang::printf::*;
    use terminfo::lang::*;

    #[test]
    fn printf() {
        let mut buffer = Vec::new();
        PrintfArgs::parse(b"s")
            .unwrap()
            .print(&mut buffer, Some("Hello World!"))
            .unwrap();
        assert_eq!(&buffer, &b"Hello World!");

        buffer.clear();
        PrintfArgs::parse(b"d")
            .unwrap()
            .print(&mut buffer, Some(12))
            .unwrap();
        assert_eq!(&buffer, &b"12");

        buffer.clear();
        PrintfArgs::parse(b": d")
            .unwrap()
            .print(&mut buffer, Some(12))
            .unwrap();
        assert_eq!(&buffer, &b" 12");

        buffer.clear();
        PrintfArgs::parse(b"d")
            .unwrap()
            .print(&mut buffer, Some(i64::max_value()))
            .unwrap();
        assert_eq!(&buffer, b"9223372036854775807");
        buffer.clear();

        PrintfArgs::parse(b":-5d")
            .unwrap()
            .print(&mut buffer, Some(21))
            .unwrap();
        assert_eq!(&buffer, b"21   ");
        buffer.clear();

        PrintfArgs::parse(b".1d")
            .unwrap()
            .print(&mut buffer, Some(21))
            .unwrap();
        assert_eq!(&buffer, b"2");
        buffer.clear();

        PrintfArgs::parse(b".4s")
            .unwrap()
            .print(&mut buffer, Some("Crop Me"))
            .unwrap();
        assert_eq!(&buffer, b"Crop");
        buffer.clear();

        PrintfArgs::parse(b"9.4s")
            .unwrap()
            .print(&mut buffer, Some("Crop Me"))
            .unwrap();
        assert_eq!(&buffer, b"     Crop");
        buffer.clear();

        PrintfArgs::parse(b":-9.4d")
            .unwrap()
            .print(&mut buffer, Some(99))
            .unwrap();
        assert_eq!(&buffer, b"99       ");
        buffer.clear();

        PrintfArgs::parse(b":-9.4d")
            .unwrap()
            .print(&mut buffer, Some(99999))
            .unwrap();
        assert_eq!(&buffer, b"9999     ");
    }

    #[test]
    fn simple() {
        let mut buffer = Vec::new();
        Executor::new(b"%p1%p2%+%d")
            .arg(30)
            .arg(2)
            .write(&mut buffer)
            .unwrap();
        assert_eq!(&buffer, b"32");
        buffer.clear();

        Executor::new(b"%{8}%{22}%+%d%'c'%c")
            .write(&mut buffer)
            .unwrap();
        assert_eq!(&buffer, b"30c");
        buffer.clear();

        Executor::new(b"%p1%p2%+/%d%p1%.1d")
            .arg(40)
            .arg(20)
            .write(&mut buffer)
            .unwrap();
        assert_eq!(&buffer, b"/604");
        buffer.clear();

        Executor::new(b"%i%p1%d.%p2%d")
            .arg(1)
            .arg(2)
            .write(&mut buffer)
            .unwrap();
        assert_eq!(&buffer, b"2.3");
        buffer.clear();

        Executor::new(b"%p1%l%p1\"%s\" is %d characters long!")
            .arg("Hello World")
            .write(&mut buffer)
            .unwrap();
        assert_eq!(
            buffer,
            b"\"Hello World\" is 11 characters long!"
                .iter()
                .map(|&c| c)
                .collect::<Vec<u8>>()
        );
        buffer.clear();

        Executor::new(b"%?%p1%tyes!%;")
            .arg(1)
            .write(&mut buffer)
            .unwrap();
        assert_eq!(&buffer, b"yes!");
        buffer.clear();

        Executor::new(b"%?%p1%tyes!%eno!%;")
            .arg(0)
            .write(&mut buffer)
            .unwrap();
        assert_eq!(&buffer, b"no!");
        buffer.clear();

        Executor::new(b"%?%p9%t\\E(0%e\\E(B%;\\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m")
            .arg(1)
            .write(&mut buffer) 
            .unwrap();
        assert_eq!(buffer, b"\\E(B\\E[0;7m");
        buffer.clear();

        Executor::new(b"\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m")
            .arg(3)
            .write(&mut buffer)
            .unwrap();
        assert_eq!(&String::from_utf8(buffer).unwrap(), "\x1b[33m");
    }
}