mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2025-12-06 03:36:42 +01:00
dsl, output, tui: add tests, examples, root dispatchers
This commit is contained in:
parent
8dfe20a58c
commit
ca862b9802
16 changed files with 637 additions and 377 deletions
|
|
@ -1,16 +1,16 @@
|
|||
use crate::*;
|
||||
macro_rules!is_some(($exp:expr, $val:expr)=>{assert_eq!($exp, Ok(Some($val)))};);
|
||||
macro_rules!is_none(($exp:expr)=>{assert_eq!($exp, Ok(None))};);
|
||||
macro_rules!is_err(($exp:expr)=>{assert!($exp.is_err())};
|
||||
($exp:expr, $err:expr)=>{assert_eq!($exp, Err($err))};);
|
||||
#[test] fn test_exp () -> Result<(), DslError> {
|
||||
let e0 = DslError::Unexpected('a');
|
||||
let e1 = DslError::Unexpected('(');
|
||||
let e2 = DslError::Unexpected('b');
|
||||
let e3 = DslError::Unexpected('d');
|
||||
let check = |src: &str, key, exp, head, tail|{
|
||||
assert_eq!(src.key(), key, "{src}");
|
||||
assert_eq!(src.exp(), exp, "{src}");
|
||||
macro_rules!is_some(($expr:expr, $val:expr)=>{assert_eq!($expr, Ok(Some($val)))};);
|
||||
macro_rules!is_none(($expr:expr)=>{assert_eq!($expr, Ok(None))};);
|
||||
macro_rules!is_err(($expr:expr)=>{assert!($expr.is_err())};
|
||||
($expr:expr, $err:expr)=>{assert_eq!($expr, Err($err))};);
|
||||
#[test] fn test_expr () -> Result<(), DslError> {
|
||||
let e0 = DslError::Unexpected('a', None, None);
|
||||
let e1 = DslError::Unexpected('(', None, None);
|
||||
let e2 = DslError::Unexpected('b', None, None);
|
||||
let e3 = DslError::Unexpected('d', None, None);
|
||||
let check = |src: &str, word, expr, head, tail|{
|
||||
assert_eq!(src.word(), word, "{src}");
|
||||
assert_eq!(src.expr(), expr, "{src}");
|
||||
assert_eq!(src.head(), head, "{src}");
|
||||
assert_eq!(src.tail(), tail, "{src}");
|
||||
};
|
||||
|
|
@ -21,43 +21,43 @@ macro_rules!is_err(($exp:expr)=>{assert!($exp.is_err())};
|
|||
check("(a b c) d e f", Err(e1), Err(e3), Ok(Some("(a b c)")), Ok(Some("d e f")));
|
||||
check("a (b c d) e f", Err(e1), Err(e0), Ok(Some("a")), Ok(Some("(b c d) e f")));
|
||||
|
||||
is_some!(sym_peek("\n :view/transport"), ":view/transport");
|
||||
is_some!(word_peek("\n :view/transport"), ":view/transport");
|
||||
|
||||
assert!(is_whitespace(' '));
|
||||
assert!(!is_key_start(' '));
|
||||
assert!(is_key_start('f'));
|
||||
assert!(is_space(' '));
|
||||
assert!(!is_word_char(' '));
|
||||
assert!(is_word_char('f'));
|
||||
|
||||
is_some!(key_seek_start("foo"), 0);
|
||||
is_some!(key_seek_start("foo "), 0);
|
||||
is_some!(key_seek_start(" foo "), 1);
|
||||
is_some!(key_seek_length(&" foo "[1..]), 3);
|
||||
is_some!(key_seek("foo"), (0, 3));
|
||||
is_some!(key_peek("foo"), "foo");
|
||||
is_some!(key_seek("foo "), (0, 3));
|
||||
is_some!(key_peek("foo "), "foo");
|
||||
is_some!(key_seek(" foo "), (1, 3));
|
||||
is_some!(key_peek(" foo "), "foo");
|
||||
is_some!(word_seek_start("foo"), 0);
|
||||
is_some!(word_seek_start("foo "), 0);
|
||||
is_some!(word_seek_start(" foo "), 1);
|
||||
is_some!(word_seek_length(&" foo "[1..]), 3);
|
||||
is_some!(word_seek("foo"), (0, 3));
|
||||
is_some!(word_peek("foo"), "foo");
|
||||
is_some!(word_seek("foo "), (0, 3));
|
||||
is_some!(word_peek("foo "), "foo");
|
||||
is_some!(word_seek(" foo "), (1, 3));
|
||||
is_some!(word_peek(" foo "), "foo");
|
||||
|
||||
is_err!("(foo)".key());
|
||||
is_err!("foo".exp());
|
||||
is_err!("(foo)".word());
|
||||
is_err!("foo".expr());
|
||||
|
||||
is_some!("(foo)".exp(), "foo");
|
||||
is_some!("(foo)".expr(), "foo");
|
||||
is_some!("(foo)".head(), "(foo)");
|
||||
is_none!("(foo)".tail());
|
||||
|
||||
is_some!("(foo bar baz)".exp(), "foo bar baz");
|
||||
is_some!("(foo bar baz)".expr(), "foo bar baz");
|
||||
is_some!("(foo bar baz)".head(), "(foo bar baz)");
|
||||
is_none!("(foo bar baz)".tail());
|
||||
|
||||
is_some!("(foo bar baz)".exp().head(), "foo");
|
||||
is_some!("(foo bar baz)".exp().tail(), "bar baz");
|
||||
is_some!("(foo bar baz)".exp().tail().head(), "bar");
|
||||
is_some!("(foo bar baz)".exp().tail().tail(), "baz");
|
||||
is_some!("(foo bar baz)".expr().head(), "foo");
|
||||
is_some!("(foo bar baz)".expr().tail(), "bar baz");
|
||||
is_some!("(foo bar baz)".expr().tail().head(), "bar");
|
||||
is_some!("(foo bar baz)".expr().tail().tail(), "baz");
|
||||
|
||||
is_err!("foo".exp());
|
||||
is_some!("foo".key(), "foo");
|
||||
is_some!(" foo".key(), "foo");
|
||||
is_some!(" foo ".key(), "foo");
|
||||
is_err!("foo".expr());
|
||||
is_some!("foo".word(), "foo");
|
||||
is_some!(" foo".word(), "foo");
|
||||
is_some!(" foo ".word(), "foo");
|
||||
|
||||
is_some!(" foo ".head(), "foo");
|
||||
//assert_eq!(" foo ".head().head(), Ok(None));
|
||||
|
|
@ -84,16 +84,16 @@ macro_rules!is_err(($exp:expr)=>{assert!($exp.is_err())};
|
|||
is_some!(" (foo) (bar) ".tail(), " (bar) ");
|
||||
is_some!(" (foo) (bar) ".tail().head(), "(bar)");
|
||||
is_some!(" (foo) (bar) ".tail().head().head(), "(bar)");
|
||||
is_some!(" (foo) (bar) ".tail().head().exp(), "bar");
|
||||
is_some!(" (foo) (bar) ".tail().head().exp().head(), "bar");
|
||||
is_some!(" (foo) (bar) ".tail().head().expr(), "bar");
|
||||
is_some!(" (foo) (bar) ".tail().head().expr().head(), "bar");
|
||||
|
||||
is_some!(" (foo bar baz) ".head(), "(foo bar baz)");
|
||||
is_some!(" (foo bar baz) ".head().head(), "(foo bar baz)");
|
||||
is_some!(" (foo bar baz) ".exp(), "foo bar baz");
|
||||
is_some!(" (foo bar baz) ".exp().head(), "foo");
|
||||
is_some!(" (foo bar baz) ".exp().tail(), "bar baz");
|
||||
is_some!(" (foo bar baz) ".exp().tail().head(), "bar");
|
||||
is_some!(" (foo bar baz) ".exp().tail().tail(), "baz");
|
||||
is_some!(" (foo bar baz) ".expr(), "foo bar baz");
|
||||
is_some!(" (foo bar baz) ".expr().head(), "foo");
|
||||
is_some!(" (foo bar baz) ".expr().tail(), "bar baz");
|
||||
is_some!(" (foo bar baz) ".expr().tail().head(), "bar");
|
||||
is_some!(" (foo bar baz) ".expr().tail().tail(), "baz");
|
||||
is_none!(" (foo bar baz) ".tail());
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue