Author: jkeenan
Date: Sun May  6 08:50:34 2007
New Revision: 18437

Added:
   branches/reconfigure/lib/Parrot/Configure/Options/
   branches/reconfigure/lib/Parrot/Configure/Options/Test.pm   (contents, props 
changed)
Modified:
   branches/reconfigure/Configure.pl

Log:
Adding functionality to run configuration and build tests along with
Configure.pl.


Modified: branches/reconfigure/Configure.pl
==============================================================================
--- branches/reconfigure/Configure.pl   (original)
+++ branches/reconfigure/Configure.pl   Sun May  6 08:50:34 2007
@@ -291,6 +291,7 @@
 use Parrot::BuildUtil;
 use Parrot::Configure;
 use Parrot::Configure::Options qw( process_options );
+use Parrot::Configure::Options::Test;
 use Parrot::Configure::Messages qw(
     print_introduction
     print_conclusion
@@ -319,33 +320,10 @@
 } );
 exit unless defined $args;
 
-my %args = %$args;
-
-my ($run_configure_tests, $run_build_tests);
-if (defined $args{test}) {
-    if ($args{test} eq '1') {
-        $run_configure_tests = 1;
-        $run_build_tests = 1;
-    } elsif ($args{test} eq 'configure') {
-        $run_configure_tests = 1;
-    } elsif ($args{test} eq 'build') {
-        $run_build_tests = 1;
-    } else {
-        die "'$args{test}' is a bad value for command-line option 'test'";
-    }
-}
-
-if ($run_configure_tests) {
-    print "As you requested, we'll start with some tests of the configuration 
tools.\n\n";
-    system(qq{prove t/configure/*.t})
-        and die "Unable to execute configuration tests";
-    print <<"TEST";
-
-I just ran some tests to demonstrate that
-Parrot's configuration tools will work as intended.
-
-TEST
-}
+my $opttest = Parrot::Configure::Options::Test->new($args);
+# configuration tests will only be run if you requested them 
+# as command-line option
+$opttest->run_configure_tests();
 
 # from Parrot::Configure::Messages
 print_introduction($parrot_version);
@@ -355,6 +333,7 @@
 # from Parrot::Configure::Step::List
 $conf->add_steps(get_steps_list());
 
+my %args = %$args;
 # from Parrot::Configure::Data
 $conf->options->set(%args);
 
@@ -372,12 +351,17 @@
 }
 
 # tell users what to do next
-if ($run_build_tests) {
-    print "\n\n";
-    print "As you requested, I will now run some tests of the build 
tools.\n\n";
-    system(qq{prove t/postconfigure/*.t t/tools/pmc2cutils/*.t 
t/tools/ops2cutils/*.t t/tools/ops2pmutils/*.t})
-        and die "Unable to execute post-configuration and build tools tests";
-}
+#if ($run_build_tests) {
+#    print "\n\n";
+#    print "As you requested, I will now run some tests of the build 
tools.\n\n";
+#    system(qq{prove t/postconfigure/*.t t/tools/pmc2cutils/*.t 
t/tools/ops2cutils/*.t t/tools/ops2pmutils/*.t})
+#        and die "Unable to execute post-configuration and build tools tests";
+#}
+
+
+# build tests will only be run if you requested them 
+# as command-line option
+$opttest->run_build_tests();
 
 # from Parrot::Configure::Messages
 print_conclusion($conf->data->get('make'));

Added: branches/reconfigure/lib/Parrot/Configure/Options/Test.pm
==============================================================================
--- (empty file)
+++ branches/reconfigure/lib/Parrot/Configure/Options/Test.pm   Sun May  6 
08:50:34 2007
@@ -0,0 +1,213 @@
+# Copyright (C) 2001-2006, The Perl Foundation.
+# $Id$
+package Parrot::Configure::Options::Test;
+use strict;
+
+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";
+        system(qq{prove @preconfiguration_tests})
+            and die "Unable to execute configuration tests";
+        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";
+        system(qq{prove @postconfiguration_tests})
+            and die "Unable to execute post-configuration and build tools 
tests";
+    }
+    return 1;
+}
+
+1;
+
+#################### DOCUMENTATION ####################
+
+=head1 NAME
+
+Parrot::Configure::Options::Test - Run configuration and build tests along 
with F<Configure.pl>
+
+=head1 SYNOPSIS
+
+In F<Configure.pl>:
+
+    use Parrot::Configure::Options;
+    use Parrot::Configure::Options::Test;
+
+    $args = process_options( {
+        argv            => [ @ARGV ],
+        script          => $0,
+        parrot_version  => $parrot_version,
+        svnid           => '$Id$',
+    } );
+
+    $opttest = Parrot::Configure::Options::Test->new($args);
+
+    $opttest->run_configure_tests();
+
+    $opttest->run_build_tests();
+
+On command line:
+
+    # run tests of configuration tools only
+    perl Configure.pl  --test=configure
+
+    # run tests of build tools only
+    perl Configure.pl  --test=build
+
+    # run tests of both configuration and build tools only
+    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<make test>.  In any event, running these tests as part
+of F<make test> is, in a certain sense, running them too late.  If you have
+successfully called F<Configure.pl> and F<make>, you have implicitly
+demonstrated that the configuration and build tools work (for the most part),
+so running tests of those tools post-F<make> is somewhat redundant.
+
+On the other hand, tests of the configuration tools I<are> meaningful if run
+I<before> F<Configure.pl> is invoked and, similarly, tests of the build tools
+I<are> meaningful if run I<before> F<make> is invoked.
+Parrot::Configure::Options::Test provides functionality for running such
+tests.
+
+=head1 SUBROUTINES
+
+=head2 C<new()>
+
+=over 4
+
+=item * Purpose
+
+Parrot::Configure::Options::Test constructor.
+
+=item * Arguments
+
+One argument:  The hash reference which is the return value of
+C<Parrot::Configure::Options::process_options()>.
+
+=item * Return Value
+
+Parrot::Configure::Options::Test object.
+
+=item * Comment
+
+=back
+
+=head2 C<run_configure_tests()>
+
+=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<t/configure/*.t>.
+
+=back
+
+=head2 C<run_build_tests()>
+
+=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<Configure.pl> 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<Configure.pl>.  F<lib/Parrot/Configure/Options.pm>.
+
+=cut
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Reply via email to