X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=t%2F22-clip.t;h=029dc5b63c066705727a53a35024813d968187e0;hb=1ef0d773dfe4f90087af6a39b06061eaadb44a65;hp=800be76b528e3528da75cd1b8a96f51e1b783e10;hpb=038a21c751dcd34f83857e095d935bfa07b6b679;p=perl%2Fmodules%2FLaTeX-TikZ.git diff --git a/t/22-clip.t b/t/22-clip.t index 800be76..029dc5b 100644 --- a/t/22-clip.t +++ b/t/22-clip.t @@ -3,33 +3,17 @@ use strict; use warnings; -use Test::More tests => 2 + 2 * 9; +use Test::More tests => 8 + 2 * 16; use LaTeX::TikZ; -my $tikz = Tikz->formatter( +use lib 't/lib'; +use LaTeX::TikZ::TestHelper; + +using Tikz->formatter( format => '%d', ); -sub check { - my ($set, $desc, $exp) = @_; - - local $Test::Builder::Level = $Test::Builder::Level + 1; - - my ($head, $decl, $body) = eval { - $tikz->render(ref $set eq 'ARRAY' ? @$set : $set); - }; - is $@, '', "$desc: no error"; - - unless (ref $exp eq 'ARRAY') { - $exp = [ split /\n/, $exp ]; - } - unshift @$exp, '\begin{tikzpicture}'; - push @$exp, '\end{tikzpicture}'; - - is_deeply $body, $exp, $desc; -} - my $clip1 = Tikz->raw('clip1'); my $clip2 = Tikz->raw('clip2'); @@ -154,3 +138,144 @@ check $seq2, 'mods folding with clips 7', <<'RES'; \end{scope} RES +$seq2->layer('top'); +$seq->layer('bottom'); + +check $seq2, 'mods folding with clips and layers', <<'RES'; +\begin{pgfonlayer}{top} +\begin{scope} [color=red] +\clip clip2 ; +\begin{scope} +\clip clip1 ; +\begin{pgfonlayer}{bottom} +\begin{scope} [color=red] +\clip clip2 ; +\begin{scope} +\clip clip1 ; +\draw foo ; +\draw bar ; +\end{scope} +\end{scope} +\end{pgfonlayer} +\draw baz ; +\end{scope} +\end{scope} +\end{pgfonlayer} +RES + +my $a = Tikz->point; +my $b = Tikz->point(4, 2); +my $c = Tikz->point(1, 3); +my $d = Tikz->point(2, 1); + +my $r1 = Tikz->rectangle($a, $b); +my $r2 = Tikz->rectangle($c, $d); + +$seq = eval { + Tikz->seq( + Tikz->raw("foo") + ->clip($r1) + )->clip($r2); +}; +is $@, '', 'two intersecting rectangle clips doesn\'t croak'; + +check $seq, 'two intersecting rectangle clips', <<'RES'; +\begin{scope} +\clip (1cm,3cm) rectangle (2cm,1cm) ; +\begin{scope} +\clip (0cm,0cm) rectangle (4cm,2cm) ; +\draw foo ; +\end{scope} +\end{scope} +RES + +$r2 = Tikz->rectangle($a, $d); # $r2 is a subset of $r1 + +$seq = eval { + Tikz->seq( + Tikz->raw("foo") + ->clip($r1) + )->clip($r2); +}; +is $@, '', 'two overlapping rectangle clips 1 doesn\'t croak'; + +check $seq, 'two overlapping rectangle clips 1', <<'RES'; +\begin{scope} +\clip (0cm,0cm) rectangle (2cm,1cm) ; +\draw foo ; +\end{scope} +RES + +$seq = eval { + Tikz->seq( + Tikz->raw("foo") + ->clip($r2) + )->clip($r1); +}; +is $@, '', 'two overlapping rectangle clips 2 doesn\'t croak'; + +check $seq, 'two overlapping rectangle clips 2', <<'RES'; +\begin{scope} +\clip (0cm,0cm) rectangle (4cm,2cm) ; +\begin{scope} +\clip (0cm,0cm) rectangle (2cm,1cm) ; +\draw foo ; +\end{scope} +\end{scope} +RES + +my $c1 = Tikz->circle($a, 2); +my $c2 = Tikz->circle($d, 3); + +$seq = eval { + Tikz->seq( + Tikz->raw("foo") + ->clip($c1) + )->clip($c2); +}; +is $@, '', 'two intersecting circle clips doesn\'t croak'; + +check $seq, 'two intersecting circle clips', <<'RES'; +\begin{scope} +\clip (2cm,1cm) circle (3cm) ; +\begin{scope} +\clip (0cm,0cm) circle (2cm) ; +\draw foo ; +\end{scope} +\end{scope} +RES + +$c2 = Tikz->circle($a, 1); # $c2 is a subset of $c1 + +$seq = eval { + Tikz->seq( + Tikz->raw("foo") + ->clip($c1) + )->clip($c2); +}; +is $@, '', 'two overlapping circle clips 1 doesn\'t croak'; + +check $seq, 'two overlapping circle clips 1', <<'RES'; +\begin{scope} +\clip (0cm,0cm) circle (1cm) ; +\draw foo ; +\end{scope} +RES + +$seq = eval { + Tikz->seq( + Tikz->raw("foo") + ->clip($c2) + )->clip($c1); +}; +is $@, '', 'two overlapping circle clips 2 doesn\'t croak'; + +check $seq, 'two overlapping circle clips 2', <<'RES'; +\begin{scope} +\clip (0cm,0cm) circle (2cm) ; +\begin{scope} +\clip (0cm,0cm) circle (1cm) ; +\draw foo ; +\end{scope} +\end{scope} +RES