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

# Copyright 2015 Kevin Ryde

# This file is part of HTML-FormatExternal.
#
# HTML-FormatExternal is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation; either version 3, or (at your option) any
# later version.
#
# HTML-FormatExternal is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with HTML-FormatExternal.  If not, see <http://www.gnu.org/licenses/>.

use 5.006;
use strict;
use warnings;
use FindBin;
use File::Spec;
use Test::More;

use lib 't';
use MyTestHelpers;
BEGIN { MyTestHelpers::nowarnings() }

require HTML::FormatText::W3m;
my $class = 'HTML::FormatText::W3m';
diag $class;

eval { require Taint::Util }
  or plan skip_all => "due to Taint::Util not available";
{
  my $str = 'hello';
  Taint::Util::taint($str);
  Taint::Util::tainted($str)
      or plan skip_all => "due to not running in perl -T taint mode";
}

plan tests => 35;

Taint::Util::untaint($ENV{PATH});  # so programs can run

foreach my $class ('HTML::FormatText::Elinks',
                   'HTML::FormatText::Html2text',
                   'HTML::FormatText::Links',
                   'HTML::FormatText::Lynx',
                   'HTML::FormatText::Netrik',
                   'HTML::FormatText::W3m',
                   'HTML::FormatText::Zen',
                  ) {
  diag $class;
  use_ok ($class);

  my $good_taint = sub {
    my ($str) = @_;
    return ! defined $str
      || Taint::Util::tainted($str)
      || $str eq '(not reported)'; # as from Netrik.pm
  };

  { my $version = $class->program_full_version;
    ok ($good_taint->($version),
        'program_full_version() should be tainted');
  }
  { my $version = $class->program_version;
    ok ($good_taint->($version),
        'program_version() should be tainted');
  }

  my $have_program = defined($class->program_full_version);
 SKIP: {
    if (! $have_program) {
      skip "$class program not available", 2;
    }
    {
      my $str = $class->format_string ("<html><body><p>Hello</p></body><html>\n");
      ok (Taint::Util::tainted($str),
          "format_string() tainted");
    }
    {
      my $testfilename = File::Spec->catfile($FindBin::Bin,'test.html');
      my $str = $class->format_file ($testfilename);
      ok (Taint::Util::tainted($str),
          "format_file() tainted");
    }
  }
}
exit 0;