# Copyright (C) 2005, The Perl Foundation.
# $Id: ParrotCompiler.pm 16252 2006-12-25 22:18:26Z paultcochrane $
use strict;
use warnings;
use Data::Dumper;
use File::Basename;
package Parrot::Test::ParrotCompiler;
=head1 NAME
Parrot/Test/ParrotCompiler.pm - Testing routines specific to 'ParrotCompiler'.
=head1 DESCRIPTION
Calls 'parrot_compiler.pbc'.
=head1 METHODS
=head2 new
Yet another constructor.
=cut
sub new {
return bless {};
}
=head2 gen_output
Called in output_is(),
which gets called when language_output_is() is called in a test file.
=cut
sub gen_output {
my $self = shift;
my ( $code, $test_no ) = @_;
# flatten filenames (don't use directories)
my $code_f = Parrot::Test::per_test( '.code', $test_no );
my $out_f = Parrot::Test::per_test( '.out', $test_no );
my $test_prog_args = $ENV{TEST_PROG_ARGS} || '';
my $cmd = "$self->{parrot} languages/parrot_compiler/$test_prog_args < languages/$code_f";
Parrot::Test::write_code_to_file( $code, $code_f );
# STDERR is written into same output file
my $diag = '';
my $parrot_exit_code = Parrot::Test::run_command(
$cmd,
CD => $self->{relpath},
STDOUT => $out_f,
STDERR => $out_f
);
$diag .= "'$cmd' failed with exit code $parrot_exit_code." if $parrot_exit_code;
$self->{builder}->diag($diag) if $diag;
return Parrot::Test::slurp_file($out_f);
}
=head2 output_is
This gets called when language_output_is() is called in a test file.
=cut
sub output_is {
my $self = shift;
my ( $code, $expected, $desc ) = @_;
my $test_no = $self->{builder}->current_test + 1;
my $output = $self->gen_output( $code, $test_no );
my $pass = $self->{builder}->is_eq( $output, $expected, $desc );
return $pass;
}
1;
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4:
syntax highlighted by Code2HTML, v. 0.9.1