173 lines
4.5 KiB
Perl
173 lines
4.5 KiB
Perl
#!/usr/bin/perl -w
|
|
|
|
# test printing into a framebuffer
|
|
|
|
use Test::More;
|
|
use strict;
|
|
|
|
BEGIN
|
|
{
|
|
plan tests => 36;
|
|
chdir 't' if -d 't';
|
|
use lib '../lib';
|
|
use_ok ("Graph::Easy::Node") or die($@);
|
|
use_ok ("Graph::Easy") or die($@);
|
|
use_ok ("Graph::Easy::As_ascii") or die($@);
|
|
};
|
|
|
|
can_ok ("Graph::Easy::Node", qw/
|
|
as_ascii
|
|
|
|
_printfb
|
|
_printfb_ver
|
|
_draw_label
|
|
_framebuffer
|
|
_aligned_label
|
|
/);
|
|
|
|
#############################################################################
|
|
# general framebuffer tests
|
|
|
|
my $node = Graph::Easy::Node->new();
|
|
|
|
is (ref($node), 'Graph::Easy::Node');
|
|
|
|
is ($node->error(), '', 'no error yet');
|
|
|
|
my $fb = $node->_framebuffer(2,3);
|
|
|
|
is (join ("::", @$fb), " :: :: ", 'framebuffer set up');
|
|
|
|
$node->_printfb( $fb, 0,0, '+');
|
|
is (join ("::", @$fb), "+ :: :: ", 'print +');
|
|
|
|
$node->_printfb( $fb, 1,0, '+');
|
|
is (join ("::", @$fb), "++:: :: ", 'print +');
|
|
|
|
$node->_printfb( $fb, 1,2, '+');
|
|
is (join ("::", @$fb), "++:: :: +", 'print +');
|
|
|
|
$node->_printfb( $fb, 0,0, '--');
|
|
is (join ("::", @$fb), "--:: :: +", 'print --');
|
|
|
|
$node->_printfb( $fb, 0,1, "''");
|
|
is (join ("::", @$fb), "--::'':: +", "print ''");
|
|
|
|
#############################################################################
|
|
# multiline printing
|
|
|
|
$fb = $node->_framebuffer(2,5);
|
|
|
|
$node->_printfb( $fb, 0,3, "+", "+");
|
|
is (join ("::", @$fb), " :: :: ::+ ::+ ", 'print "+\n+"');
|
|
|
|
$node->_printfb( $fb, 0,2, "|", "|");
|
|
is (join ("::", @$fb), " :: ::| ::| ::+ ", 'print "\|\n\|"');
|
|
|
|
$fb = $node->_framebuffer(4,5);
|
|
is (join ("::", @$fb), " :: :: :: :: ", 'new fb set up');
|
|
|
|
$node->_printfb( $fb, 1,1, "01", "234");
|
|
|
|
is (join ("::", @$fb), " :: 01 :: 234:: :: ", 'new fb set up');
|
|
|
|
#############################################################################
|
|
# _draw_border() tests
|
|
|
|
$fb = $node->_framebuffer(12,6);
|
|
|
|
$node->{w} = 12;
|
|
$node->{h} = 6;
|
|
|
|
$node->_draw_border( $fb, 'solid', 'solid', 'solid', 'solid');
|
|
|
|
is (join ("::", @$fb),
|
|
'+----------+::| |::| |::| |::| |::+----------+',
|
|
'solid border');
|
|
|
|
|
|
$fb = $node->_framebuffer(8,4);
|
|
|
|
$node->{w} = 8;
|
|
$node->{h} = 4;
|
|
|
|
my @expect = (
|
|
' \n \n \n ',
|
|
'+------+\n| |\n| |\n+------+',
|
|
'........\n: :\n: :\n:......:',
|
|
'+ - - -+\n\' \'\n\' \'\n+ - - -+',
|
|
'+-.-.-.+\n! !\n! !\n+-.-.-.+',
|
|
'+.-..-.+\n| |\n: :\n+.-..-.+',
|
|
'########\n# #\n# #\n########',
|
|
'#======#\nH H\nH H\n#======#',
|
|
'# = = =#\n" "\n" "\n# = = =#',
|
|
'+~~~~~~+\n{ {\n} }\n+~~~~~~+',
|
|
);
|
|
|
|
my $i = 0;
|
|
for my $style (qw/ none solid dotted dashed dot-dash dot-dot-dash bold double double-dash wave/)
|
|
{
|
|
$node->_draw_border( $fb, $style, $style, $style, $style);
|
|
is (join ('\n', @$fb),
|
|
$expect[$i],
|
|
"$style border");
|
|
$i++;
|
|
}
|
|
|
|
#############################################################################
|
|
# _draw_border() tests with different styles
|
|
|
|
$fb = $node->_framebuffer(8,4);
|
|
|
|
$node->{w} = 8;
|
|
$node->{h} = 4;
|
|
|
|
$node->_draw_border( $fb, 'solid', 'dotted', 'solid', 'solid');
|
|
|
|
is (join ("::", @$fb),
|
|
'+------+::| |::| |:::......:',
|
|
'solid border, except bottom, which is dotted');
|
|
|
|
#############################################################################
|
|
# label alignments
|
|
|
|
$node->set_attribute('label', 'left\r right\l left\c center\n normal');
|
|
|
|
my ($lines,$aligns) = $node->_aligned_label();
|
|
|
|
is_deeply ( $lines, [ 'left', 'right', 'left', 'center', 'normal' ],
|
|
'lines are ok');
|
|
is_deeply ( $aligns, [ 'c', 'r', 'l', 'c', 'c', ], 'aligns is ok');
|
|
|
|
# empty lines at the are thrown away
|
|
$node->set_attribute('label', 'left\r right\l left\c center\n normal\c');
|
|
|
|
($lines,$aligns) = $node->_aligned_label();
|
|
|
|
is_deeply ( $lines, [ 'left', 'right', 'left', 'center', 'normal' ],
|
|
'lines are ok');
|
|
is_deeply ( $aligns, [ 'c', 'r', 'l', 'c', 'c', ], 'aligns is ok');
|
|
|
|
# start with alignment
|
|
$node->set_attribute('label', '\rleft\r right\l left\c center\n normal\c');
|
|
|
|
($lines,$aligns) = $node->_aligned_label();
|
|
|
|
is_deeply ( $lines, [ '', 'left', 'right', 'left', 'center', 'normal' ],
|
|
'lines are ok');
|
|
is_deeply ( $aligns, [ 'c', 'r', 'r', 'l', 'c', 'c', ], 'aligns is ok');
|
|
|
|
# start with alignment
|
|
$node->set_attribute('label', '\r\l\rleft\r right\l left\c center\n normal\c');
|
|
|
|
($lines,$aligns) = $node->_aligned_label();
|
|
|
|
is_deeply ( $lines, [ '','','','left', 'right', 'left', 'center', 'normal' ],
|
|
'lines are ok');
|
|
is_deeply ( $aligns, [ 'c','r','l','r', 'r', 'l', 'c', 'c', ], 'aligns is ok');
|
|
|
|
|
|
|
|
|
|
|