lang: extract tests into file

This commit is contained in:
Schrottkatze 2024-04-03 00:30:11 +02:00
parent de008263ca
commit ae60db7721
Signed by: schrottkatze
SSH key fingerprint: SHA256:hXb3t1vINBFCiDCmhRABHX5ocdbLiKyCdKI4HK2Rbbc
2 changed files with 145 additions and 150 deletions

View file

@ -17,6 +17,8 @@ use logos::{Logos, Source};
use crate::tokens::Token;
pub mod ast;
#[cfg(test)]
mod tests;
use self::ast::{Expr, File};
type Span = SimpleSpan;
@ -89,153 +91,3 @@ fn expr_parser<'tokens, 'src: 'tokens, I: ValueInput<'tokens, Token = Token<'src
decls: IndexMap::from_iter(decls),
}))
}
#[cfg(test)]
mod tests {
use crate::parser::ast::{Expr, File};
use crate::parser::parse;
use crate::tokens::Token;
use chumsky::input::Stream;
use chumsky::prelude::*;
use indexmap::IndexMap;
use logos::Logos;
#[test]
fn test_parse_node_with_params() {
const INPUT: &str = "meow [ hello: $foo, world: @bar]";
assert_eq!(
parse(INPUT).unwrap(),
File {
decls: IndexMap::from_iter([(
("main", (0..0).into()),
(
Expr::Node(
("meow", (0..4).into()),
Some((
IndexMap::from_iter([
(
("hello", (7..12).into()),
Expr::Var(("foo", (14..18).into()))
),
(
("world", (20..25).into()),
Expr::InputVar(("bar", (27..31).into()))
)
]),
(5..32).into()
))
),
(0..32).into()
)
)])
}
);
}
fn test_parse_multiple_top_level_complex() {
const INPUT: &str = r#"def main = meow
| uwu
[ foo: @bar
, hello: world @| test [ more: params ] | yay
]
!| awa
@| nya
| rawr;
def test = meow
[ hello: $foo
, world: @bar
];
"#;
assert_eq!(
parse(INPUT).unwrap(),
File {
decls: IndexMap::from_iter([
(
("main", (4..8).into()),
(
Expr::SimplePipe(
Box::new(Expr::Node(("meow", (11..15).into()), None)),
Box::new(Expr::NullPipe(
Box::new(Expr::Node(
("uwu", (20..23).into()),
Some((
IndexMap::from_iter([
(
("foo", (29..32).into()),
Expr::InputVar(("bar", (34..38).into()))
),
(
("hello", (44..49).into()),
Expr::MappingPipe(
Box::new(Expr::Node(
("world", (51..56).into()),
None
)),
Box::new(Expr::SimplePipe(
Box::new(Expr::Node(
("test", (60..64).into()),
Some((
IndexMap::from_iter([(
("more", (67..71).into()),
Expr::Node(
(
"params",
(73..79).into()
),
None
)
)]),
(65..81).into()
))
)),
Box::new(Expr::Node(
("yay", (84..87).into()),
None
))
))
)
)
]),
(27..92).into()
))
)),
Box::new(Expr::MappingPipe(
Box::new(Expr::Node(("awa", (97..100).into()), None)),
Box::new(Expr::SimplePipe(
Box::new(Expr::Node(("nya", (106..109).into()), None)),
Box::new(Expr::Node(("rawr", (114..118).into()), None))
))
))
))
),
(11..118).into()
),
),
(
("test", (125..129).into()),
(
Expr::Node(
("meow", (132..136).into()),
Some((
IndexMap::from_iter([
(
("hello", (141..146).into()),
Expr::Var(("foo", (148..152).into()))
),
(
("world", (156..161).into()),
Expr::InputVar(("bar", (163..167).into()))
)
]),
(139..171).into()
))
),
(132..171).into()
)
)
])
}
);
}
}

View file

@ -0,0 +1,143 @@
use crate::parser::ast::{Expr, File};
use crate::parser::parse;
use crate::tokens::Token;
use chumsky::input::Stream;
use chumsky::prelude::*;
use indexmap::IndexMap;
use logos::Logos;
#[test]
fn test_parse_node_with_params() {
const INPUT: &str = "meow [ hello: $foo, world: @bar]";
assert_eq!(
parse(INPUT).unwrap(),
File {
decls: IndexMap::from_iter([(
("main", (0..0).into()),
(
Expr::Node(
("meow", (0..4).into()),
Some((
IndexMap::from_iter([
(
("hello", (7..12).into()),
Expr::Var(("foo", (14..18).into()))
),
(
("world", (20..25).into()),
Expr::InputVar(("bar", (27..31).into()))
)
]),
(5..32).into()
))
),
(0..32).into()
)
)])
}
);
}
fn test_parse_multiple_top_level_complex() {
const INPUT: &str = r#"def main = meow
| uwu
[ foo: @bar
, hello: world @| test [ more: params ] | yay
]
!| awa
@| nya
| rawr;
def test = meow
[ hello: $foo
, world: @bar
];
"#;
assert_eq!(
parse(INPUT).unwrap(),
File {
decls: IndexMap::from_iter([
(
("main", (4..8).into()),
(
Expr::SimplePipe(
Box::new(Expr::Node(("meow", (11..15).into()), None)),
Box::new(Expr::NullPipe(
Box::new(Expr::Node(
("uwu", (20..23).into()),
Some((
IndexMap::from_iter([
(
("foo", (29..32).into()),
Expr::InputVar(("bar", (34..38).into()))
),
(
("hello", (44..49).into()),
Expr::MappingPipe(
Box::new(Expr::Node(
("world", (51..56).into()),
None
)),
Box::new(Expr::SimplePipe(
Box::new(Expr::Node(
("test", (60..64).into()),
Some((
IndexMap::from_iter([(
("more", (67..71).into()),
Expr::Node(
("params", (73..79).into()),
None
)
)]),
(65..81).into()
))
)),
Box::new(Expr::Node(
("yay", (84..87).into()),
None
))
))
)
)
]),
(27..92).into()
))
)),
Box::new(Expr::MappingPipe(
Box::new(Expr::Node(("awa", (97..100).into()), None)),
Box::new(Expr::SimplePipe(
Box::new(Expr::Node(("nya", (106..109).into()), None)),
Box::new(Expr::Node(("rawr", (114..118).into()), None))
))
))
))
),
(11..118).into()
),
),
(
("test", (125..129).into()),
(
Expr::Node(
("meow", (132..136).into()),
Some((
IndexMap::from_iter([
(
("hello", (141..146).into()),
Expr::Var(("foo", (148..152).into()))
),
(
("world", (156..161).into()),
Expr::InputVar(("bar", (163..167).into()))
)
]),
(139..171).into()
))
),
(132..171).into()
)
)
])
}
);
}