Author: jkeenan Date: Thu Dec 11 19:33:23 2008 New Revision: 33822 Modified: branches/testparrottest/lib/Parrot/Test.pm
Log: Continue to restore previous order of subroutines. Modified: branches/testparrottest/lib/Parrot/Test.pm ============================================================================== --- branches/testparrottest/lib/Parrot/Test.pm (original) +++ branches/testparrottest/lib/Parrot/Test.pm Thu Dec 11 19:33:23 2008 @@ -504,6 +504,130 @@ # The following methods are private. They should not be used by modules # inheriting from Parrot::Test. +sub _handle_error_output { + my ( $builder, $real_output, $expected, $desc ) = @_; + + my $level = $builder->level(); + $builder->level( $level + 1 ); + $builder->ok( 0, $desc ); + $builder->diag( + "Expected error but exited cleanly\n" . "Received:\n$real_output\nExpected:\n$expected\n" ); + $builder->level($level); + + return 0; +} + +sub _run_test_file { + my ( $func, $code, $expected, $desc, %extra ) = @_; + my $path_to_parrot = path_to_parrot(); + my $parrot = File::Spec->join( File::Spec->curdir(), 'parrot' . $PConfig{exe} ); + + # Strange Win line endings + convert_line_endings($expected); + + # $test_no will be part of temporary file + my $test_no = $builder->current_test() + 1; + + # Name of the file where output is written. + # Switch to a different extension when we are generating code. + my $out_f = per_test( '.out', $test_no ); + + # Name of the file with test code. + # This depends on which kind of code we are testing. + my $code_f; + if ( $func =~ m/^pir_.*?output/ ) { + $code_f = per_test( '.pir', $test_no ); + } + elsif ( $func =~ m/^pasm_.*?output_/ ) { + $code_f = per_test( '.pasm', $test_no ); + } + elsif ( $func =~ m/^pbc_.*?output_/ ) { + $code_f = per_test( '.pbc', $test_no ); + } + else { + die "Unknown test function: $func"; + } + $code_f = File::Spec->rel2abs($code_f); + my $code_basef = basename($code_f); + + # native tests are just run, others need to write code first + if ( $code_f !~ /\.pbc$/ ) { + write_code_to_file( $code, $code_f ); + } + + # honor opt* filename to actually run code with -Ox + my $args = $ENV{TEST_PROG_ARGS} || ''; + my $opt = $code_basef =~ m!opt(.)! ? "-O$1" : ""; + $args .= " $opt"; + + my $run_exec = 0; + if ( $args =~ s/--run-exec// ) { + $run_exec = 1; + my $pbc_f = per_test( '.pbc', $test_no ); + my $o_f = per_test( '_pbcexe' . $PConfig{o}, $test_no ); + my $exe_f = + per_test( '_pbcexe' . $PConfig{exe}, $test_no ) + ; # Make cleanup and svn:ignore more simple + my $exec_f = per_test( '_pbcexe', $test_no ); # Make cleanup and svn:ignore more simple + $exe_f =~ s...@[\\/:]...@$pconfig{slash}@g; + + # RT#43751 put this into sub generate_pbc() + run_command( + qq{$parrot $args -o $pbc_f "$code_f"}, + CD => $path_to_parrot, + STDOUT => $out_f, + STDERR => $out_f + ); + if ( -e $pbc_f ) { + run_command( + qq{$parrot $args -o $o_f "$pbc_f"}, + CD => $path_to_parrot, + STDOUT => $out_f, + STDERR => $out_f + ); + if ( -e $o_f ) { + run_command( + qq{$PConfig{make} EXEC=$exec_f exec}, + CD => $path_to_parrot, + STDOUT => $out_f, + STDERR => $out_f + ); + if ( -e $exe_f ) { + run_command( + $exe_f, + CD => $path_to_parrot, + STDOUT => $out_f, + STDERR => $out_f + ); + } + } + } + } + + my ( $exit_code, $cmd ); + unless ($run_exec) { + if ( $args =~ s/--run-pbc// || $args =~ s/-r // ) { + my $pbc_f = per_test( '.pbc', $test_no ); + $args = qq{$args -o "$pbc_f"}; + + # In this case, we need to execute more than one command. Instead + # of a single scalar, build an array of commands. + $cmd = [ qq{$parrot $args "$code_f"}, qq{$parrot "$pbc_f"}, ]; + } + else { + $cmd = qq{$parrot $args "$code_f"}; + } + $exit_code = run_command( + $cmd, + CD => $path_to_parrot, + STDOUT => $out_f, + STDERR => $out_f + ); + } + + return ( $out_f, $cmd, $exit_code ); +} + sub _generate_test_functions { my $package = 'Parrot::Test'; @@ -915,130 +1039,6 @@ return; } -sub _handle_error_output { - my ( $builder, $real_output, $expected, $desc ) = @_; - - my $level = $builder->level(); - $builder->level( $level + 1 ); - $builder->ok( 0, $desc ); - $builder->diag( - "Expected error but exited cleanly\n" . "Received:\n$real_output\nExpected:\n$expected\n" ); - $builder->level($level); - - return 0; -} - -sub _run_test_file { - my ( $func, $code, $expected, $desc, %extra ) = @_; - my $path_to_parrot = path_to_parrot(); - my $parrot = File::Spec->join( File::Spec->curdir(), 'parrot' . $PConfig{exe} ); - - # Strange Win line endings - convert_line_endings($expected); - - # $test_no will be part of temporary file - my $test_no = $builder->current_test() + 1; - - # Name of the file where output is written. - # Switch to a different extension when we are generating code. - my $out_f = per_test( '.out', $test_no ); - - # Name of the file with test code. - # This depends on which kind of code we are testing. - my $code_f; - if ( $func =~ m/^pir_.*?output/ ) { - $code_f = per_test( '.pir', $test_no ); - } - elsif ( $func =~ m/^pasm_.*?output_/ ) { - $code_f = per_test( '.pasm', $test_no ); - } - elsif ( $func =~ m/^pbc_.*?output_/ ) { - $code_f = per_test( '.pbc', $test_no ); - } - else { - die "Unknown test function: $func"; - } - $code_f = File::Spec->rel2abs($code_f); - my $code_basef = basename($code_f); - - # native tests are just run, others need to write code first - if ( $code_f !~ /\.pbc$/ ) { - write_code_to_file( $code, $code_f ); - } - - # honor opt* filename to actually run code with -Ox - my $args = $ENV{TEST_PROG_ARGS} || ''; - my $opt = $code_basef =~ m!opt(.)! ? "-O$1" : ""; - $args .= " $opt"; - - my $run_exec = 0; - if ( $args =~ s/--run-exec// ) { - $run_exec = 1; - my $pbc_f = per_test( '.pbc', $test_no ); - my $o_f = per_test( '_pbcexe' . $PConfig{o}, $test_no ); - my $exe_f = - per_test( '_pbcexe' . $PConfig{exe}, $test_no ) - ; # Make cleanup and svn:ignore more simple - my $exec_f = per_test( '_pbcexe', $test_no ); # Make cleanup and svn:ignore more simple - $exe_f =~ s...@[\\/:]...@$pconfig{slash}@g; - - # RT#43751 put this into sub generate_pbc() - run_command( - qq{$parrot $args -o $pbc_f "$code_f"}, - CD => $path_to_parrot, - STDOUT => $out_f, - STDERR => $out_f - ); - if ( -e $pbc_f ) { - run_command( - qq{$parrot $args -o $o_f "$pbc_f"}, - CD => $path_to_parrot, - STDOUT => $out_f, - STDERR => $out_f - ); - if ( -e $o_f ) { - run_command( - qq{$PConfig{make} EXEC=$exec_f exec}, - CD => $path_to_parrot, - STDOUT => $out_f, - STDERR => $out_f - ); - if ( -e $exe_f ) { - run_command( - $exe_f, - CD => $path_to_parrot, - STDOUT => $out_f, - STDERR => $out_f - ); - } - } - } - } - - my ( $exit_code, $cmd ); - unless ($run_exec) { - if ( $args =~ s/--run-pbc// || $args =~ s/-r // ) { - my $pbc_f = per_test( '.pbc', $test_no ); - $args = qq{$args -o "$pbc_f"}; - - # In this case, we need to execute more than one command. Instead - # of a single scalar, build an array of commands. - $cmd = [ qq{$parrot $args "$code_f"}, qq{$parrot "$pbc_f"}, ]; - } - else { - $cmd = qq{$parrot $args "$code_f"}; - } - $exit_code = run_command( - $cmd, - CD => $path_to_parrot, - STDOUT => $out_f, - STDERR => $out_f - ); - } - - return ( $out_f, $cmd, $exit_code ); -} - sub _handle_test_options { my $options = shift; # To run the command in a different directory.