# Copyright (C) 2001-2006, The Perl Foundation. # $Id: Test.pm 21450 2007-09-21 09:33:12Z paultcochrane $ package Parrot::Configure::Options::Test; use strict; use warnings; use Config; # to find the correct $Config{scriptdir}/prove use File::Spec; # to construct the path to the correct 'prove' our @preconfiguration_tests = qw( t/configure/*.t ); our @postconfiguration_tests = qw( t/postconfigure/*.t t/tools/pmc2cutils/*.t t/tools/ops2cutils/*.t t/tools/ops2pmutils/*.t ); sub new { my ( $class, $argsref ) = @_; my $self = {}; my ( $run_configure_tests, $run_build_tests ); if ( defined $argsref->{test} ) { if ( $argsref->{test} eq '1' ) { $self->{run_configure_tests} = 1; $self->{run_build_tests} = 1; } elsif ( $argsref->{test} eq 'configure' ) { $self->{run_configure_tests} = 1; } elsif ( $argsref->{test} eq 'build' ) { $self->{run_build_tests} = 1; } else { die "'$argsref->{test}' is a bad value for command-line option 'test'"; } } return bless $self, $class; } sub run_configure_tests { my $self = shift; if ( $self->{run_configure_tests} ) { print "As you requested, we'll start with some tests of the configuration tools.\n\n"; # Find the 'prove' command associated with *this* version of perl. my $prove = File::Spec->catfile( $Config{'scriptdir'}, 'prove' ); system(qq{$prove @preconfiguration_tests}) and die "Pre-configuration tests did not complete successfully; Configure.pl will not continue."; print <<"TEST"; I just ran some tests to demonstrate that Parrot's configuration tools will work as intended. TEST } return 1; } sub run_build_tests { my $self = shift; if ( $self->{run_build_tests} ) { print "\n\n"; print "As you requested, I will now run some tests of the build tools.\n\n"; my $prove = File::Spec->catfile( $Config{'scriptdir'}, 'prove' ); system(qq{$prove @postconfiguration_tests}) and die "Post-configuration and build tools tests did not complete successfully; running 'make' might be dubious."; } return 1; } 1; #################### DOCUMENTATION #################### =head1 NAME Parrot::Configure::Options::Test - Run configuration and build tests along with F =head1 SYNOPSIS In F: use Parrot::Configure::Options; use Parrot::Configure::Options::Test; $args = process_options( { argv => [ @ARGV ], mode => q{configure}, } ); $opttest = Parrot::Configure::Options::Test->new($args); $opttest->run_configure_tests(); $opttest->run_build_tests(); On command line: # run tests of configuration tools, then configure perl Configure.pl --test=configure # configure, then run tests of build tools perl Configure.pl --test=build # run tests of configuration tools, then configure, # then run tests of build tools perl Configure.pl --test =head1 DESCRIPTION Test suites have been constructed which test those of Parrot's configuration and build tools that are written in Perl 5. These tests are not necessarily run when you invoke F. In any event, running these tests as part of F is, in a certain sense, running them too late. If you have successfully called F and F, you have implicitly demonstrated that the configuration and build tools work (for the most part), so running tests of those tools post-F is somewhat redundant. On the other hand, tests of the configuration tools I meaningful if run I F is invoked and, similarly, tests of the build tools I meaningful if run I F is invoked. Parrot::Configure::Options::Test provides functionality for running such tests. =head1 SUBROUTINES =head2 C =over 4 =item * Purpose Parrot::Configure::Options::Test constructor. =item * Arguments One argument: The hash reference which is the return value of C. =item * Return Value Parrot::Configure::Options::Test object. =item * Comment =back =head2 C =over 4 =item * Purpose Run tests of Parrot's configuration tools. =item * Arguments None. =item * Return Value None. =item * Comments The tests to be executed are listed in C<@Parrot::Configure::Options::Test::preconfiguration_tests>. Edit that list to run different tests. Currently, that array runs all tests in F. =back =head2 C =over 4 =item * Purpose Run tests of Parrot's build tools. Also, run tests of certain aspects of the configuration process which, for legacy reasons, must run after F has completed execution. =item * Arguments None. =item * Return Value None. =item * Comments The tests to be executed are listed in C<@Parrot::Configure::Options::Test::postconfiguration_tests>. Edit that list to run different tests. Currently, that array runs all tests in: t/postconfigure/*.t t/tools/pmc2cutils/*.t t/tools/ops2cutils/*.t t/tools/ops2pmutils/*.t =back =head1 AUTHOR James E Keenan, in response to request by Jerry Gay in http://rt.perl.org/rt3/Ticket/Display.html?id=42690. =head1 SEE ALSO F. F. =cut # Local Variables: # mode: cperl # cperl-indent-level: 4 # fill-column: 100 # End: # vim: expandtab shiftwidth=4: