use strict;
use warnings;
use English qw(-no_match_vars); # to avoid regexp performance penalty
use feature qw(say);
use Test::More;
use IPC::Open2;
use File::Spec;
use Config;
#Skip tests on win32 platforms
if ( $OSNAME eq 'MSWin32' ) {
plan skip_all => 'IPC::Open2 does not like windows';
} else {
plan tests => 30;
}
my $hilitep6 = File::Spec->catfile(qw(blib script hilitep6));
if ( not -e $hilitep6 ) {
$hilitep6 = File::Spec->catfile(qw(script hilitep6));
}
sub run_script {
my $args = shift;
my $Perl = $Config{perlpath};
open2( *README, *WRITEME, "$Perl -Ilib $hilitep6 $args" );
print WRITEME q{my $foo="&<>";};
close WRITEME;
local $INPUT_RECORD_SEPARATOR = undef; #enable localized slurp mode
my $output = <README>;
close(README);
return $output;
}
#tests for --help
my $help = run_script '--help';
ok( defined $help, '--help returned something' );
like( $help, '/USAGE/', '--help contains USAGE' );
like( $help, '/--simple-html/', '--help contains --simple-html' );
like( $help, '/--full-html/', '--help contains --full-html' );
like( $help, '/--snippet-html/', '--help contains --snippet-html' );
like( $help, '/--ansi-text/', '--help contains --ansi-text' );
#no arguments should default to --ansi-text=-
my $default = run_script q{};
ok( defined $default, 'no arguments returned something' );
like(
$default, '/\033\[.+?m/i',
'no arguments should contain ansi color escape sequences'
);
like( $default, '/foo/i', 'no arguments should contain the word foo' );
#tests for --snippet-html
my $snippet = run_script '--snippet-html=-';
ok( defined $snippet, '--snippet-html=- returned something' );
like( $snippet, '/<pre>/i', '--snippet-html=- contains <pre> tag' );
unlike( $snippet, '/<html>/i', '--snippet-html=- should not contain any <html>' );
like( $snippet, '/foo/i', '--snippet-html=- should contain the word foo' );
#tests for --simple-html
my $simple = run_script '--simple-html=-';
ok( defined $simple, '--simple-html=- returned something' );
like( $simple, '/<pre>/i', '--simple-html=- should have <pre> tags' );
like( $simple, '/<html>/i', '--simple-html=- should contain <html>' );
unlike( $simple, '/text\/javascript/i', '--simple-html=- should not contain any JS' );
like( $simple, '/foo/i', '--simple-html=- should contain the word foo' );
#tests for ----full-html=-
my $full = run_script '--full-html=-';
ok( defined $full, '--full-html=- returned something' );
like( $full, '/<pre>/i', '--full-html=- should have <pre> tags' );
like( $full, '/<html>/i', '--full-html=- should contain <html>' );
like( $full, '/text\/javascript/i', '--full-html=- should contain JS' );
like( $full, '/foo/i', '--full-html=- should contain the word foo' );
#tests for --ansi-text
my $ansi = run_script '--ansi-text=-';
ok( defined $ansi, '--ansi-text=- returned something' );
like(
$ansi, '/\033\[.+?m/i',
'--ansi-text=- should contain ansi color escape sequences'
);
like( $ansi, '/foo/i', '--ansi-text=- should contain the word foo' );
#tests for correct html escaping behavior
like(
$snippet, '/<>/',
'--snippet-html=- & html escaping works'
);
like(
$snippet, '/&/',
'--snippet-html=- & html escaping works'
);
like(
$simple, '/"/',
'--simple-html=- html escaping works'
);
like(
$full, '/<>/',
'--full-html=- html escaping works'
);
=cut