use strict; use warnings; use utf8; use FindBin qw($Bin); use File::Temp qw(tempfile); use Test::More; BEGIN { unshift @INC, "./" } use Perl::Tidy; # This tests the -eos (--encode-output-strings) which was added for issue # git #83 to fix an issue with tidyall. # NOTE: to prevent automatic conversion of line endings LF to CRLF under github # Actions with Windows, which would cause test failure, it is essential that # there be a file 't/.gitattributes' with the line: # * -text # The test file has no tidying needs but is UTF-8 encoded, so all passes # through perltidy should read/write identical contents (previously only # file test behaved correctly) plan( tests => 6 ); test_all(); sub test_all { my $test_file = "$Bin/testwide-passthrough.pl.src"; test_file2file($test_file); test_scalar2scalar($test_file); test_scalararray2scalararray($test_file); } sub test_file2file { my $test_file = shift; my $tmp_file = File::Temp->new( TMPDIR => 1 ); my $source = $test_file; my $destination = $tmp_file->filename(); note("Testing file2file: '$source' => '$destination'\n"); my $tidyresult = Perl::Tidy::perltidy( argv => '-utf8', source => $source, destination => $destination ); ok( !$tidyresult, 'perltidy' ); my $source_str = slurp_raw($source); my $destination_str = slurp_raw($destination); my $source_hex = unpack( 'H*', $source_str ); my $destination_hex = unpack( 'H*', $destination_str ); note("Comparing contents:\n $source_hex\n $destination_hex\n"); ok( $source_hex eq $destination_hex, 'file content compare' ); } sub test_scalar2scalar { my $testfile = shift; my $source = slurp_raw($testfile); my $destination; note("Testing scalar2scalar\n"); my $tidyresult = Perl::Tidy::perltidy( argv => '-utf8 -eos', source => \$source, destination => \$destination ); ok( !$tidyresult, 'perltidy' ); my $source_hex = unpack( 'H*', $source ); my $destination_hex = unpack( 'H*', $destination ); note("Comparing contents:\n $source_hex\n $destination_hex\n"); ok( $source_hex eq $destination_hex, 'scalar content compare' ); } sub test_scalararray2scalararray { my $testfile = shift; my $source = [ lines_raw($testfile) ]; my $destination = []; note("Testing scalararray2scalararray\n"); my $tidyresult = Perl::Tidy::perltidy( argv => '-utf8 -eos', source => $source, destination => $destination ); ok( !$tidyresult, 'perltidy' ); my $source_str = join( "", @$source ); my $destination_str = join( "", @$destination ); my $source_hex = unpack( 'H*', $source_str ); my $destination_hex = unpack( 'H*', $destination_str ); note("Comparing contents:\n $source_hex\n $destination_hex\n"); ok( $source_hex eq $destination_hex, 'scalararray content compare' ); } sub slurp_raw { my $filename = shift; open( TMP, '<', $filename ); binmode( TMP, ':raw' ); local $/; my $contents = ; close(TMP); return $contents; } sub lines_raw { my $filename = shift; open( TMP, '<', $filename ); binmode( TMP, ':raw' ); my @contents = ; close(TMP); return @contents; }