]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/blob - t/10-set.t
Flatten scopes at creation time
[perl/modules/LaTeX-TikZ.git] / t / 10-set.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 29 + 2 * 21;
7
8 use LaTeX::TikZ;
9
10 use lib 't/lib';
11 use LaTeX::TikZ::TestHelper;
12
13 using Tikz->formatter(
14  format => '%d',
15 );
16
17 my $foo = eval {
18  Tikz->raw('foo');
19 };
20 is $@, '', 'creating a raw set doesn\'t croak';
21
22 check $foo, 'one raw set', <<'RES';
23 \draw foo ;
24 RES
25
26 my $seq2 = eval {
27  Tikz->seq($foo, $foo);
28 };
29 is $@, '', 'creating a 2-sequence doesn\'t croak';
30
31 check $seq2, 'two identical raw sets', <<'RES';
32 \draw foo ;
33 \draw foo ;
34 RES
35
36 my $bar = eval {
37  Tikz->raw('bar');
38 };
39 is $@, '', 'creating another raw set doesn\'t croak';
40
41 $seq2 = eval {
42  Tikz->seq($foo, $bar);
43 };
44 is $@, '', 'creating another 2-sequence doesn\'t croak';
45
46 check $seq2, 'two different raw sets', <<'RES';
47 \draw foo ;
48 \draw bar ;
49 RES
50
51 my $seq3 = eval {
52  Tikz->seq($bar, $seq2, $foo);
53 };
54 is $@, '', 'creating a complex sequence doesn\'t croak';
55
56 check $seq3, 'two different raw sets and a sequence', <<'RES';
57 \draw bar ;
58 \draw foo ;
59 \draw bar ;
60 \draw foo ;
61 RES
62
63 my $baz = eval {
64  Tikz->raw('baz');
65 };
66 is $@, '', 'creating yet another raw set doesn\'t croak';
67
68 eval {
69  $foo->add($baz);
70 };
71 like $@, qr/Can't locate object method "add"/,
72                                          'adding something to a raw set croaks';
73
74 eval {
75  $seq2->add($baz, $baz);
76 };
77 is $@, '', 'adding something to a sequence set doesn\'t croak';
78
79 check $seq3, 'two different raw sets and an extended sequence', <<'RES';
80 \draw bar ;
81 \draw foo ;
82 \draw bar ;
83 \draw baz ;
84 \draw baz ;
85 \draw foo ;
86 RES
87
88 my $seq4 = eval {
89  Tikz->seq;
90 };
91 is $@, '', 'creating an empty sequence doesn\'t croak';
92
93 check $seq4, 'an empty sequence', '';
94
95 $seq4 = eval {
96  Tikz->seq(Tikz->seq);
97 };
98 is $@, '', 'creating a sequence that contains an empty sequence doesn\'t croak';
99
100 check $seq4, 'a sequence that contains an empty sequence', '';
101
102 $seq4 = eval {
103  Tikz->seq($foo, Tikz->seq);
104 };
105 is $@, '',
106  'creating a sequence that contains a set and an empty sequence doesn\'t croak';
107
108 check $seq4, 'a sequence that contains a set and an empty sequence', <<'RES';
109 \draw foo ;
110 RES
111
112 $seq4 = eval {
113  Tikz->seq(Tikz->seq, $foo);
114 };
115 is $@, '',
116  'creating a sequence that contains an empty sequence and a set doesn\'t croak';
117
118 check $seq4, 'a sequence that contains an empty sequence and a set', <<'RES';
119 \draw foo ;
120 RES
121
122 $seq4 = eval {
123  Tikz->seq($foo, $bar, Tikz->seq);
124 };
125 is $@, '',
126 'creating a sequence that contains 2 sets and an empty sequence doesn\'t croak';
127
128 check $seq4, 'a sequence that contains 2 sets and an empty sequence', <<'RES';
129 \draw foo ;
130 \draw bar ;
131 RES
132
133 $seq4 = eval {
134  Tikz->seq($foo, Tikz->seq, $bar);
135 };
136 is $@, '', 'creating a sequence that contains a set, an empty sequence, a set doesn\'t croak';
137
138 check $seq4, 'a sequence that contains a set, an empty sequence, a set',<<'RES';
139 \draw foo ;
140 \draw bar ;
141 RES
142
143 $seq4 = eval {
144  Tikz->seq(Tikz->seq, $foo, $bar);
145 };
146 is $@, '',
147 'creating a sequence that contains an empty sequence and 2 sets';
148
149 check $seq4, 'a sequence that contains an empty sequence and 2 sets', <<'RES';
150 \draw foo ;
151 \draw bar ;
152 RES
153
154 sub failed_valid {
155  my ($tc) = @_;
156  qr/Validation failed for '\Q$tc\E'/;
157 }
158
159 eval {
160  Tikz->union($foo, $seq2);
161 };
162 like $@, failed_valid('Maybe[ArrayRef[LaTeX::TikZ::Set::Path]]'),
163          'creating an union that contains a sequence croaks';
164
165 my $union = eval {
166  Tikz->union($foo, $bar, $baz);
167 };
168 is $@, '', 'creating an union set doesn\'t croak';
169
170 check $union, 'one union set', <<'RES';
171 \draw foo bar baz ;
172 RES
173
174 eval {
175  $union->add($foo);
176 };
177 is $@, '', 'adding something to a union set doesn\'t croak';
178
179 check Tikz->seq($union, $union), 'two identical union sets', <<'RES';
180 \draw foo bar baz foo ;
181 \draw foo bar baz foo ;
182 RES
183
184 eval {
185  $union->add($seq2);
186 };
187 like $@, failed_valid('LaTeX::TikZ::Set::Path'),
188          'adding a sequence to a union croaks';
189
190 my $join = eval {
191  Tikz->join('--' => $foo, $bar, $baz);
192 };
193 is $@, '', 'creating an chain set joined with a string doesn\'t croak';
194
195 check $join, 'one chain set joined with a string', <<'RES';
196 \draw foo -- bar -- baz ;
197 RES
198
199 eval {
200  $join->add($foo);
201 };
202 is $@, '', 'adding a set to a chain set joined with a string doesn\'t croak';
203
204 check $join, 'one appended chain set joined with a string', <<'RES';
205 \draw foo -- bar -- baz -- foo ;
206 RES
207
208 $join = eval {
209  Tikz->join(sub { ' ' } => $foo, $bar, $baz);
210 };
211 is $@, '', 'creating an chain set joined with a coderef doesn\'t croak';
212
213 check $join, 'one chain set joined with a string', <<'RES';
214 \draw foo bar baz ;
215 RES
216
217 eval {
218  $join->add($foo);
219 };
220 is $@, '', 'adding a set to a chain set joined with a coderef doesn\'t croak';
221
222 check $join, 'one appended chain set joined with a coderef', <<'RES';
223 \draw foo bar baz foo ;
224 RES
225
226 $join = eval {
227  Tikz->join([ '', '..', '--' ] => $foo, $bar, $baz);
228 };
229 is $@, '', 'creating an chain set joined with an arrayref doesn\'t croak';
230
231 check $join, 'one chain set joined with a string', <<'RES';
232 \draw foo bar .. baz ;
233 RES
234
235 eval {
236  $join->add($foo);
237 };
238 is $@, '', 'adding a set to a chain set joined with an arrayref doesn\'t croak';
239
240 check $join, 'one appended chain set joined with an arrayref', <<'RES';
241 \draw foo bar .. baz -- foo ;
242 RES
243
244 eval {
245  $join->add($bar);
246 };
247 is $@, '',
248    'adding too many sets to a chain set joined with an arrayref doesn\'t croak';
249
250 eval {
251  using()->render($join);
252 };
253 like $@, qr/^Invalid connector/,
254          'adding too many sets to a chain set joined with an arrayref croaks';
255
256 my $chain = eval {
257  Tikz->chain($foo => '--' => $bar => '->' => $baz);
258 };
259 is $@, '', 'creating an chain set with chain doesn\'t croak';
260
261 check $chain, 'one chain set from chain', <<'RES';
262 \draw foo -- bar -> baz ;
263 RES
264
265 eval {
266  Tikz->chain($foo, '--', $bar, '--');
267 };
268 like $@, qr/^The 'chain' command expects an odd number of arguments/,
269          'creating an union that contains a sequence croaks';