Please review patch.
Index: Configure.pl
===================================================================
--- Configure.pl        (revision 18438)
+++ Configure.pl        (working copy)
@@ -60,8 +60,35 @@
 
 This turns on the user prompts.
 
+=item C<--test>
+
+Run certain tests along with F<Configure.pl>:
+
+=over 4
+
+=item C<--test=configure>
+
+Run tests found in F<t/configure/> I<before> beginning configuration.  These
+tests demonstrate that Parrot's configuration tools will work properly once
+configuration has begun.
+
+=item C<--test=build>
+
+Run tests found in F<t/postconfigure/>, F<t/tools/pmc2cutils/>,
+F<t/tools/ops2cutils/> and F<t/tools/ops2pmutils/> I<after> configuration has
+completed.  These tests demonstrate (a) that certain of Parrot's configuration
+tools are working properly post-configuration; and (b) that certain of
+Parrot's build tools will work properly once you call F<make>.
+
+=item C<--test>
+
+Run the tests described in C<--test=configure>, conduct configuration, then
+run the tests described in C<--test=build>.
+
 =back
 
+=back
+
 Compile Options
 
 =over
@@ -264,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
@@ -292,7 +320,10 @@
 } );
 exit unless defined $args;
 
-my %args = %$args;
+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);
@@ -302,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);
 
@@ -319,6 +351,18 @@
 }
 
 # 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";
+#}
+
+
+# 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'));
 
Index: lib/Parrot/Configure/Options.pm
===================================================================
--- lib/Parrot/Configure/Options.pm     (revision 18438)
+++ lib/Parrot/Configure/Options.pm     (working copy)
@@ -16,8 +16,8 @@
         jitcapable ld ldflags lex libdir libexecdir libs link linkflags
         localstatedir m maintainer mandir miniparrot nomanicheck oldincludedir
         opcode ops optimize parrot_is_shared pmc prefix profile sbindir
-        sharedstatedir step sysconfdir verbose verbose-step version 
without-gdbm
-        without-gmp without-icu yacc);
+        sharedstatedir step sysconfdir test verbose verbose-step version 
+        without-gdbm without-gmp without-icu yacc);
 }
 
 sub process_options {
@@ -88,6 +88,11 @@
                         Execute a single configure step
 
    --ask                Have Configure ask for commonly-changed info
+   --test=configure     Run tests of configuration tools before configuring
+   --test=build         Run tests of build tools after configuring but before
+                        calling 'make'
+   --test               Run configuration tools tests, configure, then run
+                        build tools tests
 
 Compile Options:
 
Index: lib/Parrot/Configure/Options/Test.pm
===================================================================
--- lib/Parrot/Configure/Options/Test.pm        (revision 0)
+++ lib/Parrot/Configure/Options/Test.pm        (revision 0)
@@ -0,0 +1,214 @@
+# Copyright (C) 2001-2006, The Perl Foundation.
+# $Id: Test.pm 18438 2007-05-06 15:52:28Z jkeenan $
+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: Test.pm 18438 2007-05-06 15:52:28Z jkeenan $',
+    } );
+
+    $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<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:

Property changes on: lib/Parrot/Configure/Options/Test.pm
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Index: t/configure/25-options_test.t
===================================================================
--- t/configure/25-options_test.t       (revision 0)
+++ t/configure/25-options_test.t       (revision 0)
@@ -0,0 +1,118 @@
+#! perl
+# Copyright (C) 2007, The Perl Foundation.
+# $Id: 25-options_test.t 18310 2007-04-24 01:27:22Z jkeenan $
+# 25-options_test.t
+
+use strict;
+use warnings;
+use Carp;
+use Cwd;
+use Data::Dumper;
+use File::Temp qw( tempdir );
+use Test::More tests => 10;
+use lib qw( . lib ../lib ../../lib );
+use_ok('Parrot::IO::Capture::Mini');
+use_ok(
+    'Parrot::Configure::Options', qw|
+        process_options
+    |
+);
+use_ok("Parrot::Configure::Options::Test");
+
+my ($args, $opttest);
+
+my $parrot_version = '0.4.10';
+my $svnid          = '$Id: 25-options_test.t 18310 2007-04-24 01:27:22Z 
jkeenan $';
+$args = process_options(
+    {
+        argv            => [ q{--test} ],
+        script           => $0,
+        parrot_version  => $parrot_version,
+        svnid           => $svnid,
+    }
+);
+ok( defined $args, "process_options() returned successfully when options were 
specified" );
+
+$opttest = Parrot::Configure::Options::Test->new($args);
+ok(defined $opttest, "Constructor returned successfully");
+
+# Running the actual pre- and post-configuration tests would be too
+# time-consuming.  So instead, we want to redefine the lists of tests to be
+# run to include only dummy test files found in temporary directories.
+
+my $cwd = cwd();
+
+my $teststring = <<"TEST";
+use Test::More tests => 1;
+{
+    pass("Dummy test passed");
+}
+TEST
+
+{
+    my $tdir = tempdir;
+    ok( (chdir $tdir), "Changed to temporary directory for testing");
+    my $test = q{testfile};
+    open my $T, ">", $test
+        or die "Unable to open dummy test file for writing";
+    print $T $teststring;
+    close $T or die "Unable to close dummy test file after writing";
+
+    my ($tie, $errtie, @lines);
+    no warnings 'once';
+
+    @Parrot::Configure::Options::Test::preconfiguration_tests = 
+        ( $test );
+    {
+        $tie = tie *STDOUT, "Parrot::IO::Capture::Mini"
+            or croak "Unable to tie";
+        ok($opttest->run_configure_tests(),
+            "Configuration tests are runnable");
+    }
+
+    @Parrot::Configure::Options::Test::postconfiguration_tests = 
+        ( $test );
+    {
+        $tie = tie *STDOUT, "Parrot::IO::Capture::Mini"
+            or croak "Unable to tie";
+        ok($opttest->run_build_tests(),
+            "Build tests are runnable");
+    }
+
+    ok( (chdir $cwd), "Changed back to starting directory after testing");
+}
+
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+25-options_test.t - test Parrot::Configure::Options::Test
+
+=head1 SYNOPSIS
+
+    % prove t/configure/25-options_test.t
+
+=head1 DESCRIPTION
+
+The files in this directory test functionality used by F<Configure.pl>.
+
+The tests in this file test Parrot::Configure::Options::Test methods.
+
+=head1 AUTHOR
+
+James E Keenan
+
+=head1 SEE ALSO
+
+Parrot::Configure::Options, F<Configure.pl>.
+
+=cut
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Property changes on: t/configure/25-options_test.t
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Index: MANIFEST
===================================================================
--- MANIFEST    (revision 18438)
+++ MANIFEST    (working copy)
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Sat May  5 17:13:00 2007 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Sun May  6 16:30:15 2007 UT
 #
 # See tools/dev/install_files.pl for documentation on the
 # format of this file.
@@ -2240,6 +2240,7 @@
 lib/Parrot/Configure/Data.pm                                [devel]
 lib/Parrot/Configure/Messages.pm                            [devel]
 lib/Parrot/Configure/Options.pm                             [devel]
+lib/Parrot/Configure/Options/Test.pm                        [devel]
 lib/Parrot/Configure/Step.pm                                [devel]
 lib/Parrot/Configure/Step/Base.pm                           [devel]
 lib/Parrot/Configure/Step/List.pm                           [devel]
@@ -2813,6 +2814,7 @@
 t/configure/22-version.t                                    []
 t/configure/23-version.t                                    []
 t/configure/24-version.t                                    []
+t/configure/25-options_test.t                               []
 t/configure/base.t                                          []
 t/configure/config_steps.t                                  []
 t/configure/data.t                                          []

Reply via email to