The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!perl -T

use strict;
use warnings;

use Test::More;

use Template::Sandbox;
use Test::Exception;

plan tests => 3 * 2;

my ( $template, $syntax );

foreach my $bare_expr ( 0, 1 )
{
    my ( $token, $desc, $constructor );

    if( $bare_expr )
    {
        $token = '';
        $desc  = 'bare';
        $constructor =
            sub { Template::Sandbox->new( allow_bare_expr => 1, @_ ); };
    }
    else
    {
        $token = ' expr';
        $desc  = 'expr';
        $constructor = sub { Template::Sandbox->new( @_ ); };
    }

    #
    #  1: Malformed expression.
    $syntax = "<:$token a a :>";
    $template = $constructor->();
    throws_ok { $template->set_template_string( $syntax ) }
        qr/compile error: Not a well-formed expression: a a at line 1, char 1 of/,
        "[$desc] malformed expression a a";

    #
    #  2: Too many open brackets.
    $syntax = "<:$token ( ( a ) :>";
    $template = $constructor->();
    throws_ok { $template->set_template_string( $syntax ) }
        qr/compile error: Not a well-formed expression: \( \( a \) at line 1, char 1 of/,
        "[$desc] too many open brackets";

    #
    #  3: Too many close brackets.
    $syntax = "<:$token ( a ) ) :>";
    $template = $constructor->();
    throws_ok { $template->set_template_string( $syntax ) }
        qr/compile error: Not a well-formed expression: \( a \) \) at line 1, char 1 of/,
        "[$desc] too many close brackets";
}