Start adding ast build tests.

This commit is contained in:
Jesse Brault 2025-09-16 00:00:26 -05:00
parent de8e2ba397
commit fc2912edd2
6 changed files with 59 additions and 1 deletions

View File

@ -0,0 +1 @@
Hello, World!

View File

@ -0,0 +1 @@
`Hello, ${world}!`

View File

@ -0,0 +1 @@
false

View File

@ -0,0 +1 @@
true

View File

@ -53,4 +53,54 @@ pub mod build {
use crate::ast::node::*;
include!(concat!(env!("OUT_DIR"), "/src/ast/build.rs"));
#[cfg(test)]
mod build_tests {
use super::*;
use crate::parser::DeimosParser;
use pest::Parser;
fn parse(rule: Rule, input: &str) -> Pair<Rule> {
let parse_result = DeimosParser::parse(rule, input);
parse_result.expect("parsing failed").next().unwrap()
}
#[test]
fn boolean_literal_true() {
let pair = parse(
Rule::BooleanLiteral,
include_str!("build_tests/boolean_literal/true"),
);
assert_eq!(true, build_boolean_literal(pair));
}
#[test]
fn boolean_literal_false() {
let pair = parse(
Rule::BooleanLiteral,
include_str!("build_tests/boolean_literal/false"),
);
assert_eq!(false, build_boolean_literal(pair));
}
#[test]
fn backtick_inner_greeting() {
let pair = parse(
Rule::BacktickInner,
include_str!("build_tests/backtick_inner/greeting"),
);
assert_eq!("Hello, World!", build_backtick_inner(pair));
}
#[test]
fn backtick_string_mixed() {
let pair = parse(
Rule::BacktickString,
include_str!("build_tests/backtick_string/mixed"),
);
let backtick_string = build_backtick_string(pair);
assert_eq!(backtick_string.inners().count(), 2);
assert_eq!(backtick_string.expressions().count(), 1);
}
}
}

View File

@ -628,6 +628,7 @@ ShiftExpression:
optional: true
- right:
rule: Expression
optional: true
ShiftOperator:
leaf_rules:
- LeftShift
@ -655,6 +656,7 @@ MultiplicativeExpression:
optional: true
- right:
rule: Expression
optional: true
MultiplicativeOperator:
leaf_rules:
- Multiply
@ -665,6 +667,8 @@ PrefixExpression:
- operators:
rule: PrefixOperator
vec: true
- right:
rule: SuffixExpression
PrefixOperator:
leaf_rules:
- Spread
@ -812,7 +816,7 @@ BacktickString:
BacktickInner:
produce:
kind: string
from: string_inner
from: whole_pair
BooleanLiteral:
produce:
kind: boolean