The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::Mini::Unit;
use Template::Mustache;

case t::ParseErrors {
    test closing_the_wrong_section_tag {
        assert_dies(sub {
            Template::Mustache->render("
                Before...
                {{#section}}
                Inner...
                {{/other}}
                After...
            ")
        }, "End Section tag closes 'other'; expected 'section'!");
    }

    test not_closing_a_nested_section_tag {
        assert_dies(sub {
            Template::Mustache->render("
                {{#a}}
                  {{#b}}
                {{/a}}
            ")
        }, "End Section tag closes 'a'; expected 'b'!");
    }

    test closing_a_section_at_the_top_level {
        assert_dies(sub {
            Template::Mustache->render("
                Before...
                {{/section}}
                After...
            ")
        }, "End Section tag 'section' found, but not in a section!");
    }

    test specifying_too_few_delimiters {
        assert_dies(sub {
            Template::Mustache->render('{{= $$$ =}}')
        }, 'Set Delimiters tags must have exactly two values!');
    }

    test specifying_too_many_delimiters {
        assert_dies(sub {
            Template::Mustache->render('{{= $ $ $ =}}')
        }, 'Set Delimiters tags must have exactly two values!');
    }

    test specifying_an_unknown_tag_type {
        assert_dies(sub {
            Template::Mustache->render('{{% something }}')
        }, 'Unknown tag type -- %');
    }
}