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 = ; 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, '/
/i', '--snippet-html=- contains 
 tag' );
unlike( $snippet, '//i', '--snippet-html=- should not contain any ' );
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, '/
/i',  '--simple-html=- should have 
 tags' );
like( $simple, '//i', '--simple-html=- should contain ' );
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, '/
/i',            '--full-html=- should have 
 tags' );
like( $full, '//i',           '--full-html=- should contain ' );
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