Jinja2-TT2
view release on metacpan or search on metacpan
t/03-emitter.t view on Meta::CPAN
'Simple if'
);
};
subtest 'If-else statement' => sub {
is(
transpile('{% if user %}Hi{% else %}Bye{% endif %}'),
'[% IF user %]Hi[% ELSE %]Bye[% END %]',
'If-else'
);
};
subtest 'If-elif-else' => sub {
my $result = transpile('{% if a %}A{% elif b %}B{% else %}C{% endif %}');
like($result, qr/\[% IF a %\]A/, 'If part');
like($result, qr/\[% ELSIF b %\]B/, 'Elif becomes ELSIF');
like($result, qr/\[% ELSE %\]C/, 'Else part');
like($result, qr/\[% END %\]/, 'End tag');
};
subtest 'For loop' => sub {
is(
transpile('{% for x in items %}{{ x }}{% endfor %}'),
'[% FOREACH x IN items %][% x %][% END %]',
'For loop'
);
};
subtest 'For with unpacking' => sub {
like(
transpile('{% for k, v in items %}{{ k }}{% endfor %}'),
qr/FOREACH k, v IN items/,
'Tuple unpacking'
);
};
subtest 'Block' => sub {
is(
transpile('{% block content %}Hello{% endblock %}'),
'[% BLOCK content %]Hello[% END %]',
'Block'
);
};
subtest 'Include' => sub {
is(
transpile('{% include "header.html" %}'),
'[% INCLUDE header.html %]',
'Include'
);
};
subtest 'Set statement' => sub {
is(
transpile('{% set x = 42 %}'),
'[% x = 42 %]',
'Set variable'
);
};
subtest 'Macro' => sub {
my $result = transpile('{% macro greet(name) %}Hello {{ name }}{% endmacro %}');
like($result, qr/MACRO greet\(name\) BLOCK/, 'Macro definition');
like($result, qr/\[% name %\]/, 'Macro body');
};
subtest 'Whitespace control' => sub {
like(transpile('{{- name -}}'), qr/\[%-.*-%\]/, 'Whitespace control markers');
};
subtest 'String concatenation' => sub {
like(transpile('{{ a ~ b }}'), qr/\(a _ b\)/, 'Tilde becomes underscore');
};
subtest 'Logical operators' => sub {
like(transpile('{% if a and b %}{% endif %}'), qr/IF \(a AND b\)/, 'And operator');
like(transpile('{% if a or b %}{% endif %}'), qr/IF \(a OR b\)/, 'Or operator');
like(transpile('{% if not a %}{% endif %}'), qr/IF NOT a/, 'Not operator');
};
subtest 'Comparison operators' => sub {
like(transpile('{% if a == b %}{% endif %}'), qr/IF \(a == b\)/, 'Equals');
like(transpile('{% if a != b %}{% endif %}'), qr/IF \(a != b\)/, 'Not equals');
like(transpile('{% if a > b %}{% endif %}'), qr/IF \(a > b\)/, 'Greater than');
};
subtest 'Ternary expression' => sub {
like(
transpile('{{ x if condition else y }}'),
qr/\(condition \? x : y\)/,
'Ternary'
);
};
subtest 'Loop variables' => sub {
like(
transpile('{{ loop.index }}'),
qr/loop\.count/,
'loop.index -> loop.count'
);
like(
transpile('{{ loop.first }}'),
qr/loop\.first/,
'loop.first unchanged'
);
like(
transpile('{{ loop.last }}'),
qr/loop\.last/,
'loop.last unchanged'
);
like(
transpile('{{ loop.length }}'),
qr/loop\.size/,
'loop.length -> loop.size'
);
};
subtest 'Boolean literals' => sub {
like(transpile('{{ true }}'), qr/\[% 1 %\]/, 'true becomes 1');
like(transpile('{{ false }}'), qr/\[% 0 %\]/, 'false becomes 0');
like(transpile('{{ True }}'), qr/\[% 1 %\]/, 'True becomes 1');
like(transpile('{{ False }}'), qr/\[% 0 %\]/, 'False becomes 0');
};
( run in 1.737 second using v1.01-cache-2.11-cpan-5c0b1e786e0 )