The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

# some basic tests of graphcnv

use Test::More;

my $out;

BEGIN
  {
  plan tests => 20;
  chdir 't' if -d 't';

  use File::Spec;

  $out = File::Spec->catfile('images','graph','4f03986d082bb194583e50624debc5208491be5b.svg');
  }

my $cmd = File::Spec->catdir( File::Spec->updir(),'graphcnv' );

$cmd = 'perl ' . $cmd if $^O =~ /mswin/;

my $rc = `$cmd`;
like ($rc, qr/Usage:/, 'usage instruction');

$rc = `$cmd '[Bonn]->[Berlin]' 'utf-8' 'html'`;
like ($rc, qr/Bonn/, 'render graph');
like ($rc, qr/<table/, 'render graph as html');

$rc = `$cmd '[Bonn]->[Berlin]' 'utf-8' 'ascii'`;
like ($rc, qr/\| Bonn/, 'render graph as ascii');
unlike ($rc, qr/<table/, 'render graph not as html');

$rc = `$cmd '[Bonn]->[Berlin]' 'utf-8' 'boxart'`;
like ($rc, qr/│ Bonn/, 'render graph as boxart');
unlike ($rc, qr/<table/, 'render graph not as html');

mkdir 'images';
mkdir File::Spec->catdir('images','graph');

SKIP:
  {
  eval { require Graph::Easy::As_svg; };

  skip ('Graph::Easy::As_svg not installed', 6)
    unless defined $Graph::Easy::As_svg::VERSION;

  # clean up
  $out = File::Spec->catfile('images','graph','4f','03','4f03986d082bb194583e50624debc5208491be5b.svg');
  unlink $out if -f $out; 
 
  $rc = `$cmd '[Bonn]->[Berlin]' 'utf-8' 'svg'`;
  like ($rc, qr/<object/, 'included as object tag');
  like ($rc, qr/<a title=.* href=/, 'included alt text');
  unlike ($rc, qr/^\s/m, 'no leading spaces');
  unlike ($rc, qr/\n\n/, 'no empty lines');

  like ($rc, qr/4f03986d082bb194583e50624debc5208491be5b\.svg/,
    'sample graph hashed to 4f03986d082bb194583e50624debc5208491be5b');

  ok (-f $out, 'output file exists');
  unlink $out if -f $out;
  };

SKIP:
  {
  skip ('No dot found', 7)
    unless -e '/usr/bin/dot';

  # clean up
  $out = File::Spec->catfile('images','graph','4f','03','4f03986d082bb194583e50624debc5208491be5b.png');
  unlink $out if -f $out;

  $rc = `$cmd '[Bonn]->[Berlin]' 'utf-8' 'graphviz'`;
  like ($rc, qr/<img/, 'included as img tag');
  like ($rc, qr/<img.*?title=.*? src=/, 'included alt text');
  like ($rc, qr/usemap/, 'included usemap');
  unlike ($rc, qr/^\s/m, 'no leading spaces');
  unlike ($rc, qr/\n\n/, 'no empty lines');

  like ($rc, qr/4f03986d082bb194583e50624debc5208491be5b\.png/,
    'sample graph hashed to 4f03986d082bb194583e50624debc5208491be5b');

  ok (-f $out, 'output file exists');
  unlink $out if -f $out;
  }

END
  {
  unlink $out if -f $out;
  }