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