1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
|
#!perl -w
use strict;
use Test::More;
use Text::Xslate;
my $tx = Text::Xslate->new();
my @data = (
['<:= $value10 == 10 ? 3 : 5 :>', 3],
['<:= $value10 == 20 ? 3 : 5 :>', 5],
['<:= $value20 == 10 ? 3 : 5 :>', 5],
['<:= $value20 == 20 ? 3 : 5 :>', 3],
['<:= $value10 == 10 && $value20 == 20 ? 3 : 5 :>', 3],
['<:= $value10 == 10 || $value20 == 20 ? 3 : 5 :>', 3],
['<:= ($value10 == 10 && $value20 == 20) ? 3 : 5 :>', 3],
['<:= ($value10 == 10 || $value20 == 20) ? 3 : 5 :>', 3],
['<:= ($value10 == 10 && $value20 == 20) && 5 :>', 5],
['<:= ($value10 == 10 && $value20 != 20) && 5 :>', ''],
['<:= ($value10 == 10 && $value20 == 20) || 5 :>', 1],
['<:= ($value10 == 10 && $value20 != 20) || 5 :>', 5],
['<:= ($value10 != 10 && $value20 != 20) && 5 :>', ''],
['<:= ($value10 != 10 && $value20 != 20) || 5 :>', 5],
['<:= ($value10 == 10 || $value20 == 20) && 5 :>', 5],
['<:= ($value10 == 10 || $value20 != 20) && 5 :>', 5],
['<:= ($value10 == 10 || $value20 == 20) || 5 :>', 1],
['<:= ($value10 == 10 || $value20 != 20) || 5 :>', 1],
['<:= ($value10 != 10 || $value20 != 20) && 5 :>', ''],
['<:= ($value10 != 10 || $value20 != 20) || 5 :>', 5],
# no parens
['<:= $value10 == 10 && $value20 == 20 && 5 :>', 5],
['<:= $value10 == 10 && $value20 != 20 && 5 :>', ''],
['<:= $value10 == 10 && $value20 == 20 || 5 :>', 1],
['<:= $value10 == 10 && $value20 != 20 || 5 :>', 5],
['<:= $value10 != 10 && $value20 != 20 && 5 :>', ''],
['<:= $value10 != 10 && $value20 != 20 || 5 :>', 5],
['<:= $value10 == 10 || $value20 == 20 && 5 :>', 1],
['<:= $value10 == 10 || $value20 != 20 && 5 :>', 1],
['<:= $value10 == 10 || $value20 == 20 || 5 :>', 1],
['<:= $value10 == 10 || $value20 != 20 || 5 :>', 1],
['<:= $value10 != 10 || $value20 != 20 && 5 :>', ''],
['<:= $value10 != 10 || $value20 != 20 || 5 :>', 5],
['<:= $value10 == 10 and $value20 == 20 and 5 :>', 5],
['<:= $value10 == 10 and $value20 != 20 and 5 :>', ''],
['<:= $value10 == 10 and $value20 == 20 or 5 :>', 1],
['<:= $value10 == 10 and $value20 != 20 or 5 :>', 5],
['<:= $value10 != 10 and $value20 != 20 and 5 :>', ''],
['<:= $value10 != 10 and $value20 != 20 or 5 :>', 5],
['<:= $value10 == 10 or $value20 == 20 and 5 :>', 1],
['<:= $value10 == 10 or $value20 != 20 and 5 :>', 1],
['<:= $value10 == 10 or $value20 == 20 or 5 :>', 1],
['<:= $value10 == 10 or $value20 != 20 or 5 :>', 1],
['<:= $value10 != 10 or $value20 != 20 and 5 :>', ''],
['<:= $value10 != 10 or $value20 != 20 or 5 :>', 5],
['<:= $value10 == 10 or $value20 == 20 and $value10 == 10 :>', 1],
['<:= $value10 == 10 or $value20 != 20 and $value10 == 10 :>', 1],
['<:= $value10 == 10 or $value20 == 20 or $value10 == 10 :>', 1],
['<:= $value10 == 10 or $value20 != 20 or $value10 == 10 :>', 1],
['<:= $value10 != 10 or $value20 != 20 and $value10 == 10 :>', ''],
['<:= $value10 != 10 or $value20 != 20 or $value10 == 10 :>', 1],
['<:= $value10 == 10 or $value20 == 20 or $value10 != 10 :>', 1],
['<:= $value10 == 10 and $value20 == 20 and $value10 == 10 :>', 1],
['<:= $value10 == 10 and $value20 != 20 and $value10 == 10 :>', ''],
['<:= $value10 == 10 and $value20 == 20 or $value10 == 10 :>', 1],
['<:= $value10 == 10 and $value20 != 20 or $value10 == 10 :>', 1],
['<:= $value10 != 10 and $value20 != 20 and $value10 == 10 :>', ''],
['<:= $value10 != 10 and $value20 != 20 or $value10 == 10 :>', 1],
['<:= $value10 == 10 and $value20 == 20 or $value10 != 10 :>', 1],
['<: $value10 == 10 and $value10 == 10 and $value10 == 10 or $value10 != 10 :>', 1 ],
['<: $value10 == 10 and $value10 == 10 and $value10 == 10 or $value10 == 10 :>', 1 ],
['<: $value10 != 10 and $value10 == 10 and $value10 == 10 or $value10 == 10 :>', 1 ],
['<:= $value0 && 20 :>', 0 ],
['<:= $value10 && 20 :>', 20 ],
['<:= "" && 20 :>', "" ],
['<:= (nil && 20) == nil :>', 1 ], # cannot print nil (undef)
['<:= $value0 and 20 :>', 0 ],
['<:= $value10 and 20 :>', 20 ],
['<:= "" and 20 :>', "" ],
['<:= (nil and 20) == nil :>', 1 ], # cannot print nil (undef)
['<:= $value0 || 20 :>', 20 ],
['<:= $value10 || 20 :>', 10 ],
['<:= "" || 20 :>', 20 ],
['<:= nil || 20 :>', 20 ],
['<:= $value0 or 20 :>', 20 ],
['<:= $value10 or 20 :>', 10 ],
['<:= "" or 20 :>', 20 ],
['<:= nil or 20 :>', 20 ],
['<:= $value0 // 20 :>', 0 ],
['<:= $value10 // 20 :>', 10 ],
['<:= "" // 20 :>', "" ],
['<:= nil // 20 :>', 20 ],
['<:= !$value0 || 20 :>', 1 ],
['<:= !$value10 || 20 :>', 20 ],
['<:= not $value0 || 20 :>', "" ],
['<:= not $value10 || 0 :>', "" ],
['<:= $value0 == 10 ? 100 : 0 || 200 :>', ( 0 == 10 ? 100 : 0 || 200 ) ],
['<:= $value10 == 10 ? 100 : 0 || 200 :>', (10 == 10 ? 100 : 0 || 200 ) ],
['<:= $value0 == 10 ? 0 : 100 || 200 :>', ( 0 == 10 ? 0 : 100 || 200 ) ],
['<:= $value10 == 10 ? 0 : 100 || 200 :>', (10 == 10 ? 0 : 100 || 200 ) ],
['<:= $value0 == 10 ? 100 : 0 or 200 :>', ( 0 == 10 ? 100 : 0 or 200 ) ],
['<:= $value10 == 10 ? 100 : 0 or 200 :>', (10 == 10 ? 100 : 0 or 200 ) ],
['<:= $value0 == 10 ? 0 : 100 or 200 :>', ( 0 == 10 ? 0 : 100 or 200 ) ],
['<:= $value10 == 10 ? 0 : 100 or 200 :>', (10 == 10 ? 0 : 100 or 200 ) ],
['<: $value10 == 10 ? 100
: $value10 == 20 ? 200
: $value10 == 30 ? 300
: 400 :>', 100 ],
['<: $value20 == 10 ? 100
: $value20 == 20 ? 200
: $value20 == 30 ? 300
: 400 :>', 200 ],
['<: $value0 == 10 ? 100
: $value0 == 20 ? 200
: $value0 == 30 ? 300
: 400 :>', 400 ],
[': defined($value0) ? 1 : 0', 1],
[': defined($no_such_var) ? 1 : 0', 0],
[': defined $value0 ? 1 : 0', 1],
[': defined $no_such_var ? 1 : 0', 0],
[': !defined($value0) ? 1 : 0', 0],
[': !defined($no_such_var) ? 1 : 0', 1],
[': !defined $value0 ? 1 : 0', 0],
[': !defined $no_such_var ? 1 : 0', 1],
[': defined $value10 + 10', defined 10 + 10],
[': $undefined1 // $undefined2 // 10', 10],
[': $undefined1 // ( $undefined2 // 10 )', 10],
['<:= ($value10 == 10 and $value20 == 20) ? "true" : "false":>', "true"],
['<:= ($value10 == 10 and $value20 == 20 or $value10 != 10) ? "true" : "false":>', "true"],
['<:= ($value10 == 10 and $value20 == 20 or $value10 != 10) ? "true" : "false":>
<:= ($value10 != 10 and $value20 == 20 or $value10 != 10) ? "true" : "false":>', "true\n false"],
);
foreach my $pair(@data) {
my($in, $out) = @$pair;
my %vars = (
value0 => 0,
value10 => 10,
value20 => 20,
);
is $tx->render_string($in, \%vars), $out or diag $in;
if(0) {
my $value0 = $vars{value0};
my $value10 = $vars{value10};
my $value20 = $vars{value20};
$in =~ s/\A <:=? (.+) :> \z/$1/xms;
$in =~ s/\A ://xms;
$in =~ s/\b nil \b/undef/xmsg;
no strict 'vars';
is eval($in), $out or diag $@, $in;
}
}
done_testing;
|