# $Id: C99.pm 21030 2007-09-03 10:21:24Z paultcochrane $
# Copyright (C) 2006, The Perl Foundation.
package Parrot::Test::C99;
use strict;
use warnings;
use File::Basename;
=head1 Parrot::Test::C99
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 = 'C99 Test' unless $desc;
my $lang_f = File::Spec->rel2abs( Parrot::Test::per_test( '.c', $count ) );
my $out_f = File::Spec->rel2abs( Parrot::Test::per_test( '.out', $count ) );
my $c99_out_f = File::Spec->rel2abs( Parrot::Test::per_test( '.c99.out', $count ) );
my $c99_out_debug_f = File::Spec->rel2abs( Parrot::Test::per_test( '.c99.debug.out', $count ) );
my $parrotdir = dirname $self->{parrot};
Parrot::Test::write_code_to_file( $code, $lang_f );
my $args = $ENV{TEST_PROG_ARGS} || '';
#my $gcc_cmd = "gcc $lang_f";
#my $gcc_exit_code = Parrot::Test::run_command($gcc_cmd, CD => $self->{relpath}, STDOUT => $out_f, STDERR => $out_f );
#my $gcc_output = Parrot::Test::slurp_file($out_f);
my $c99_cmd = "$self->{parrot} $args languages/c99/c99.pbc $lang_f";
my $c99_exit_code = Parrot::Test::run_command(
$c99_cmd,
CD => $self->{relpath},
STDOUT => $c99_out_f,
STDERR => $c99_out_f
);
my $c99_output = Parrot::Test::slurp_file($c99_out_f);
my $pass = $self->{builder}->is_eq( $c99_output, "1" );
#my $pass = $self->{builder}->is_eq( $c99_output, $gcc_output, $desc );
#$self->{builder}->diag("'$gcc_cmd' failed with exit code $gcc_exit_code") if $gcc_exit_code and not $pass;
$self->{builder}->diag("'$c99_cmd' failed with exit code $c99_exit_code")
if $c99_exit_code and not $pass;
if ( not $pass ) {
my $c99_debug_cmd = "$self->{parrot} $args languages/c99/c99.pbc -d $lang_f";
my $c99_debug_exit_code = Parrot::Test::run_command(
$c99_debug_cmd,
CD => $self->{relpath},
STDOUT => $c99_out_debug_f,
STDERR => $c99_out_debug_f
);
my $c99_debug_output = Parrot::Test::slurp_file($c99_out_debug_f);
}
unless ( $ENV{POSTMORTEM} ) {
#unlink $lang_f;
unlink $out_f;
unlink $c99_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