#!/usr/bin/perl -w
BEGIN
{
plan
tests
=> 43;
chdir
't'
if
-d
't'
;
use_ok
qw/Graph::Easy::Edge/
;
use_ok
qw/Graph::Easy::Edge::Cell/
;
}
can_ok (
"Graph::Easy::Edge"
,
qw/
new
error
label
_cells
_add_cell
_clear_cells
_unplace
attribute
undirected
bidirectional
has_ports
flip
set_attribute
set_attributes
group add_to_group
background
edge_flow flow port
start_port end_port
from to start_at
/
);
my
$graph
= Graph::Easy->new();
my
$edge
= Graph::Easy::Edge->new();
$edge
->{graph} =
$graph
;
is (
ref
(
$edge
),
'Graph::Easy::Edge'
);
is (
$edge
->error(),
''
,
'no error yet'
);
is (
$edge
->undirected(),
undef
,
'not undirected'
);
is (
$edge
->bidirectional(),
undef
,
'not bidiriectional'
);
is (
$edge
->has_ports(), 0,
'has no port restrictions'
);
use_ok (
'Graph::Easy::As_txt'
);
is (
$edge
->as_txt(),
' --> '
,
'default is "-->"'
);
$edge
= Graph::Easy::Edge->new(
style
=>
'double'
);
$edge
->{graph} =
$graph
;
is (
$edge
->as_txt(),
' ==> '
,
'"==>"'
);
$edge
= Graph::Easy::Edge->new(
style
=>
'dotted'
);
$edge
->{graph} =
$graph
;
is (
$edge
->as_txt(),
' ..> '
,
'"..>"'
);
$edge
= Graph::Easy::Edge->new(
style
=>
'dashed'
);
$edge
->{graph} =
$graph
;
is (
$edge
->as_txt(),
' - > '
,
'"- >"'
);
$edge
= Graph::Easy::Edge->new(
style
=>
'wave'
);
$edge
->{graph} =
$graph
;
is (
$edge
->as_txt(),
' ~~> '
,
'"~~>"'
);
$edge
= Graph::Easy::Edge->new(
style
=>
'dot-dash'
);
$edge
->{graph} =
$graph
;
is (
$edge
->as_txt(),
' .-> '
,
'".->"'
);
$edge
= Graph::Easy::Edge->new(
style
=>
'double-dash'
);
$edge
->{graph} =
$graph
;
is (
$edge
->as_txt(),
' = > '
,
'"= >"'
);
$edge
= Graph::Easy::Edge->new(
style
=>
'dot-dot-dash'
);
$edge
->{graph} =
$graph
;
is (
$edge
->as_txt(),
' ..-> '
,
'"= >"'
);
$edge
= Graph::Easy::Edge->new(
style
=>
'bold'
);
$edge
->{graph} =
$graph
;
is (
$edge
->as_txt(),
' --> { style: bold; } '
,
' --> { style: bold; }'
);
$edge
= Graph::Easy::Edge->new(
label
=>
'train'
);
$edge
->{graph} =
$graph
;
is (
$edge
->as_txt(),
' -- train --> '
,
' -- train -->'
);
is (
scalar
$edge
->_cells(), 0,
'no cells'
);
my
$c
= Graph::Easy::Edge::Cell->new (
edge
=>
$edge
,
type
=> EDGE_SHORT_E,
x
=> 1,
y
=> 1,
after
=> 0,
);
is (
scalar
$edge
->_cells(), 1,
'one cell'
);
my
@cells
=
$edge
->_cells();
is (
$cells
[0],
$c
,
'added this cell'
);
my
$c_1
= Graph::Easy::Edge::Cell->new (
edge
=>
$edge
,
type
=> EDGE_SHORT_E,
x
=> 2,
y
=> 1,
after
=>
$c
,
);
is (
scalar
$edge
->_cells(), 2,
'two cells'
);
@cells
=
$edge
->_cells();
is (
$cells
[0],
$c
,
'first cell stayed'
);
is (
$cells
[1],
$c_1
,
'added after first cell'
);
$edge
->_clear_cells();
is (
scalar
$edge
->_cells(), 0,
'no cells'
);
is (
$edge
->undirected(2), 1,
'undirected'
);
is (
$edge
->undirected(), 1,
'undirected'
);
is (
$edge
->undirected(0), 0,
'not undirected'
);
is (
$edge
->bidirectional(2), 1,
'bidiriectional'
);
is (
$edge
->bidirectional(), 1,
'bidiriectional'
);
is (
$edge
->bidirectional(0), 0,
'not bidiriectional'
);
$edge
->set_attribute(
'start'
,
'south'
);
is (
$edge
->has_ports(), 1,
'has port restrictions'
);
$edge
->set_attribute(
'end'
,
'north'
);
is (
$edge
->has_ports(), 1,
'has port restrictions'
);
$edge
->del_attribute(
'start'
);
is (
$edge
->has_ports(), 1,
'has port restrictions'
);
$edge
->del_attribute(
'end'
);
is (
$edge
->has_ports(), 0,
'has no port restrictions'
);
$edge
->set_attribute(
'start'
,
'south'
);
my
@u
=
$edge
->port(
'start'
);
is_deeply (\
@u
, [
'south'
],
"port('start')"
);
$edge
->del_attribute(
'end'
);
$edge
->del_attribute(
'start'
);
is (
$edge
->background(),
'inherit'
,
'background()'
);
$graph
= Graph::Easy->new();
my
(
$A
,
$B
); (
$A
,
$B
,
$edge
) =
$graph
->add_edge(
'A'
,
'B'
);
my
$group
=
$graph
->add_group(
'G'
);
$group
->add_member(
$edge
);
my
$cell
= Graph::Easy::Edge::Cell->new(
edge
=>
$edge
,
graph
=>
$graph
);
is (
$cell
->background(),
'#a0d0ff'
,
'background() for group member'
);
$group
->set_attribute(
'background'
,
'red'
);
is (
$cell
->background(),
'#a0d0ff'
,
'background() for group member'
);
$group
->set_attribute(
'fill'
,
'green'
);
is (
$cell
->background(),
'#008000'
,
'background() for group member'
);
my
$from
=
$edge
->from();
my
$to
=
$edge
->to();
$edge
->flip();
is (
$from
,
$edge
->to(),
'from/to flipped'
);
is (
$to
,
$edge
->from(),
'from/to flipped'
);