# $Id: Cardinal.pm 21035 2007-09-03 10:23:53Z paultcochrane $
package Parrot::Test::Cardinal;
# Copyright (C) 2006-2007, The Perl Foundation.
use strict;
use warnings;
use File::Basename;
=head1 Parrot::Test::Cardinal
Provide language specific testing routines here...
This is currently alarmingly similar to the generated subs in Parrot::Test.
Perhaps someone can do a better job of delegation here.
=cut
sub new {
return bless {};
}
sub output_is() {
my ( $self, $code, $output, $desc ) = @_;
#print "@_\n";
my $count = $self->{builder}->current_test + 1;
$desc = 'Cardinal Test' unless $desc;
my $lang_f = File::Spec->rel2abs( Parrot::Test::per_test( '.rb', $count ) );
my $out_f = File::Spec->rel2abs( Parrot::Test::per_test( '.out', $count ) );
my $cardinal_out_f = File::Spec->rel2abs( Parrot::Test::per_test( '.cardinal.out', $count ) );
my $cardinal_out_debug_f =
File::Spec->rel2abs( Parrot::Test::per_test( '.cardinal.debug.out', $count ) );
my $parrotdir = dirname $self->{parrot};
Parrot::Test::write_code_to_file( $code, $lang_f );
my $args = $ENV{TEST_PROG_ARGS} || '';
my $ruby_cmd = "ruby $lang_f";
my $ruby_exit_code = Parrot::Test::run_command(
$ruby_cmd,
CD => $self->{relpath},
STDOUT => $out_f,
STDERR => $out_f
);
my $ruby_output = Parrot::Test::slurp_file($out_f);
my $cardinal_cmd = "$self->{parrot} $args languages/cardinal/cardinal.pbc $lang_f";
my $cardinal_exit_code = Parrot::Test::run_command(
$cardinal_cmd,
CD => $self->{relpath},
STDOUT => $cardinal_out_f,
STDERR => $cardinal_out_f
);
my $cardinal_output = Parrot::Test::slurp_file($cardinal_out_f);
my $pass = $self->{builder}->is_eq( $cardinal_output, $ruby_output, $desc );
$self->{builder}->diag("'$ruby_cmd' failed with exit code $ruby_exit_code")
if $ruby_exit_code and not $pass;
$self->{builder}->diag("'$cardinal_cmd' failed with exit code $cardinal_exit_code")
if $cardinal_exit_code and not $pass;
if ( not $pass ) {
my $cardinal_debug_cmd = "$self->{parrot} $args languages/cardinal/cardinal.pbc -d $lang_f";
my $cardinal_debug_exit_code = Parrot::Test::run_command(
$cardinal_debug_cmd,
CD => $self->{relpath},
STDOUT => $cardinal_out_debug_f,
STDERR => $cardinal_out_debug_f
);
my $cardinal_debug_output = Parrot::Test::slurp_file($cardinal_out_debug_f);
}
unless ( $ENV{POSTMORTEM} ) {
#unlink $lang_f;
unlink $out_f;
unlink $cardinal_out_f;
}
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