]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/blob - t/20-mod.t
Register Tikz->formatter in the API
[perl/modules/LaTeX-TikZ.git] / t / 20-mod.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 14 + 2 * 18;
7
8 use LaTeX::TikZ;
9
10 my $tikz = Tikz->formatter(
11  format => '%d',
12 );
13
14 sub check {
15  my ($set, $desc, $exp) = @_;
16
17  local $Test::Builder::Level = $Test::Builder::Level + 1;
18
19  my ($head, $decl, $body) = eval {
20   $tikz->render(ref $set eq 'ARRAY' ? @$set : $set);
21  };
22  is $@, '', "$desc: no error";
23
24  unless (ref $exp eq 'ARRAY') {
25   $exp = [ split /\n/, $exp ];
26  }
27  unshift @$exp, '\begin{tikzpicture}';
28  push    @$exp, '\end{tikzpicture}';
29
30  is_deeply $body, $exp, $desc;
31 }
32
33 my $red = eval {
34  Tikz->color('red');
35 };
36 is $@, '', 'creating a color mod doesn\'t croak';
37
38 my $foo = eval {
39  Tikz->raw('foo')
40      ->mod($red)
41 };
42 is $@, '', 'creating a modded raw set doesn\'t croak';
43
44 check $foo, 'one modded raw set', <<'RES';
45 \draw [color=red] foo ;
46 RES
47
48 my $width = eval {
49  Tikz->width(25);
50 };
51 is $@, '', 'creating a width mod doesn\'t croak';
52
53 eval {
54  $foo->mod($width);
55 };
56 is $@, '', 'adding another mod doesn\'t croak';
57
58 check $foo, 'one double modded raw set', <<'RES';
59 \draw [color=red,line width=4.0pt] foo ;
60 RES
61
62 eval {
63  $foo->mod($red);
64 };
65 is $@, '', 're-adding an previously set mod doesn\'t croak';
66
67 check $foo, 'one triple modded raw set (with duplicates)', <<'RES';
68 \draw [color=red,line width=4.0pt] foo ;
69 RES
70
71 my $bar = Tikz->raw('bar');
72 $foo = eval {
73  Tikz->seq(
74   Tikz->raw('foo'),
75   $bar
76  )->mod($red, $width);
77 };
78 is $@, '', 'setting two mods in a row doesn\'t croak';
79
80 check $foo, 'one triple modded sequence of raw sets', <<'RES';
81 \begin{scope} [color=red,line width=4.0pt]
82 \draw foo ;
83 \draw bar ;
84 \end{scope}
85 RES
86
87 my $nested = eval {
88  Tikz->seq(
89   Tikz->seq(Tikz->raw("foo"))
90       ->mod($red)
91  )->mod($width)
92 };
93 is $@, '', 'creating nested modded sequences doesn\'t croak';
94
95 check $nested, 'nested modded sequences', <<'RES';
96 \draw [line width=4.0pt,color=red] foo ;
97 RES
98
99 my $baz = eval {
100  Tikz->raw('baz')
101      ->mod($red);
102 };
103 is $@, '', 'creating another colored raw set doesn\'t croak';
104
105 check [ $foo, $baz ], 'mods folding 1', <<'RES';
106 \begin{scope} [color=red]
107 \begin{scope} [line width=4.0pt]
108 \draw foo ;
109 \draw bar ;
110 \end{scope}
111 \draw baz ;
112 \end{scope}
113 RES
114
115 check [ $baz, $foo ], 'mods folding 2', <<'RES';
116 \begin{scope} [color=red]
117 \draw baz ;
118 \begin{scope} [line width=4.0pt]
119 \draw foo ;
120 \draw bar ;
121 \end{scope}
122 \end{scope}
123 RES
124
125 my $qux = eval {
126  Tikz->raw('qux')
127      ->mod($width);
128 };
129 is $@, '', 'creating another raw set with modded width doesn\'t croak';
130
131 check [ $foo, $baz, $qux ], 'mods folding 3', <<'RES';
132 \begin{scope} [color=red]
133 \begin{scope} [line width=4.0pt]
134 \draw foo ;
135 \draw bar ;
136 \end{scope}
137 \draw baz ;
138 \end{scope}
139 \draw [line width=4.0pt] qux ;
140 RES
141
142 check [ $foo, $qux, $baz ], 'mods folding 4', <<'RES';
143 \begin{scope} [line width=4.0pt]
144 \begin{scope} [color=red]
145 \draw foo ;
146 \draw bar ;
147 \end{scope}
148 \draw qux ;
149 \end{scope}
150 \draw [color=red] baz ;
151 RES
152
153 check [ $baz, $foo, $qux ], 'mods folding 5', <<'RES';
154 \begin{scope} [color=red]
155 \draw baz ;
156 \begin{scope} [line width=4.0pt]
157 \draw foo ;
158 \draw bar ;
159 \end{scope}
160 \end{scope}
161 \draw [line width=4.0pt] qux ;
162 RES
163
164 check [ $baz, $qux, $foo ], 'mods folding 6', <<'RES';
165 \draw [color=red] baz ;
166 \draw [line width=4.0pt] qux ;
167 \begin{scope} [color=red,line width=4.0pt]
168 \draw foo ;
169 \draw bar ;
170 \end{scope}
171 RES
172
173 check [ $qux, $foo, $baz ], 'mods folding 7', <<'RES';
174 \begin{scope} [line width=4.0pt]
175 \draw qux ;
176 \begin{scope} [color=red]
177 \draw foo ;
178 \draw bar ;
179 \end{scope}
180 \end{scope}
181 \draw [color=red] baz ;
182 RES
183
184 check [ $qux, $baz, $foo ], 'mods folding 8', <<'RES';
185 \draw [line width=4.0pt] qux ;
186 \draw [color=red] baz ;
187 \begin{scope} [color=red,line width=4.0pt]
188 \draw foo ;
189 \draw bar ;
190 \end{scope}
191 RES
192
193 my $seq = eval {
194  Tikz->seq($foo, $qux, $baz)
195      ->mod($red);
196 };
197 is $@, '', 'creating a modded sequence set doesn\'t croak';
198
199 check $seq, 'mod covering 1', <<'RES';
200 \begin{scope} [color=red]
201 \begin{scope} [line width=4.0pt]
202 \draw foo ;
203 \draw bar ;
204 \draw qux ;
205 \end{scope}
206 \draw baz ;
207 \end{scope}
208 RES
209
210 my $seq2 = eval {
211  Tikz->seq($seq, $qux)
212      ->mod(Tikz->color('blue'));
213 };
214 is $@, '', 'creating another modded sequence set doesn\'t croak';
215
216 check $seq2, 'mod covering 2', <<'RES';
217 \begin{scope} [color=blue]
218 \begin{scope} [color=red]
219 \begin{scope} [line width=4.0pt]
220 \draw foo ;
221 \draw bar ;
222 \draw qux ;
223 \end{scope}
224 \draw baz ;
225 \end{scope}
226 \draw [line width=4.0pt] qux ;
227 \end{scope}
228 RES
229
230 eval {
231  $foo->mod(Tikz->raw_mod('raw1'));
232  $seq->mod(Tikz->raw_mod('raw2'));
233 };
234 is $@, '', 'creating and adding raw mods doesn\'t croak';
235
236 check $seq, 'mod covering 3', <<'RES';
237 \begin{scope} [color=red,raw2]
238 \begin{scope} [line width=4.0pt]
239 \begin{scope} [raw1]
240 \draw foo ;
241 \draw bar ;
242 \end{scope}
243 \draw qux ;
244 \end{scope}
245 \draw baz ;
246 \end{scope}
247 RES
248
249 eval {
250  $baz->mod(Tikz->raw_mod($_)) for qw/raw2 raw3/;
251 };
252 is $@, '', 'creating and adding another raw mod doesn\'t croak';
253
254 check $seq, 'mod covering 4', <<'RES';
255 \begin{scope} [color=red,raw2]
256 \begin{scope} [line width=4.0pt]
257 \begin{scope} [raw1]
258 \draw foo ;
259 \draw bar ;
260 \end{scope}
261 \draw qux ;
262 \end{scope}
263 \draw [raw3] baz ;
264 \end{scope}
265 RES
266
267 eval {
268  $bar->mod(Tikz->width(50));
269 };
270 is $@, '', 'creating and adding another width mod doesn\'t croak';
271
272 check $seq, 'mod covering 4', <<'RES';
273 \begin{scope} [color=red,raw2]
274 \begin{scope} [line width=4.0pt]
275 \begin{scope} [raw1]
276 \draw foo ;
277 \draw [line width=8.0pt] bar ;
278 \end{scope}
279 \draw qux ;
280 \end{scope}
281 \draw [raw3] baz ;
282 \end{scope}
283 RES