#!/usr/bin/perl -w use Test::More; use strict; BEGIN { plan tests => 44; chdir 't' if -d 't'; use lib '../lib'; use_ok ("Graph::Easy::Layout::Chain") or die($@); use_ok ("Graph::Easy") or die($@); }; can_ok ("Graph::Easy::Layout::Chain", qw/ new error length nodes add_node layout /); ############################################################################# # chain tests my $c = 'Graph::Easy::Layout::Chain'; my $graph = Graph::Easy->new(); is (ref($graph), 'Graph::Easy'); is ($graph->error(), '', 'no error yet'); my ($node, $node2) = $graph->add_edge('A','B'); my $chain = Graph::Easy::Layout::Chain->new( start => $node, graph => $graph ); is (ref($chain), $c, 'new() seemed to work'); is ($chain->error(), '', 'no error'); is ($chain->start(), $node, 'start node is $node'); is ($chain->end(), $node, 'end node is $node'); is ($node->{_chain}, $chain, 'chain stored at node'); is ($chain->length(), 1, 'length() is 1'); is ($chain->length($node), 1, 'length($node) is 1'); $chain->add_node($node2); is ($node->{_chain}, $chain, 'chain stored at node'); is ($node2->{_chain}, $chain, 'chain stored at node2'); is ($chain->length(), 2, 'length() is now 2'); is ($chain->start(), $node, 'start node is $node'); is ($chain->end(), $node2, 'end node is $node2'); is ($chain->length($node), 2, 'length($node) is 2'); is ($chain->length($node2), 1, 'length($node2) is 1'); ############################################################################# # merging two chains my ($node3, $node4) = $graph->add_edge('C','D'); my $other = $c->new ( start => $node3, graph => $graph ); is (ref($other), $c, 'new() seemed to work'); is ($other->error(), '', 'no error'); is ($other->length(), 1, 'length() is 1'); is ($other->start(), $node3, 'start node is $node3'); is ($other->end(), $node3, 'end node is $node3'); $other->add_node($node4); is ($other->length(), 2, 'length() is now 2'); is ($other->start(), $node3, 'start node is $node3'); is ($other->end(), $node4, 'end node is $node4'); #diag ("merging chains\n"); $chain->merge($other); is ($other->error(), '', 'no error'); is ($other->length(), 0, 'other length() is still 0'); is ($other->start(), undef, 'start node is $node3'); is ($other->end(), undef, 'end node is $node4'); is ($chain->error(), '', 'no error'); is ($chain->length(), 4, 'chain length() is now 4'); is ($chain->start(), $node, 'start node is $node3'); is ($chain->end(), $node4, 'end node is $node4'); my @nodes = $chain->nodes(); is_deeply (\@nodes, [ $node, $node2, $node3, $node4 ], 'nodes got merged'); ############################################################################# # merging two chains, with offset my ($node5, $node6) = $graph->add_edge('E','F'); $other = $c->new ( start => $node5, graph => $graph ); $other->add_node($node6); # merge $chain into $other, but keep the first 3 nodes of $chain $other->merge($chain, $node3); is ($chain->length(), 4, 'left all four nodes'); is ($other->length(), 4, 'consumed two nodes'); @nodes = $chain->nodes(); is_deeply (\@nodes, [ $node, $node2, $node3, $node4 ], 'nodes got merged'); @nodes = $other->nodes(); is_deeply (\@nodes, [ $node5, $node6, $node3, $node4 ], 'other got two nodes'); for my $node ( @nodes ) { is ($node->{_chain}, $other, 'node got set to new chain'); }