]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/blob - t/22-clip.t
Test clips
[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 => 2 + 2 * 9;
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 $clip1 = Tikz->raw('clip1');
34 my $clip2 = Tikz->raw('clip2');
35
36 my $foo = eval {
37  Tikz->raw('foo')
38      ->clip($clip1);
39 };
40 is $@, '', 'creating a clipping a raw path with ->clip doesn\'t croak';
41
42 check $foo, 'one clipped raw set', <<'RES';
43 \begin{scope}
44 \clip clip1 ;
45 \draw foo ;
46 \end{scope}
47 RES
48
49 my $bar = eval {
50  Tikz->raw('bar')
51      ->mod(Tikz->clip(Tikz->raw('clip1')));
52 };
53 is $@, '', 'creating a clipping a raw path with ->mod doesn\'t croak';
54
55 check $bar, 'another clipped raw set', <<'RES';
56 \begin{scope}
57 \clip clip1 ;
58 \draw bar ;
59 \end{scope}
60 RES
61
62 my $seq = Tikz->seq($foo, $bar);
63
64 check $seq, 'mods folding with clips 1', <<'RES';
65 \begin{scope}
66 \clip clip1 ;
67 \draw foo ;
68 \draw bar ;
69 \end{scope}
70 RES
71
72 my $baz = Tikz->raw('baz')
73               ->clip($clip2);
74
75 check Tikz->seq($seq, $baz), 'mods folding with clips 2', <<'RES';
76 \begin{scope}
77 \clip clip1 ;
78 \draw foo ;
79 \draw bar ;
80 \end{scope}
81 \begin{scope}
82 \clip clip2 ;
83 \draw baz ;
84 \end{scope}
85 RES
86
87 check Tikz->seq($baz, $seq), 'mods folding with clips 3', <<'RES';
88 \begin{scope}
89 \clip clip2 ;
90 \draw baz ;
91 \end{scope}
92 \begin{scope}
93 \clip clip1 ;
94 \draw foo ;
95 \draw bar ;
96 \end{scope}
97 RES
98
99 my $seq2 = Tikz->seq($seq, $baz)
100                ->clip($clip1);
101
102 check $seq2, 'mods folding with clips 4', <<'RES';
103 \begin{scope}
104 \clip clip1 ;
105 \draw foo ;
106 \draw bar ;
107 \begin{scope}
108 \clip clip2 ;
109 \draw baz ;
110 \end{scope}
111 \end{scope}
112 RES
113
114 $seq2 = Tikz->seq($seq, $baz)
115             ->clip($clip2);
116
117 check $seq2, 'mods folding with clips 5', <<'RES';
118 \begin{scope}
119 \clip clip2 ;
120 \begin{scope}
121 \clip clip1 ;
122 \draw foo ;
123 \draw bar ;
124 \end{scope}
125 \draw baz ;
126 \end{scope}
127 RES
128
129 $seq2->clip($clip1);
130
131 check $seq2, 'mods folding with clips 6', <<'RES';
132 \begin{scope}
133 \clip clip2 ;
134 \begin{scope}
135 \clip clip1 ;
136 \draw foo ;
137 \draw bar ;
138 \draw baz ;
139 \end{scope}
140 \end{scope}
141 RES
142
143 $seq2->mod(Tikz->color('red'));
144
145 check $seq2, 'mods folding with clips 7', <<'RES';
146 \begin{scope} [color=red]
147 \clip clip2 ;
148 \begin{scope}
149 \clip clip1 ;
150 \draw foo ;
151 \draw bar ;
152 \draw baz ;
153 \end{scope}
154 \end{scope}
155 RES
156