Setup a testing bench
Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
parent
4470af3926
commit
d3e6410ec0
16 changed files with 336 additions and 4 deletions
42
tests/cases/ast@interpolation.snap
Normal file
42
tests/cases/ast@interpolation.snap
Normal 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: "
|
||||
",
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
}
|
||||
16
tests/cases/ast@simple.snap
Normal file
16
tests/cases/ast@simple.snap
Normal 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!
|
||||
",
|
||||
},
|
||||
),
|
||||
],
|
||||
}
|
||||
28
tests/cases/instructions@interpolation.snap
Normal file
28
tests/cases/instructions@interpolation.snap
Normal 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: "
|
||||
",
|
||||
},
|
||||
]
|
||||
11
tests/cases/instructions@simple.snap
Normal file
11
tests/cases/instructions@simple.snap
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
source: tests/file_tests.rs
|
||||
expression: emit
|
||||
input_file: tests/cases/simple.temple
|
||||
---
|
||||
[
|
||||
AppendContent {
|
||||
content: "Hello World!
|
||||
",
|
||||
},
|
||||
]
|
||||
5
tests/cases/interpolation.temple
Normal file
5
tests/cases/interpolation.temple
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"name": "Hemera"
|
||||
}
|
||||
---
|
||||
Hello! I'm {{= name }}
|
||||
6
tests/cases/output@interpolation.snap
Normal file
6
tests/cases/output@interpolation.snap
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
source: tests/file_tests.rs
|
||||
expression: output
|
||||
input_file: tests/cases/interpolation.temple
|
||||
---
|
||||
"Hello! I'm Hemera\n"
|
||||
6
tests/cases/output@simple.snap
Normal file
6
tests/cases/output@simple.snap
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
source: tests/file_tests.rs
|
||||
expression: output
|
||||
input_file: tests/cases/simple.temple
|
||||
---
|
||||
"Hello World!\n"
|
||||
46
tests/cases/parsed@interpolation.snap
Normal file
46
tests/cases/parsed@interpolation.snap
Normal 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: "
|
||||
",
|
||||
},
|
||||
],
|
||||
}
|
||||
14
tests/cases/parsed@simple.snap
Normal file
14
tests/cases/parsed@simple.snap
Normal 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!
|
||||
",
|
||||
},
|
||||
],
|
||||
}
|
||||
1
tests/cases/simple.temple
Normal file
1
tests/cases/simple.temple
Normal file
|
|
@ -0,0 +1 @@
|
|||
Hello World!
|
||||
46
tests/file_tests.rs
Normal file
46
tests/file_tests.rs
Normal 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);
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue