6 use Test::More tests => 9 + 3 * 10;
10 my $tikz = Tikz->formatter(
15 my ($set, $desc, $exp, $layers) = @_;
17 local $Test::Builder::Level = $Test::Builder::Level + 1;
19 my ($head, $decl, $body) = eval {
20 $tikz->render(ref $set eq 'ARRAY' ? @$set : $set);
22 is $@, '', "$desc: no error";
24 unless (ref $exp eq 'ARRAY') {
25 $exp = [ split /\n/, $exp ];
27 unshift @$exp, '\begin{tikzpicture}';
28 push @$exp, '\end{tikzpicture}';
31 map("\\pgfdeclarelayer{$_}", @$layers),
32 "\\pgfsetlayers{main,@{[join ',', @$layers]}}",
35 is_deeply $decl, $exp_decl, "$desc: declarations";
36 is_deeply $body, $exp, "$desc: body";
40 Tikz->layer('middle');
42 is $@, '', 'creating a layer doesn\'t croak';
47 above => [ 'middle' ],
50 is $@, '', 'creating a layer above another doesn\'t croak';
56 below => [ 'middle' ],
59 is $@, '', 'creating a layer above and below anothers doesn\'t croak';
65 is $@, '', 'creating a layered raw set doesn\'t croak';
67 check $foo, 'one layered raw set', <<'RES', [ 'middle' ];
68 \begin{pgfonlayer}{middle}
77 is $@, '', 'creating another layered raw set doesn\'t croak';
79 my $seq = Tikz->seq($foo, $bar);
81 check $seq, 'a sequence of two layered raw sets', <<'RES', [ qw/middle top/ ];
82 \begin{pgfonlayer}{middle}
85 \begin{pgfonlayer}{top}
92 qr/Validation failed for '\Q$tc\E'/;
98 like $@, failed_valid('Str'), 'directly adding a wrong layer croaks';
101 $seq->layer($bottom);
103 is $@, '', 'directly adding a layer to a sequence doesn\'t croak';
108 is $@, '', 'calling an empty ->layer onto a sequence doesn\'t croak';
109 is "$res", "$seq", 'empty ->layer returns the object itself';
111 check $seq, 'a layered sequence', <<'RES', [ qw/bottom middle top/ ];
112 \begin{pgfonlayer}{bottom}
113 \begin{pgfonlayer}{middle}
116 \begin{pgfonlayer}{top}
122 my $baz = Tikz->raw('baz');
125 my $red = Tikz->color('red');
128 check $seq, 'mods folding with layers 1', <<'RES', [ qw/bottom middle top/ ];
129 \begin{pgfonlayer}{bottom}
130 \begin{scope} [color=red]
131 \begin{pgfonlayer}{middle}
132 \draw [color=red] foo ;
134 \begin{pgfonlayer}{top}
135 \draw [color=red] bar ;
144 check $seq, 'mods folding with layers 2', <<'RES', [ qw/bottom middle top/ ];
145 \begin{pgfonlayer}{bottom}
146 \begin{scope} [color=red]
147 \begin{pgfonlayer}{middle}
148 \draw [color=red] foo ;
150 \begin{pgfonlayer}{top}
151 \draw [color=red] bar ;
153 \begin{pgfonlayer}{top}
154 \draw [color=red] baz ;
160 my $seq2 = Tikz->seq($bar, $baz, $foo)
163 check $seq2, 'mods folding with layers 3', <<'RES', [ qw/middle top/ ];
164 \begin{scope} [color=red]
165 \begin{pgfonlayer}{top}
166 \begin{scope} [color=red]
171 \begin{pgfonlayer}{middle}
172 \draw [color=red] foo ;
177 my $qux = Tikz->raw('qux');
178 $seq2 = Tikz->seq($qux, $foo)
181 check $seq2, 'mods folding with layers 4', <<'RES', [ 'middle' ];
182 \begin{scope} [color=red]
184 \begin{pgfonlayer}{middle}
185 \draw [color=red] foo ;
190 my $seq3 = Tikz->seq($seq2, $bar)
193 check $seq3, 'mods folding with layers 5', <<'RES', [ qw/middle top/ ];
194 \begin{scope} [color=red]
196 \begin{pgfonlayer}{middle}
197 \draw [color=red] foo ;
199 \begin{pgfonlayer}{top}
200 \draw [color=red] bar ;
205 $seq3 = Tikz->seq($bar, $seq2)
208 check $seq3, 'mods folding with layers 6', <<'RES', [ qw/middle top/ ];
209 \begin{scope} [color=red]
210 \begin{pgfonlayer}{top}
211 \draw [color=red] bar ;
214 \begin{pgfonlayer}{middle}
215 \draw [color=red] foo ;
220 my $blue = Tikz->color('blue');
223 check $seq2, 'mods folding with layers 7', <<'RES', [ 'middle' ];
224 \begin{scope} [color=red]
225 \draw [color=blue] qux ;
226 \begin{pgfonlayer}{middle}
227 \draw [color=red] foo ;