X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=t%2F22-clip.t;h=029dc5b63c066705727a53a35024813d968187e0;hb=0e7c2e9d009574e0d337db855d433a8e07d04512;hp=b3a1616375907e81081cbd0cb683b240c4c4fb4f;hpb=e955781895f97b6ff7ec50270466d459c992e4e1;p=perl%2Fmodules%2FLaTeX-TikZ.git diff --git a/t/22-clip.t b/t/22-clip.t index b3a1616..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 * 10; +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'); @@ -179,3 +163,119 @@ check $seq2, 'mods folding with clips and layers', <<'RES'; \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