]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/blob - t/22-clip.t
Update VPIT::TestHelpers to 15e8aee3
[perl/modules/LaTeX-TikZ.git] / t / 22-clip.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 8 + 2 * 16;
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 $clip1 = Tikz->raw('clip1');
18 my $clip2 = Tikz->raw('clip2');
19
20 my $foo = eval {
21  Tikz->raw('foo')
22      ->clip($clip1);
23 };
24 is $@, '', 'creating a clipping a raw path with ->clip doesn\'t croak';
25
26 check $foo, 'one clipped raw set', <<'RES';
27 \begin{scope}
28 \clip clip1 ;
29 \draw foo ;
30 \end{scope}
31 RES
32
33 my $bar = eval {
34  Tikz->raw('bar')
35      ->mod(Tikz->clip(Tikz->raw('clip1')));
36 };
37 is $@, '', 'creating a clipping a raw path with ->mod doesn\'t croak';
38
39 check $bar, 'another clipped raw set', <<'RES';
40 \begin{scope}
41 \clip clip1 ;
42 \draw bar ;
43 \end{scope}
44 RES
45
46 my $seq = Tikz->seq($foo, $bar);
47
48 check $seq, 'mods folding with clips 1', <<'RES';
49 \begin{scope}
50 \clip clip1 ;
51 \draw foo ;
52 \draw bar ;
53 \end{scope}
54 RES
55
56 my $baz = Tikz->raw('baz')
57               ->clip($clip2);
58
59 check Tikz->seq($seq, $baz), 'mods folding with clips 2', <<'RES';
60 \begin{scope}
61 \clip clip1 ;
62 \draw foo ;
63 \draw bar ;
64 \end{scope}
65 \begin{scope}
66 \clip clip2 ;
67 \draw baz ;
68 \end{scope}
69 RES
70
71 check Tikz->seq($baz, $seq), 'mods folding with clips 3', <<'RES';
72 \begin{scope}
73 \clip clip2 ;
74 \draw baz ;
75 \end{scope}
76 \begin{scope}
77 \clip clip1 ;
78 \draw foo ;
79 \draw bar ;
80 \end{scope}
81 RES
82
83 my $seq2 = Tikz->seq($seq, $baz)
84                ->clip($clip1);
85
86 check $seq2, 'mods folding with clips 4', <<'RES';
87 \begin{scope}
88 \clip clip1 ;
89 \draw foo ;
90 \draw bar ;
91 \begin{scope}
92 \clip clip2 ;
93 \draw baz ;
94 \end{scope}
95 \end{scope}
96 RES
97
98 $seq2 = Tikz->seq($seq, $baz)
99             ->clip($clip2);
100
101 check $seq2, 'mods folding with clips 5', <<'RES';
102 \begin{scope}
103 \clip clip2 ;
104 \begin{scope}
105 \clip clip1 ;
106 \draw foo ;
107 \draw bar ;
108 \end{scope}
109 \draw baz ;
110 \end{scope}
111 RES
112
113 $seq2->clip($clip1);
114
115 check $seq2, 'mods folding with clips 6', <<'RES';
116 \begin{scope}
117 \clip clip2 ;
118 \begin{scope}
119 \clip clip1 ;
120 \draw foo ;
121 \draw bar ;
122 \draw baz ;
123 \end{scope}
124 \end{scope}
125 RES
126
127 $seq2->mod(Tikz->color('red'));
128
129 check $seq2, 'mods folding with clips 7', <<'RES';
130 \begin{scope} [color=red]
131 \clip clip2 ;
132 \begin{scope}
133 \clip clip1 ;
134 \draw foo ;
135 \draw bar ;
136 \draw baz ;
137 \end{scope}
138 \end{scope}
139 RES
140
141 $seq2->layer('top');
142 $seq->layer('bottom');
143
144 check $seq2, 'mods folding with clips and layers', <<'RES';
145 \begin{pgfonlayer}{top}
146 \begin{scope} [color=red]
147 \clip clip2 ;
148 \begin{scope}
149 \clip clip1 ;
150 \begin{pgfonlayer}{bottom}
151 \begin{scope} [color=red]
152 \clip clip2 ;
153 \begin{scope}
154 \clip clip1 ;
155 \draw foo ;
156 \draw bar ;
157 \end{scope}
158 \end{scope}
159 \end{pgfonlayer}
160 \draw baz ;
161 \end{scope}
162 \end{scope}
163 \end{pgfonlayer}
164 RES
165
166 my $a = Tikz->point;
167 my $b = Tikz->point(4, 2);
168 my $c = Tikz->point(1, 3);
169 my $d = Tikz->point(2, 1);
170
171 my $r1 = Tikz->rectangle($a, $b);
172 my $r2 = Tikz->rectangle($c, $d);
173
174 $seq = eval {
175  Tikz->seq(
176   Tikz->raw("foo")
177        ->clip($r1)
178  )->clip($r2);
179 };
180 is $@, '', 'two intersecting rectangle clips doesn\'t croak';
181
182 check $seq, 'two intersecting rectangle clips', <<'RES';
183 \begin{scope}
184 \clip (1cm,3cm) rectangle (2cm,1cm) ;
185 \begin{scope}
186 \clip (0cm,0cm) rectangle (4cm,2cm) ;
187 \draw foo ;
188 \end{scope}
189 \end{scope}
190 RES
191
192 $r2 = Tikz->rectangle($a, $d); # $r2 is a subset of $r1
193
194 $seq = eval {
195  Tikz->seq(
196   Tikz->raw("foo")
197        ->clip($r1)
198  )->clip($r2);
199 };
200 is $@, '', 'two overlapping rectangle clips 1 doesn\'t croak';
201
202 check $seq, 'two overlapping rectangle clips 1', <<'RES';
203 \begin{scope}
204 \clip (0cm,0cm) rectangle (2cm,1cm) ;
205 \draw foo ;
206 \end{scope}
207 RES
208
209 $seq = eval {
210  Tikz->seq(
211   Tikz->raw("foo")
212        ->clip($r2)
213  )->clip($r1);
214 };
215 is $@, '', 'two overlapping rectangle clips 2 doesn\'t croak';
216
217 check $seq, 'two overlapping rectangle clips 2', <<'RES';
218 \begin{scope}
219 \clip (0cm,0cm) rectangle (4cm,2cm) ;
220 \begin{scope}
221 \clip (0cm,0cm) rectangle (2cm,1cm) ;
222 \draw foo ;
223 \end{scope}
224 \end{scope}
225 RES
226
227 my $c1 = Tikz->circle($a, 2);
228 my $c2 = Tikz->circle($d, 3);
229
230 $seq = eval {
231  Tikz->seq(
232   Tikz->raw("foo")
233        ->clip($c1)
234  )->clip($c2);
235 };
236 is $@, '', 'two intersecting circle clips doesn\'t croak';
237
238 check $seq, 'two intersecting circle clips', <<'RES';
239 \begin{scope}
240 \clip (2cm,1cm) circle (3cm) ;
241 \begin{scope}
242 \clip (0cm,0cm) circle (2cm) ;
243 \draw foo ;
244 \end{scope}
245 \end{scope}
246 RES
247
248 $c2 = Tikz->circle($a, 1); # $c2 is a subset of $c1
249
250 $seq = eval {
251  Tikz->seq(
252   Tikz->raw("foo")
253        ->clip($c1)
254  )->clip($c2);
255 };
256 is $@, '', 'two overlapping circle clips 1 doesn\'t croak';
257
258 check $seq, 'two overlapping circle clips 1', <<'RES';
259 \begin{scope}
260 \clip (0cm,0cm) circle (1cm) ;
261 \draw foo ;
262 \end{scope}
263 RES
264
265 $seq = eval {
266  Tikz->seq(
267   Tikz->raw("foo")
268        ->clip($c2)
269  )->clip($c1);
270 };
271 is $@, '', 'two overlapping circle clips 2 doesn\'t croak';
272
273 check $seq, 'two overlapping circle clips 2', <<'RES';
274 \begin{scope}
275 \clip (0cm,0cm) circle (2cm) ;
276 \begin{scope}
277 \clip (0cm,0cm) circle (1cm) ;
278 \draw foo ;
279 \end{scope}
280 \end{scope}
281 RES