#!perl # Copyright (C) 2001-2008, The Perl Foundation. # $Id$ use strict; use warnings; use lib qw( lib ); use Getopt::Std; # need runtests from T::H, but avoid running all our parrot invocations with -w use Test::Harness (); undef $Test::Harness::Switches; use Parrot::Harness::DefaultTests qw( get_default_tests @developing_tests ); use Parrot::Harness::Options qw( handle_long_options get_test_prog_args Usage ); use Parrot::Harness::Smoke qw( generate_html_smoke_report send_archive_to_smolder collect_test_environment_data ); local @ARGV = @ARGV; (my $longopts, @ARGV) = handle_long_options(@ARGV); $ENV{RUNNING_MAKE_TEST} = $longopts->{running_make_test}; # Suck the short options into the TEST_PROG_ARGS # environmental variable. my %opts; getopts('wgjPCSefbvdr?hO:D:', \%opts); if ($opts{'?'} || $opts{h} || $longopts->{help}) { Usage(); exit; } # add -D40; merge it with any existing -D argument $opts{D} = sprintf( '%x', hex(40) | (exists $opts{D} ? hex($opts{D}) : 0)); my $args = get_test_prog_args( \%opts, $longopts->{gc_debug}, $longopts->{run_exec} ); $ENV{TEST_PROG_ARGS} = $args; # now build the list of tests to run, either from the command # line or from @default tests my @default_tests = get_default_tests( $longopts->{core_tests_only}, $longopts->{runcore_tests_only} ); my @tests; if ($longopts->{code}) { @tests = @developing_tests; } else { @tests = map { glob($_) } (@ARGV ? @ARGV : @default_tests); } if ($longopts->{html}) { generate_html_smoke_report( { tests => \@tests, args => $args, file => 'smoke.html', } ); } else { my $harness; if ($longopts->{archive}) { eval { require TAP::Harness::Archive }; if ($@) { die "\n" . ('-' x 55) . "\nCould not load TAP::Harness::Archive." . "\nPlease install it if you want to create TAP archives.\n" . ('-' x 55) . "\n\n$@\n"; } # for extra_properties we need TAP::Harness::Archive >= .10 if ($TAP::Harness::Archive::VERSION < .10) { die "\n" . ('-' x 55) . "\nWe need TAP::Harness::Archive >= .10." . "\nPlease install it if you want to create TAP archives.\n" . ('-' x 55) . "\n"; } my %env_data = collect_test_environment_data(); $harness = TAP::Harness::Archive->new( { verbosity => $ENV{HARNESS_VERBOSE}, archive => 'parrot_test_run.tar.gz', merge => 1, extra_properties => \%env_data, } ); $harness->runtests(@tests); send_archive_to_smolder(%env_data) if $longopts->{send_to_smolder}; } else { eval { require TAP::Harness }; if ($@) { Test::Harness::runtests(@tests); exit; } else { $harness = TAP::Harness->new({ verbosity => $ENV{HARNESS_VERBOSE}, merge => 0, jobs => $ENV{TEST_JOBS} || 1, }); } $harness->runtests(@tests); } } =head1 NAME t/harness - Parrot Test Harness =head1 SYNOPSIS % perl t/harness [options] [testfiles] =head1 DESCRIPTION The short command line options are: =over 4 =item C<-w> Turn warnings on. =item C<-g> Run the C core. =item C<-j> Run with JIT enabled. =item C<-C> Run the C core. =item C<-S> Run Switched. =item C<-b> Run bounds checking enabled. =item C<-d> Run with debugging enabled. =item C<-f> Run fast core. =item C<-r> compile to Parrot bytecode and then run the bytecode. =item C<-O[012]> Run optimized to the specified level. =item C<-D[number]> Pass the specified debug bits to the parrot interpreter. Note that C<-D40> (fill I, N registers with garbage) is always enabled. See 'parrot --help-debug' for available flags. =back There are also long command line options: =over 4 =item C<--running-make-test> Some test scripts run more quickly when this is set. =item C<--gc-debug> Invoke parrot with '--gc-debug'. =item C<--html> Emit a C file instead of displaying results. =item C<--code-tests> Run only the file metadata and basic coding standards tests. =back =head1 HISTORY Mike Lambert stole F for F. Leo Toetsch stole F for F. Bernhard Schmalhofer merged F back into F. =cut # Local Variables: # mode: cperl # cperl-indent-level: 4 # fill-column: 100 # End: # vim: expandtab shiftwidth=4: