Patch attached refactors Parrot configuration step auto::headers to
improve testability. 3 additional test files contributed. Will apply
in 2-3 days if there is no objection.
Index: MANIFEST
===================================================================
--- MANIFEST (revision 22788)
+++ MANIFEST (working copy)
@@ -1,7 +1,7 @@
# ex: set ro:
# $Id$
#
-# generated by tools/dev/mk_manifest_and_skip.pl Sat Nov 10 01:52:43 2007 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Sun Nov 11 00:43:11 2007 UT
#
# See tools/dev/install_files.pl for documentation on the
# format of this file.
@@ -3068,6 +3068,9 @@
t/configure/124-auto_alignptrs-04.t []
t/configure/124-auto_alignptrs-05.t []
t/configure/125-auto_headers-01.t []
+t/configure/125-auto_headers-02.t []
+t/configure/125-auto_headers-03.t []
+t/configure/125-auto_headers-04.t []
t/configure/126-auto_sizes-01.t []
t/configure/127-auto_byteorder-01.t []
t/configure/127-auto_byteorder-02.t []
Index: t/configure/125-auto_headers-02.t
===================================================================
--- t/configure/125-auto_headers-02.t (revision 0)
+++ t/configure/125-auto_headers-02.t (revision 0)
@@ -0,0 +1,82 @@
+#! perl
+# Copyright (C) 2007, The Perl Foundation.
+# $Id$
+# 125-auto_headers-02.t
+
+use strict;
+use warnings;
+use Test::More tests => 13;
+use Carp;
+use lib qw( lib t/configure/testlib );
+use_ok('config::init::defaults');
+use_ok('config::auto::headers');
+use Parrot::Configure;
+use Parrot::Configure::Options qw( process_options );
+use Parrot::Configure::Test qw( test_step_thru_runstep);
+
+my $args = process_options(
+ {
+ argv => [ ],
+ mode => q{configure},
+ }
+);
+
+my $conf = Parrot::Configure->new;
+
+test_step_thru_runstep( $conf, q{init::defaults}, $args );
+
+my $pkg = q{auto::headers};
+
+$conf->add_steps($pkg);
+$conf->options->set( %{$args} );
+
+my ( $task, $step_name, @step_params, $step);
+$task = $conf->steps->[1];
+$step_name = $task->step;
[EMAIL PROTECTED] = @{ $task->params };
+
+$step = $step_name->new();
+ok( defined $step, "$step_name constructor returned defined value" );
+isa_ok( $step, $step_name );
+ok( $step->description(), "$step_name has description" );
+
+my $ret = $step->runstep($conf);
+ok( $ret, "$step_name runstep() returned true value" );
+is($step->result(), q{}, "Result is empty string as expected");
+
+pass("Keep Devel::Cover happy");
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+125-auto_headers-02.t - test config::auto::headers
+
+=head1 SYNOPSIS
+
+ % prove t/configure/125-auto_headers-02.t
+
+=head1 DESCRIPTION
+
+The files in this directory test functionality used by F<Configure.pl>.
+
+The tests in this file test config::auto::headers in its most typical
+case.
+
+=head1 AUTHOR
+
+James E Keenan
+
+=head1 SEE ALSO
+
+config::auto::headers, 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/125-auto_headers-02.t
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Index: t/configure/125-auto_headers-03.t
===================================================================
--- t/configure/125-auto_headers-03.t (revision 0)
+++ t/configure/125-auto_headers-03.t (revision 0)
@@ -0,0 +1,91 @@
+#! perl
+# Copyright (C) 2007, The Perl Foundation.
+# $Id$
+# 125-auto_headers-03.t
+
+use strict;
+use warnings;
+use Test::More tests => 14;
+use Carp;
+use lib qw( lib t/configure/testlib );
+use_ok('config::init::defaults');
+use_ok('config::auto::headers');
+use Parrot::Configure;
+use Parrot::Configure::Options qw( process_options );
+use Parrot::Configure::Test qw( test_step_thru_runstep);
+use Parrot::IO::Capture::Mini;
+
+my $args = process_options(
+ {
+ argv => [ q{--verbose} ],
+ mode => q{configure},
+ }
+);
+
+my $conf = Parrot::Configure->new;
+
+test_step_thru_runstep( $conf, q{init::defaults}, $args );
+
+my $pkg = q{auto::headers};
+
+$conf->add_steps($pkg);
+$conf->options->set( %{$args} );
+
+my ( $task, $step_name, @step_params, $step);
+$task = $conf->steps->[1];
+$step_name = $task->step;
[EMAIL PROTECTED] = @{ $task->params };
+
+$step = $step_name->new();
+ok( defined $step, "$step_name constructor returned defined value" );
+isa_ok( $step, $step_name );
+ok( $step->description(), "$step_name has description" );
+
+{
+ my $tie_out = tie *STDOUT, "Parrot::IO::Capture::Mini"
+ or croak "Unable to tie";
+ my $ret = $step->runstep($conf);
+ my @more_lines = $tie_out->READLINE;
+ ok( @more_lines, "verbose output captured" );
+ ok( $ret, "$step_name runstep() returned true value" );
+ is($step->result(), q{}, "Result is empty string as expected");
+
+}
+untie *STDOUT;
+
+pass("Keep Devel::Cover happy");
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+125-auto_headers-03.t - test config::auto::headers
+
+=head1 SYNOPSIS
+
+ % prove t/configure/125-auto_headers-03.t
+
+=head1 DESCRIPTION
+
+The files in this directory test functionality used by F<Configure.pl>.
+
+The tests in this file test config::auto::headers with the C<verbose>
+option set.
+
+=head1 AUTHOR
+
+James E Keenan
+
+=head1 SEE ALSO
+
+config::auto::headers, 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/125-auto_headers-03.t
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Index: t/configure/125-auto_headers-04.t
===================================================================
--- t/configure/125-auto_headers-04.t (revision 0)
+++ t/configure/125-auto_headers-04.t (revision 0)
@@ -0,0 +1,90 @@
+#! perl
+# Copyright (C) 2007, The Perl Foundation.
+# $Id$
+# 125-auto_headers-04.t
+
+use strict;
+use warnings;
+use Test::More tests => 15;
+use Carp;
+use Config;
+use lib qw( lib t/configure/testlib );
+use_ok('config::init::defaults');
+use_ok('config::auto::headers');
+use Parrot::Configure;
+use Parrot::Configure::Options qw( process_options );
+use Parrot::Configure::Test qw( test_step_thru_runstep);
+use Parrot::IO::Capture::Mini;
+
+my $args = process_options(
+ {
+ argv => [ ],
+ mode => q{configure},
+ }
+);
+
+my $conf = Parrot::Configure->new;
+
+test_step_thru_runstep( $conf, q{init::defaults}, $args );
+
+my $pkg = q{auto::headers};
+
+$conf->add_steps($pkg);
+$conf->options->set( %{$args} );
+
+my ( $task, $step_name, @step_params, $step);
+$task = $conf->steps->[1];
+$step_name = $task->step;
[EMAIL PROTECTED] = @{ $task->params };
+
+$step = $step_name->new();
+ok( defined $step, "$step_name constructor returned defined value" );
+isa_ok( $step, $step_name );
+ok( $step->description(), "$step_name has description" );
+
+auto::headers::_set_from_Config($conf, \%Config);
+ok($conf->data->get('i_netinetin'), "Mapping made correctly");
+ok(! $conf->data->get('i_niin'), "Mapping made correctly");
+
+{
+ local $^O = "msys";
+ my %extra_headers = map {$_, 1} auto::headers::_list_extra_headers();
+ ok($extra_headers{'sysmman.h'}, "Special header set for msys");
+ ok($extra_headers{'netdb.h'}, "Special header set for msys");
+}
+
+pass("Keep Devel::Cover happy");
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+125-auto_headers-04.t - test config::auto::headers
+
+=head1 SYNOPSIS
+
+ % prove t/configure/125-auto_headers-04.t
+
+=head1 DESCRIPTION
+
+The files in this directory test functionality used by F<Configure.pl>.
+
+The tests in this file test subroutines internal to config::auto::headers.
+
+=head1 AUTHOR
+
+James E Keenan
+
+=head1 SEE ALSO
+
+config::auto::headers, 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/125-auto_headers-04.t
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Index: t/configure/125-auto_headers-01.t
===================================================================
--- t/configure/125-auto_headers-01.t (revision 22788)
+++ t/configure/125-auto_headers-01.t (working copy)
@@ -60,7 +60,8 @@
The files in this directory test functionality used by F<Configure.pl>.
-The tests in this file test subroutines exported by config::auto::headers.
+The tests in this file test config::auto::headers with the C<miniparrot>
+option set.
=head1 AUTHOR
Index: config/auto/headers.pm
===================================================================
--- config/auto/headers.pm (revision 22788)
+++ config/auto/headers.pm (working copy)
@@ -39,36 +39,10 @@
$self->set_result('skipped');
return 1;
}
+ _set_from_Config($conf, \%Config);
- # perl5's Configure system doesn't call this by its full name, which may
- # confuse use later, particularly once we break free and start doing all
- # probing ourselves
- my %mapping = ( i_niin => "i_netinetin" );
+ my @extra_headers = _list_extra_headers();
- for ( keys %Config ) {
- next unless /^i_/;
- $conf->data->set( $mapping{$_} || $_ => $Config{$_} );
- }
-
- # some headers may not be probed-for by perl 5, or might not be
- # properly reflected in %Config (i_fcntl seems to be wrong on my machine,
- # for instance).
- #
- # FreeBSD wants this order:
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- # hence add sys/types.h to the reprobe list, and have 2 goes at getting
- # the header.
- my @extra_headers = qw(malloc.h fcntl.h setjmp.h pthread.h signal.h
- sys/types.h sys/socket.h netinet/in.h arpa/inet.h
- sys/stat.h sysexit.h limits.h);
-
- # more extra_headers needed on mingw/msys; *BSD fails if they are present
- if ( $^O eq "msys" ) {
- push @extra_headers, qw(sysmman.h netdb.h);
- }
my @found_headers;
foreach my $header (@extra_headers) {
my $pass = 0;
@@ -78,7 +52,8 @@
# work on *BSD where some headers are documented as relying on others
# being included first.
foreach my $use_headers ( [$header], [ @found_headers, $header ] ) {
- $conf->data->set( testheaders => join( '', map { "#include <$_>\n"
} @$use_headers ) );
+ $conf->data->set( testheaders =>
+ join( '', map { "#include <$_>\n" } @$use_headers ) );
$conf->data->set( testheader => $header );
cc_gen('config/auto/headers/test_c.in');
@@ -105,6 +80,43 @@
return 1;
}
+sub _set_from_Config {
+ my ($conf, $Configref) = @_;
+ # perl5's Configure system doesn't call this by its full name, which may
+ # confuse use later, particularly once we break free and start doing all
+ # probing ourselves
+ my %mapping = ( i_niin => "i_netinetin" );
+
+ for ( keys %{$Configref} ) {
+ next unless /^i_/;
+ $conf->data->set( $mapping{$_} || $_ => $Configref->{$_} );
+ }
+}
+
+sub _list_extra_headers {
+ # some headers may not be probed-for by perl 5, or might not be
+ # properly reflected in %Config (i_fcntl seems to be wrong on my machine,
+ # for instance).
+ #
+ # FreeBSD wants this order:
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+ # hence add sys/types.h to the reprobe list, and have 2 goes at getting
+ # the header.
+ my @extra_headers = qw(malloc.h fcntl.h setjmp.h pthread.h signal.h
+ sys/types.h sys/socket.h netinet/in.h arpa/inet.h
+ sys/stat.h sysexit.h limits.h);
+
+ # more extra_headers needed on mingw/msys; *BSD fails if they are present
+ if ( $^O eq "msys" ) {
+ push @extra_headers, qw(sysmman.h netdb.h);
+ }
+ return @extra_headers;
+}
+
+
1;
# Local Variables: