]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/blob - t/10-set.t
Test mod foldings
[perl/modules/LaTeX-TikZ.git] / t / 10-set.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 12 + 2 * 7;
7
8 use LaTeX::TikZ;
9 use LaTeX::TikZ::Formatter;
10
11 my $tikz = LaTeX::TikZ::Formatter->new(
12  format => '%d',
13 );
14
15 sub check {
16  my ($set, $desc, $exp) = @_;
17
18  local $Test::Builder::Level = $Test::Builder::Level + 1;
19
20  my ($head, $decl, $body) = eval {
21   $tikz->render(ref $set eq 'ARRAY' ? @$set : $set);
22  };
23  is $@, '', "$desc: no error";
24
25  unless (ref $exp eq 'ARRAY') {
26   $exp = [ split /\n/, $exp ];
27  }
28  unshift @$exp, '\begin{tikzpicture}';
29  push    @$exp, '\end{tikzpicture}';
30
31  is_deeply $body, $exp, $desc;
32 }
33
34 my $foo = eval {
35  Tikz->raw('foo');
36 };
37 is $@, '', 'creating a raw set doesn\'t croak';
38
39 check $foo, 'one raw set', <<'RES';
40 \draw foo ;
41 RES
42
43 my $seq2 = eval {
44  Tikz->seq($foo, $foo);
45 };
46 is $@, '', 'creating a 2-sequence doesn\'t croak';
47
48 check $seq2, 'two identical raw sets', <<'RES';
49 \draw foo ;
50 \draw foo ;
51 RES
52
53 my $bar = eval {
54  Tikz->raw('bar');
55 };
56 is $@, '', 'creating another raw set doesn\'t croak';
57
58 $seq2 = eval {
59  Tikz->seq($foo, $bar);
60 };
61 is $@, '', 'creating another 2-sequence doesn\'t croak';
62
63 check $seq2, 'two different raw sets', <<'RES';
64 \draw foo ;
65 \draw bar ;
66 RES
67
68 my $seq3 = eval {
69  Tikz->seq($bar, $seq2, $foo);
70 };
71 is $@, '', 'creating a complex sequence doesn\'t croak';
72
73 check $seq3, 'two different raw sets and a sequence', <<'RES';
74 \draw bar ;
75 \draw foo ;
76 \draw bar ;
77 \draw foo ;
78 RES
79
80 my $baz = eval {
81  Tikz->raw('baz');
82 };
83 is $@, '', 'creating yet another raw set doesn\'t croak';
84
85 eval {
86  $foo->add($baz);
87 };
88 like $@, qr/Can't locate object method "add"/,
89                                          'adding something to a raw set croaks';
90
91 eval {
92  $seq2->add($baz, $baz);
93 };
94 is $@, '', 'adding something to a sequence set doesn\'t croak';
95
96 check $seq3, 'two different raw sets and an extended sequence', <<'RES';
97 \draw bar ;
98 \draw foo ;
99 \draw bar ;
100 \draw baz ;
101 \draw baz ;
102 \draw foo ;
103 RES
104
105 sub failed_valid {
106  my ($tc) = @_;
107  qr/Validation failed for '\Q$tc\E'/;
108 }
109
110 my $err_path = qr/does not pass the type constraint because: Validation failed for 'Maybe\[ArrayRef\[LaTeX::TikZ::Set::Path::Elements\]\]/;
111
112 eval {
113  Tikz->path($foo, $seq2);
114 };
115 like $@, failed_valid('Maybe[ArrayRef[LaTeX::TikZ::Set::Path::Elements]]'),
116          'creating a path that contains a sequence croaks';
117
118 my $path = eval {
119  Tikz->path($foo, $bar, $baz);
120 };
121 is $@, '', 'creating a path set doesn\'t croak';
122
123 check $path, 'one path set', <<'RES';
124 \draw foo bar baz ;
125 RES
126
127 eval {
128  $path->add($foo);
129 };
130 is $@, '', 'adding something to a path set doesn\'t croak';
131
132 check [ $path, $path ], 'two identical path sets', <<'RES';
133 \draw foo bar baz foo ;
134 \draw foo bar baz foo ;
135 RES
136
137 eval {
138  $path->add($seq2);
139 };
140 like $@, failed_valid('LaTeX::TikZ::Set::Path::Elements'),
141          'adding a sequence to a path croaks';