The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use Test::Base;
use URI::Template::Restrict;

plan tests => 1 * blocks;

my $vars = {
    foo       => "\x{03D3}",
    bar       => 'fred',
    baz       => '10,20,30',
    qux       => [10, 20, 30],
    corge     => [],
    grault    => '',
    garply    => 'a/b/c',
    waldo     => 'ben & jerrys',
    fred      => ['fred', '', 'wilma'],
    plugh     => ["\x{017F}\x{0307}", "\x{0073}\x{0307}"],
    '1-a_b.c' => 200,
};

run {
    my $block = shift;
    my $template = URI::Template::Restrict->new($block->input);
    is $template->process($vars) => $block->expected, $block->input;
};

__END__
===
--- input: http://example.org/?q={bar}
--- expected: http://example.org/?q=fred

===
--- input: /{xyzzy}
--- expected: /

===
--- input: http://example.org/?{-join|&|foo,bar,xyzzy,baz}
--- expected: http://example.org/?foo=%CE%8E&bar=fred&baz=10%2C20%2C30

===
--- input: http://example.org/?d={-list|,|qux}
--- expected: http://example.org/?d=10,20,30

===
--- input: http://example.org/?d={-list|&d=|qux}
--- expected: http://example.org/?d=10&d=20&d=30

===
--- input: http://example.org/{bar}{bar}/{garply}
--- expected: http://example.org/fredfred/a%2Fb%2Fc

===
--- input: http://example.org/{bar}{-prefix|/|fred}
--- expected: http://example.org/fred/fred//wilma

===
--- input: {-suffix|:|plugh}
--- expected: %E1%B9%A1:%E1%B9%A1:

===
--- input: ../{waldo}/
--- expected: ../ben%20%26%20jerrys/

===
--- input: :{1-a_b.c}:
--- expected: :200: