appcui_proc_macro 0.1.5

Procedural macros for the AppCUI TUI framework.
Documentation
use crate::parameter_parser::size::Size;

use super::{TokenType, Tokenizer};

macro_rules! check_token {
    ($script:expr, $token: expr, $value: expr, $type: expr) => {
        assert_eq!($token.get_text($script), $value);
        assert_eq!($token.get_type(), $type);
    };
}
#[test]
fn check_tokenizer() {
    let script = "a = 10, b=20, 
                  value=['100', 20; 
                      {key:value,
                       key2:[1,2,3],
                    \"str\" = aaa}
                ],   value='''long string'''   ";
    let t = Tokenizer::new(script).unwrap();
    assert_eq!(t.count(), 39);
    check_token!(script, t.get(0), "a", TokenType::Word);
    check_token!(script, t.get(1), "=", TokenType::Eq);
    check_token!(script, t.get(2), "10", TokenType::Word);
    check_token!(script, t.get(3), ",", TokenType::Separator);
    check_token!(script, t.get(4), "b", TokenType::Word);
    check_token!(script, t.get(5), "=", TokenType::Eq);
    check_token!(script, t.get(6), "20", TokenType::Word);
    check_token!(script, t.get(7), ",", TokenType::Separator);
    check_token!(script, t.get(8), "value", TokenType::Word);
    check_token!(script, t.get(9), "=", TokenType::Eq);
    check_token!(script, t.get(10), "[", TokenType::OpenSquareBracket);
    assert_eq!(t.get(10).get_link(), 34);
    check_token!(script, t.get(11), "100", TokenType::Word);
    check_token!(script, t.get(12), ",", TokenType::Separator);
    check_token!(script, t.get(13), "20", TokenType::Word);
    check_token!(script, t.get(14), ";", TokenType::Separator);
    check_token!(script, t.get(15), "{", TokenType::OpenBrace);
    assert_eq!(t.get(15).get_link(), 33);
    check_token!(script, t.get(16), "key", TokenType::Word);
    check_token!(script, t.get(17), ":", TokenType::Eq);
    check_token!(script, t.get(18), "value", TokenType::Word);
    check_token!(script, t.get(19), ",", TokenType::Separator);
    check_token!(script, t.get(20), "key2", TokenType::Word);
    check_token!(script, t.get(21), ":", TokenType::Eq);
    check_token!(script, t.get(22), "[", TokenType::OpenSquareBracket);
    assert_eq!(t.get(22).get_link(), 28);
    check_token!(script, t.get(23), "1", TokenType::Word);
    check_token!(script, t.get(24), ",", TokenType::Separator);
    check_token!(script, t.get(25), "2", TokenType::Word);
    check_token!(script, t.get(26), ",", TokenType::Separator);
    check_token!(script, t.get(27), "3", TokenType::Word);
    check_token!(script, t.get(28), "]", TokenType::CloseSquareBracket);
    assert_eq!(t.get(28).get_link(), 22);
    check_token!(script, t.get(29), ",", TokenType::Separator);
    check_token!(script, t.get(30), "str", TokenType::Word);
    check_token!(script, t.get(31), "=", TokenType::Eq);
    check_token!(script, t.get(32), "aaa", TokenType::Word);
    check_token!(script, t.get(33), "}", TokenType::CloseBrace);
    assert_eq!(t.get(33).get_link(), 15);
    check_token!(script, t.get(34), "]", TokenType::CloseSquareBracket);
    assert_eq!(t.get(34).get_link(), 10);
    check_token!(script, t.get(35), ",", TokenType::Separator);
    check_token!(script, t.get(36), "value", TokenType::Word);
    check_token!(script, t.get(37), "=", TokenType::Eq);
    check_token!(script, t.get(38), "long string", TokenType::Word);
}

#[test]
fn check_size() {
    assert_eq!(Size::from_str("10x50"), Some(Size { width: 10, height: 50 }));
    assert_eq!(Size::from_str("   123 x   4567   "), Some(Size { width: 123, height: 4567 }));
    assert_eq!(Size::from_str("   1     X   4567   "), Some(Size { width: 1, height: 4567 }));
    assert_eq!(Size::from_str("   1234 ,  2   "), Some(Size { width: 1234, height: 2 }));
    assert_eq!(Size::from_str("   0 ,  0   "), None);
    assert_eq!(Size::from_str("   123    "), None);
    assert_eq!(Size::from_str("5x2a"), None);
    assert_eq!(Size::from_str("5 x "), None);
    assert_eq!(Size::from_str(" x 2"), None);
    assert_eq!(Size::from_str(" 5 x 2     a"), None);
}