use strict;
use warnings;
-use Test::More tests => 9 + 3 * 6;
+use Test::More tests => 9 + 3 * 10;
use LaTeX::TikZ;
-my $tikz = Tikz->formatter(
+use lib 't/lib';
+use LaTeX::TikZ::TestHelper;
+
+using Tikz->formatter(
format => '%d',
);
-sub check {
+sub check_layers {
my ($set, $desc, $exp, $layers) = @_;
local $Test::Builder::Level = $Test::Builder::Level + 1;
- my ($head, $decl, $body) = eval {
- $tikz->render(ref $set eq 'ARRAY' ? @$set : $set);
- };
- is $@, '', "$desc: no error";
-
- unless (ref $exp eq 'ARRAY') {
- $exp = [ split /\n/, $exp ];
- }
- unshift @$exp, '\begin{tikzpicture}';
- push @$exp, '\end{tikzpicture}';
+ my ($head, $decl, $body) = check($set, $desc, $exp);
my $exp_decl = [
map("\\pgfdeclarelayer{$_}", @$layers),
];
is_deeply $decl, $exp_decl, "$desc: declarations";
- is_deeply $body, $exp, "$desc: body";
}
my $middle = eval {
};
is $@, '', 'creating a layered raw set doesn\'t croak';
-check $foo, 'one layered raw set', <<'RES', [ 'middle' ];
+check_layers $foo, 'one layered raw set', <<'RES', [ 'middle' ];
\begin{pgfonlayer}{middle}
\draw foo ;
\end{pgfonlayer}
my $seq = Tikz->seq($foo, $bar);
-check $seq, 'a sequence of two layered raw sets', <<'RES', [ qw/middle top/ ];
+check_layers $seq, 'a sequence of two layered raw sets',
+ <<'RES', [ qw<middle top> ];
\begin{pgfonlayer}{middle}
\draw foo ;
\end{pgfonlayer}
is $@, '', 'calling an empty ->layer onto a sequence doesn\'t croak';
is "$res", "$seq", 'empty ->layer returns the object itself';
-check $seq, 'a layered sequence', <<'RES', [ qw/bottom middle top/ ];
+check_layers $seq, 'a layered sequence', <<'RES', [ qw<bottom middle top> ];
\begin{pgfonlayer}{bottom}
\begin{pgfonlayer}{middle}
\draw foo ;
my $red = Tikz->color('red');
$seq->mod($red);
-check $seq, 'mods folding with layers 1', <<'RES', [ qw/bottom middle top/ ];
+check_layers $seq, 'mods folding with layers 1',
+ <<'RES', [ qw<bottom middle top> ];
\begin{pgfonlayer}{bottom}
\begin{scope} [color=red]
\begin{pgfonlayer}{middle}
$baz->mod($top);
-check $seq, 'mods folding with layers 2', <<'RES', [ qw/bottom middle top/ ];
+check_layers $seq, 'mods folding with layers 2',
+ <<'RES', [ qw<bottom middle top> ];
\begin{pgfonlayer}{bottom}
\begin{scope} [color=red]
\begin{pgfonlayer}{middle}
my $seq2 = Tikz->seq($bar, $baz, $foo)
->mod($red);
-check $seq2, 'mods folding with layers 3', <<'RES', [ qw/middle top/ ];
+check_layers $seq2, 'mods folding with layers 3', <<'RES', [ qw<middle top> ];
\begin{scope} [color=red]
\begin{pgfonlayer}{top}
\begin{scope} [color=red]
\end{scope}
RES
+my $qux = Tikz->raw('qux');
+$seq2 = Tikz->seq($qux, $foo)
+ ->mod($red);
+
+check_layers $seq2, 'mods folding with layers 4', <<'RES', [ 'middle' ];
+\begin{scope} [color=red]
+\draw qux ;
+\begin{pgfonlayer}{middle}
+\draw [color=red] foo ;
+\end{pgfonlayer}
+\end{scope}
+RES
+
+my $seq3 = Tikz->seq($seq2, $bar)
+ ->mod($red);
+
+check_layers $seq3, 'mods folding with layers 5', <<'RES', [ qw<middle top> ];
+\begin{scope} [color=red]
+\draw qux ;
+\begin{pgfonlayer}{middle}
+\draw [color=red] foo ;
+\end{pgfonlayer}
+\begin{pgfonlayer}{top}
+\draw [color=red] bar ;
+\end{pgfonlayer}
+\end{scope}
+RES
+
+$seq3 = Tikz->seq($bar, $seq2)
+ ->mod($red);
+
+check_layers $seq3, 'mods folding with layers 6', <<'RES', [ qw<middle top> ];
+\begin{scope} [color=red]
+\begin{pgfonlayer}{top}
+\draw [color=red] bar ;
+\end{pgfonlayer}
+\draw qux ;
+\begin{pgfonlayer}{middle}
+\draw [color=red] foo ;
+\end{pgfonlayer}
+\end{scope}
+RES
+
+my $blue = Tikz->color('blue');
+$qux->mod($blue);
+
+check_layers $seq2, 'mods folding with layers 7', <<'RES', [ 'middle' ];
+\begin{scope} [color=red]
+\draw [color=blue] qux ;
+\begin{pgfonlayer}{middle}
+\draw [color=red] foo ;
+\end{pgfonlayer}
+\end{scope}
+RES