X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=t%2F10-set.t;h=e385932d1a3ba6ae5d273b963bb2b504cec8b64f;hb=HEAD;hp=39086420e6ec70279cd78c16398c2a04a1c6f60d;hpb=30cc7e83ac006f071c3fe119d696525d6637ff1d;p=perl%2Fmodules%2FLaTeX-TikZ.git diff --git a/t/10-set.t b/t/10-set.t index 3908642..e385932 100644 --- a/t/10-set.t +++ b/t/10-set.t @@ -3,32 +3,17 @@ use strict; use warnings; -use Test::More tests => 5 + 2 * 4; +use Test::More tests => 29 + 2 * 21; use LaTeX::TikZ; -use LaTeX::TikZ::Formatter; -my $tikz = LaTeX::TikZ::Formatter->new( +use lib 't/lib'; +use LaTeX::TikZ::TestHelper; + +using Tikz->formatter( format => '%d', ); -sub check { - my ($set, $desc, $exp) = @_; - - 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 $foo = eval { Tikz->raw('foo'); }; @@ -74,3 +59,211 @@ check $seq3, 'two different raw sets and a sequence', <<'RES'; \draw bar ; \draw foo ; RES + +my $baz = eval { + Tikz->raw('baz'); +}; +is $@, '', 'creating yet another raw set doesn\'t croak'; + +eval { + $foo->add($baz); +}; +like $@, qr/Can't locate object method "add"/, + 'adding something to a raw set croaks'; + +eval { + $seq2->add($baz, $baz); +}; +is $@, '', 'adding something to a sequence set doesn\'t croak'; + +check $seq3, 'two different raw sets and an extended sequence', <<'RES'; +\draw bar ; +\draw foo ; +\draw bar ; +\draw baz ; +\draw baz ; +\draw foo ; +RES + +my $seq4 = eval { + Tikz->seq; +}; +is $@, '', 'creating an empty sequence doesn\'t croak'; + +check $seq4, 'an empty sequence', ''; + +$seq4 = eval { + Tikz->seq(Tikz->seq); +}; +is $@, '', 'creating a sequence that contains an empty sequence doesn\'t croak'; + +check $seq4, 'a sequence that contains an empty sequence', ''; + +$seq4 = eval { + Tikz->seq($foo, Tikz->seq); +}; +is $@, '', + 'creating a sequence that contains a set and an empty sequence doesn\'t croak'; + +check $seq4, 'a sequence that contains a set and an empty sequence', <<'RES'; +\draw foo ; +RES + +$seq4 = eval { + Tikz->seq(Tikz->seq, $foo); +}; +is $@, '', + 'creating a sequence that contains an empty sequence and a set doesn\'t croak'; + +check $seq4, 'a sequence that contains an empty sequence and a set', <<'RES'; +\draw foo ; +RES + +$seq4 = eval { + Tikz->seq($foo, $bar, Tikz->seq); +}; +is $@, '', +'creating a sequence that contains 2 sets and an empty sequence doesn\'t croak'; + +check $seq4, 'a sequence that contains 2 sets and an empty sequence', <<'RES'; +\draw foo ; +\draw bar ; +RES + +$seq4 = eval { + Tikz->seq($foo, Tikz->seq, $bar); +}; +is $@, '', 'creating a sequence that contains a set, an empty sequence, a set doesn\'t croak'; + +check $seq4, 'a sequence that contains a set, an empty sequence, a set',<<'RES'; +\draw foo ; +\draw bar ; +RES + +$seq4 = eval { + Tikz->seq(Tikz->seq, $foo, $bar); +}; +is $@, '', +'creating a sequence that contains an empty sequence and 2 sets'; + +check $seq4, 'a sequence that contains an empty sequence and 2 sets', <<'RES'; +\draw foo ; +\draw bar ; +RES + +sub failed_valid { + my ($tc) = @_; + qr/Validation failed for '\Q$tc\E'/; +} + +eval { + Tikz->union($foo, $seq2); +}; +like $@, failed_valid('Maybe[ArrayRef[LaTeX::TikZ::Set::Path]]'), + 'creating an union that contains a sequence croaks'; + +my $union = eval { + Tikz->union($foo, $bar, $baz); +}; +is $@, '', 'creating an union set doesn\'t croak'; + +check $union, 'one union set', <<'RES'; +\draw foo bar baz ; +RES + +eval { + $union->add($foo); +}; +is $@, '', 'adding something to a union set doesn\'t croak'; + +check Tikz->seq($union, $union), 'two identical union sets', <<'RES'; +\draw foo bar baz foo ; +\draw foo bar baz foo ; +RES + +eval { + $union->add($seq2); +}; +like $@, failed_valid('LaTeX::TikZ::Set::Path'), + 'adding a sequence to a union croaks'; + +my $join = eval { + Tikz->join('--' => $foo, $bar, $baz); +}; +is $@, '', 'creating an chain set joined with a string doesn\'t croak'; + +check $join, 'one chain set joined with a string', <<'RES'; +\draw foo -- bar -- baz ; +RES + +eval { + $join->add($foo); +}; +is $@, '', 'adding a set to a chain set joined with a string doesn\'t croak'; + +check $join, 'one appended chain set joined with a string', <<'RES'; +\draw foo -- bar -- baz -- foo ; +RES + +$join = eval { + Tikz->join(sub { ' ' } => $foo, $bar, $baz); +}; +is $@, '', 'creating an chain set joined with a coderef doesn\'t croak'; + +check $join, 'one chain set joined with a string', <<'RES'; +\draw foo bar baz ; +RES + +eval { + $join->add($foo); +}; +is $@, '', 'adding a set to a chain set joined with a coderef doesn\'t croak'; + +check $join, 'one appended chain set joined with a coderef', <<'RES'; +\draw foo bar baz foo ; +RES + +$join = eval { + Tikz->join([ '', '..', '--' ] => $foo, $bar, $baz); +}; +is $@, '', 'creating an chain set joined with an arrayref doesn\'t croak'; + +check $join, 'one chain set joined with a string', <<'RES'; +\draw foo bar .. baz ; +RES + +eval { + $join->add($foo); +}; +is $@, '', 'adding a set to a chain set joined with an arrayref doesn\'t croak'; + +check $join, 'one appended chain set joined with an arrayref', <<'RES'; +\draw foo bar .. baz -- foo ; +RES + +eval { + $join->add($bar); +}; +is $@, '', + 'adding too many sets to a chain set joined with an arrayref doesn\'t croak'; + +eval { + using()->render($join); +}; +like $@, qr/^Invalid connector/, + 'adding too many sets to a chain set joined with an arrayref croaks'; + +my $chain = eval { + Tikz->chain($foo => '--' => $bar => '->' => $baz); +}; +is $@, '', 'creating an chain set with chain doesn\'t croak'; + +check $chain, 'one chain set from chain', <<'RES'; +\draw foo -- bar -> baz ; +RES + +eval { + Tikz->chain($foo, '--', $bar, '--'); +}; +like $@, qr/^The 'chain' command expects an odd number of arguments/, + 'creating an union that contains a sequence croaks';