Setup a testing bench

Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
Marcel Müller 2026-03-06 13:56:39 +01:00
parent 4470af3926
commit d3e6410ec0
16 changed files with 336 additions and 4 deletions

View file

@ -0,0 +1,42 @@
---
source: tests/file_tests.rs
expression: ast
input_file: tests/cases/interpolation.temple
---
TemplateAst {
root: [
StaticContent(
TemplateToken {
kind: Content,
source: "Hello! I'm",
},
),
Interpolation {
prev_whitespace: Some(
TemplateToken {
kind: Whitespace,
source: " ",
},
),
wants_output: Some(
TemplateToken {
kind: WantsOutput,
source: "=",
},
),
expression: VariableAccess(
TemplateToken {
kind: Ident,
source: "name",
},
),
post_whitespace: Some(
TemplateToken {
kind: Whitespace,
source: "
",
},
),
},
],
}

View file

@ -0,0 +1,16 @@
---
source: tests/file_tests.rs
expression: ast
input_file: tests/cases/simple.temple
---
TemplateAst {
root: [
StaticContent(
TemplateToken {
kind: Content,
source: "Hello World!
",
},
),
],
}

View file

@ -0,0 +1,28 @@
---
source: tests/file_tests.rs
expression: emit
input_file: tests/cases/interpolation.temple
---
[
AppendContent {
content: "Hello! I'm",
},
AppendContent {
content: " ",
},
LoadFromContextToSlot {
name: "name",
slot: VariableSlot {
index: 0,
},
},
EmitFromSlot {
slot: VariableSlot {
index: 0,
},
},
AppendContent {
content: "
",
},
]

View file

@ -0,0 +1,11 @@
---
source: tests/file_tests.rs
expression: emit
input_file: tests/cases/simple.temple
---
[
AppendContent {
content: "Hello World!
",
},
]

View file

@ -0,0 +1,5 @@
{
"name": "Hemera"
}
---
Hello! I'm {{= name }}

View file

@ -0,0 +1,6 @@
---
source: tests/file_tests.rs
expression: output
input_file: tests/cases/interpolation.temple
---
"Hello! I'm Hemera\n"

View file

@ -0,0 +1,6 @@
---
source: tests/file_tests.rs
expression: output
input_file: tests/cases/simple.temple
---
"Hello World!\n"

View file

@ -0,0 +1,46 @@
---
source: tests/file_tests.rs
expression: parsed
input_file: tests/cases/interpolation.temple
---
ParsedTemplate {
tokens: [
TemplateToken {
kind: Content,
source: "Hello! I'm",
},
TemplateToken {
kind: Whitespace,
source: " ",
},
TemplateToken {
kind: LeftDelim,
source: "{{",
},
TemplateToken {
kind: WantsOutput,
source: "=",
},
TemplateToken {
kind: Whitespace,
source: " ",
},
TemplateToken {
kind: Ident,
source: "name",
},
TemplateToken {
kind: Whitespace,
source: " ",
},
TemplateToken {
kind: RightDelim,
source: "}}",
},
TemplateToken {
kind: Whitespace,
source: "
",
},
],
}

View file

@ -0,0 +1,14 @@
---
source: tests/file_tests.rs
expression: parsed
input_file: tests/cases/simple.temple
---
ParsedTemplate {
tokens: [
TemplateToken {
kind: Content,
source: "Hello World!
",
},
],
}

View file

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

46
tests/file_tests.rs Normal file
View file

@ -0,0 +1,46 @@
use std::collections::HashMap;
use temple::Context;
#[test]
fn check_cases() {
insta::glob!("cases/*.temple", |path| {
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path("cases");
settings.set_snapshot_suffix(path.file_stem().unwrap().display().to_string());
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
let input = std::fs::read_to_string(path).unwrap();
let (context, input) = input.split_once("\n---\n").unwrap_or_else(|| ("", &input));
let map = if !context.is_empty() {
serde_json::from_str::<HashMap<String, serde_json::Value>>(context).unwrap()
} else {
HashMap::new()
};
let mut context = Context::new();
for (k, v) in map {
context.insert(k, v);
}
let parsed = temple::parser::parse(input.into()).unwrap();
insta::assert_debug_snapshot!("parsed", parsed);
let ast = temple::ast::parse(parsed.tokens()).unwrap();
insta::assert_debug_snapshot!("ast", ast);
let emit = temple::emit::emit_machine(ast);
insta::assert_debug_snapshot!("instructions", emit);
let output = temple::eval::execute(&emit, &context).unwrap();
insta::assert_debug_snapshot!("output", output);
});
}