]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/blobdiff - t/22-clip.t
Factor the check() test function in an helper test module
[perl/modules/LaTeX-TikZ.git] / t / 22-clip.t
index 800be76b528e3528da75cd1b8a96f51e1b783e10..029dc5b63c066705727a53a35024813d968187e0 100644 (file)
@@ -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