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