From 1e14d4106104bb1dd853de0c6791b0f401293972 Mon Sep 17 00:00:00 2001 From: Hidde Wieringa Date: Fri, 26 Apr 2024 21:23:51 +0200 Subject: [PATCH] Fix duplicated output on subtemplate --- src/evaluate.rs | 10 ++++++---- tests/integration_tests.rs | 19 +++++++++++++++++++ .../if_elif_with_subtemplate.template | 5 +++++ 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 tests/template/if_elif_with_subtemplate.template diff --git a/src/evaluate.rs b/src/evaluate.rs index f46750f..3b6144f 100644 --- a/src/evaluate.rs +++ b/src/evaluate.rs @@ -177,11 +177,13 @@ fn evaluate_template(data: &Value, record: Pair) -> Result<(String, bool), } } Rule::template => { - let (evaluation, gobble_inner) = evaluate_template(&data, if_inner)?; - if gobble_inner { - result = result.trim_end_matches(&[' ', '\t']).to_string(); + if valid { + let (evaluation, gobble_inner) = evaluate_template(&data, if_inner)?; + if gobble_inner { + result = result.trim_end_matches(&[' ', '\t']).to_string(); + } + result.push_str(evaluation.as_str()) } - result.push_str(evaluation.as_str()) } _ => unreachable!(), } diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index 223e955..47c26be 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -1030,4 +1030,23 @@ fn test_assert() { \[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z INFO template\] Parsing configuration using JSON format \[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z ERROR template\] ERROR: Could not render template: Assertion failed: Expected value 'true' but found 'false': This is not OK $"#).unwrap()); +} + +#[test] +fn if_elif_with_subtemplate() { + let mut cmd = Command::cargo_bin("template").unwrap(); + let assert = cmd + .arg("--template") + .arg("tests/template/if_elif_with_subtemplate.template") + .arg("--configuration") + .arg("tests/configuration/hello_world.yml") + .assert(); + + assert + .success() + .stdout("Hello\n") + .stderr(is_match(r#"^\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z INFO template\] Using template file 'tests/template/if_elif_with_subtemplate.template' +\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z INFO template\] Using configuration file 'tests/configuration/hello_world.yml' +\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z INFO template\] Parsing configuration using YAML format +$"#).unwrap()); } \ No newline at end of file diff --git a/tests/template/if_elif_with_subtemplate.template b/tests/template/if_elif_with_subtemplate.template new file mode 100644 index 0000000..9f07085 --- /dev/null +++ b/tests/template/if_elif_with_subtemplate.template @@ -0,0 +1,5 @@ +{% if match %} +-{% value %}- +{% else %} +{% value %} +{% end %}