Documentation
use temple::error::Result;
use temple::{Template, TemplateEnv};
use std::rc::Rc;

fn test_render_template(input: &str, expected: &str) -> Result<()> {
    let temp_env = TemplateEnv::default();
    let template_env = Rc::new(&temp_env);
    let mut template = Template::new(&template_env)?;
    template.load(input)?;
    let result = template.render_as_string()?;
    assert_eq!(result, expected.to_string());
    Ok(())
}

#[test]
fn render_plain_singe_line() -> Result<()> {
    test_render_template("Hello, world!", "Hello, world!")
}

#[test]
fn render_plain_multiline() -> Result<()> {
    test_render_template(
        "Hello, world!
Hello, world!",
        "Hello, world!
Hello, world!",
    )
}

#[test]
fn render_multiline_with_comment() -> Result<()> {
    test_render_template(
        "Hello, world!
{#Comment to skip #}Hello, world!",
        "Hello, world!
Hello, world!",
    )
}

#[test]
fn render_comment_with_code_inside() -> Result<()> {
    test_render_template(
        "(Hello World
{#Comment to
            {{for}}
            {{endfor}}
skip #}
{#Comment to
             {%
 skip #}
from Parser!)",
        "(Hello World


from Parser!)",
    )
}

#[test]
fn render_raw_test() -> Result<()> {
    test_render_template(
        "{% raw %}
    This is a raw text {{ 2 + 2 }}
{% endraw %}",
        "
    This is a raw text {{ 2 + 2 }}
",
    )
}