# New Ticket Created by James Keenan
# Please include the string: [perl #42872]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=42872 >
1. Refactored Parrot::BuildUtils::parrot_version() to eliminate
unreachable code.
2. Added additional POD to lib/Parrot/BuildUtils.pm.
3. Added 6 test files in t/configure (plus one module exporting a
subroutine used during tests). Tests now provide 100% coverage of code.
4. New files added to MANIFEST.
Will be applied to trunk in approximately 3 days if no one screams.
kid51
Index: lib/Parrot/BuildUtil.pm
===================================================================
--- lib/Parrot/BuildUtil.pm (revision 18414)
+++ lib/Parrot/BuildUtil.pm (working copy)
@@ -7,28 +7,36 @@
=head1 DESCRIPTION
-For now only a sub for getting the current version.
+For now, this package contains only one subroutine: C<parrot_version()>.
+This subroutine is not exported and so must be requested with a fully
+qualified path.
-=head2 Functions
-
-=over 4
-
=cut
package Parrot::BuildUtil;
-
use strict;
use warnings;
+=head2 SUBROUTINES
+
+=over 4
+
=item C<parrot_version()>
-Determine the current version number for Parrot from the VERSION file
-and return it.
+Determines the current version number for Parrot from the VERSION file
+and returns it in a context-appropriate manner.
+ $parrot_version = Parrot::BuildUtil::parrot_version();
+ # $parrot_version is '0.4.11'
+
+ @parrot_version = Parrot::BuildUtil::parrot_version();
+ # @parrot_version is (0, 4, 11)
+
+=back
+
=cut
# cache for repeated calls
-# XXX this could be in BEGIN block
my ( $parrot_version, @parrot_version );
sub parrot_version {
@@ -38,10 +46,9 @@
# Obtain the official version number from the VERSION file.
open my $VERSION, '<', 'VERSION' or die "Could not open VERSION file!";
- $parrot_version = <$VERSION>;
+ chomp( $parrot_version = <$VERSION> );
close $VERSION;
- chomp $parrot_version;
$parrot_version =~ s/\s+//g;
@parrot_version = split( /\./, $parrot_version );
@@ -53,30 +60,23 @@
die "Too many components to VERSION file contents: '$parrot_version'
(should be 3 or 4)!";
}
- foreach (@parrot_version) {
- die "Illegal version component: '$_' in VERSION file!" unless
m/^[1-9]*\w*$/;
+ foreach my $component (@parrot_version) {
+ die "Illegal version component: '$component' in VERSION file!"
+ unless $component =~ m/^\d+$/;
}
- if ( @parrot_version == 4 ) {
-
- # $parrot_version[2] = $parrot_version[2] . "_" .
$parrot_version[3];
- $#parrot_version = 3;
- }
$parrot_version = join( '.', @parrot_version );
-
return wantarray ? @parrot_version : $parrot_version;
}
-=back
+1;
=head1 AUTHOR
-Gregor N. Purdy
+Gregor N. Purdy. Revised by James E Keenan.
=cut
-1;
-
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
Index: MANIFEST
===================================================================
--- MANIFEST (revision 18414)
+++ MANIFEST (working copy)
@@ -1,7 +1,7 @@
# ex: set ro:
# $Id$
#
-# generated by tools/dev/mk_manifest_and_skip.pl Wed May 2 05:53:44 2007 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Fri May 4 01:19:45 2007 UT
#
# See tools/dev/install_files.pl for documentation on the
# format of this file.
@@ -2805,10 +2805,17 @@
t/configure/14-params.t []
t/configure/15-no_return.t []
t/configure/16-no_return_but_result.t []
+t/configure/19-version.t []
+t/configure/20-version.t []
+t/configure/21-version.t []
+t/configure/22-version.t []
+t/configure/23-version.t []
+t/configure/24-version.t []
t/configure/base.t []
t/configure/config_steps.t []
t/configure/data.t []
t/configure/step.t []
+t/configure/testlib/Make_VERSION_File.pm []
t/configure/testlib/init/alpha.pm []
t/configure/testlib/init/beta.pm []
t/configure/testlib/init/delta.pm []
@@ -2816,7 +2823,6 @@
t/configure/testlib/init/foobar.pm []
t/configure/testlib/init/gamma.pm []
t/configure/testlib/init/zeta.pm []
-t/postconfigure/01-data_slurp.t []
t/distro/file_metadata.t []
t/distro/manifest.t []
t/distro/manifest_skip.t []
@@ -3024,6 +3030,7 @@
t/pmc/unmanagedstruct.t []
t/pmc/version.t []
t/pmc/vtablecache.t []
+t/postconfigure/01-data_slurp.t []
t/run/README []
t/run/exit.t []
t/run/options.t []
Index: MANIFEST.SKIP
===================================================================
--- MANIFEST.SKIP (revision 18414)
+++ MANIFEST.SKIP (working copy)
@@ -1,6 +1,6 @@
# ex: set ro:
# $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Tue May 1 14:25:10 2007 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Fri May 4 01:19:45 2007 UT
#
# This file should contain a transcript of the svn:ignore properties
# of the directories in the Parrot subversion repository. (Needed for
Index: t/configure/20-version.t
===================================================================
--- t/configure/20-version.t (revision 0)
+++ t/configure/20-version.t (revision 0)
@@ -0,0 +1,74 @@
+#! perl
+# Copyright (C) 2007, The Perl Foundation.
+# $Id: 20-version.t 18406 2007-05-03 02:15:18Z jkeenan $
+# 20-version.t
+
+use strict;
+use warnings;
+
+use Test::More tests => 11;
+use Carp;
+use_ok( 'Cwd' );
+use_ok( 'File::Copy' );
+use_ok( 'File::Temp', qw| tempdir | );
+use lib qw( . lib ../lib ../../lib t/configure/testlib );
+use_ok( 'Make_VERSION_File', qw| make_VERSION_file |);
+
+my $cwd = cwd();
+my $errstr;
+{
+ my $tdir = tempdir();
+ ok(chdir $tdir, "Changed to temporary directory for testing");
+ ok((mkdir "lib"), "Able to make directory lib");
+ ok((mkdir "lib/Parrot"), "Able to make directory lib/Parrot");
+ ok(copy ("$cwd/lib/Parrot/BuildUtil.pm", "lib/Parrot/"),
+ "Able to copy Parrot::BuildUtil for testing");
+ unshift(@INC, "lib");
+
+ require Parrot::BuildUtil;
+
+ # Case 2: VERSION file with <3-element version number
+ make_VERSION_file(q{0.4});
+ eval {
+ my $pv = Parrot::BuildUtil::parrot_version();
+ };
+ like($@, qr/Too few components to VERSION file contents/,
+ "Correctly detected too few components in version number");
+
+ ok(chdir $cwd, "Able to change back to directory after testing");
+}
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+20-version.t - test C<Parrot::BuildUtil::parrot_version()>
+
+=head1 SYNOPSIS
+
+ % prove t/configure/20-version.t
+
+=head1 DESCRIPTION
+
+The files in this directory test functionality used by F<Configure.pl>.
+
+The tests in this file test Parrot::BuildUtil (F<lib/Parrot/BuildUtil.pm>).
+
+=head1 AUTHOR
+
+James E Keenan
+
+=head1 SEE ALSO
+
+Parrot::BuildUtil, 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/20-version.t
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Index: t/configure/testlib/Make_VERSION_File.pm
===================================================================
--- t/configure/testlib/Make_VERSION_File.pm (revision 0)
+++ t/configure/testlib/Make_VERSION_File.pm (revision 0)
@@ -0,0 +1,31 @@
+# Copyright (C) 2001-2003, The Perl Foundation.
+# $Id: alpha.pm 18226 2007-04-15 17:23:44Z jkeenan $
+package Make_VERSION_File;
+use strict;
+use vars qw(@ISA @EXPORT_OK);
[EMAIL PROTECTED] = qw( Exporter );
[EMAIL PROTECTED] = qw( make_VERSION_file );
+
+sub make_VERSION_file {
+ my $v = shift;
+ my $vfile = 'VERSION';
+ open my $FH, ">", $vfile
+ or die "Unable to open $vfile for writing: $!";
+ print $FH $v;
+ close $FH or die "Unable to close $vfile after writing: $!";
+}
+
+1;
+
+=head1 NAME
+
+t/configure/testlib/Make_VERSION_File.pm - Subroutines used in testing
C<Parrot::Build::Util::parrot_version()>
+
+=head1 SYNOPSIS
+
+=head1 AUTHOR
+
+James E Keenan
+
+=cut
+
Property changes on: t/configure/testlib/Make_VERSION_File.pm
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Index: t/configure/21-version.t
===================================================================
--- t/configure/21-version.t (revision 0)
+++ t/configure/21-version.t (revision 0)
@@ -0,0 +1,74 @@
+#! perl
+# Copyright (C) 2007, The Perl Foundation.
+# $Id: 21-version.t 18406 2007-05-03 02:15:18Z jkeenan $
+# 21-version.t
+
+use strict;
+use warnings;
+
+use Test::More tests => 11;
+use Carp;
+use_ok( 'Cwd' );
+use_ok( 'File::Copy' );
+use_ok( 'File::Temp', qw| tempdir | );
+use lib qw( . lib ../lib ../../lib t/configure/testlib );
+use_ok( 'Make_VERSION_File', qw| make_VERSION_file |);
+
+my $cwd = cwd();
+my $errstr;
+{
+ my $tdir = tempdir();
+ ok(chdir $tdir, "Changed to temporary directory for testing");
+ ok((mkdir "lib"), "Able to make directory lib");
+ ok((mkdir "lib/Parrot"), "Able to make directory lib/Parrot");
+ ok(copy ("$cwd/lib/Parrot/BuildUtil.pm", "lib/Parrot/"),
+ "Able to copy Parrot::BuildUtil for testing");
+ unshift(@INC, "lib");
+
+ require Parrot::BuildUtil;
+
+ # Case 3: VERSION file with >4-element version number
+ make_VERSION_file(q{0.4.11.7.5});
+ eval {
+ my $pv = Parrot::BuildUtil::parrot_version();
+ };
+ like($@, qr/Too many components to VERSION file contents/,
+ "Correctly detected too many components in version number");
+
+ ok(chdir $cwd, "Able to change back to directory after testing");
+}
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+21-version.t - test C<Parrot::BuildUtil::parrot_version()>
+
+=head1 SYNOPSIS
+
+ % prove t/configure/21-version.t
+
+=head1 DESCRIPTION
+
+The files in this directory test functionality used by F<Configure.pl>.
+
+The tests in this file test Parrot::BuildUtil (F<lib/Parrot/BuildUtil.pm>).
+
+=head1 AUTHOR
+
+James E Keenan
+
+=head1 SEE ALSO
+
+Parrot::BuildUtil, 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/21-version.t
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Index: t/configure/22-version.t
===================================================================
--- t/configure/22-version.t (revision 0)
+++ t/configure/22-version.t (revision 0)
@@ -0,0 +1,75 @@
+#! perl
+# Copyright (C) 2007, The Perl Foundation.
+# $Id: 22-version.t 18406 2007-05-03 02:15:18Z jkeenan $
+# 22-version.t
+
+use strict;
+use warnings;
+
+use Test::More tests => 11;
+use Carp;
+use_ok( 'Cwd' );
+use_ok( 'File::Copy' );
+use_ok( 'File::Temp', qw| tempdir | );
+use lib qw( . lib ../lib ../../lib t/configure/testlib );
+use_ok( 'Make_VERSION_File', qw| make_VERSION_file |);
+
+my $cwd = cwd();
+my $errstr;
+{
+ my $tdir = tempdir();
+ ok(chdir $tdir, "Changed to temporary directory for testing");
+ ok((mkdir "lib"), "Able to make directory lib");
+ ok((mkdir "lib/Parrot"), "Able to make directory lib/Parrot");
+ ok(copy ("$cwd/lib/Parrot/BuildUtil.pm", "lib/Parrot/"),
+ "Able to copy Parrot::BuildUtil for testing");
+ unshift(@INC, "lib");
+
+ require Parrot::BuildUtil;
+
+ # Case 4: VERSION file with non-numeric component in version number
+ make_VERSION_file(q{0.tomboy.11});
+ eval {
+ my $pv = Parrot::BuildUtil::parrot_version();
+ };
+ like($@, qr/Illegal version component: 'tomboy'/,
+ "Correctly detected non-numeric component in version number");
+
+ ok(chdir $cwd, "Able to change back to directory after testing");
+}
+
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+22-version.t - test C<Parrot::BuildUtil::parrot_version()>
+
+=head1 SYNOPSIS
+
+ % prove t/configure/22-version.t
+
+=head1 DESCRIPTION
+
+The files in this directory test functionality used by F<Configure.pl>.
+
+The tests in this file test Parrot::BuildUtil (F<lib/Parrot/BuildUtil.pm>).
+
+=head1 AUTHOR
+
+James E Keenan
+
+=head1 SEE ALSO
+
+Parrot::BuildUtil, 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/22-version.t
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Index: t/configure/23-version.t
===================================================================
--- t/configure/23-version.t (revision 0)
+++ t/configure/23-version.t (revision 0)
@@ -0,0 +1,81 @@
+#! perl
+# Copyright (C) 2007, The Perl Foundation.
+# $Id: 23-version.t 18406 2007-05-03 02:15:18Z jkeenan $
+# 23-version.t
+
+use strict;
+use warnings;
+
+use Test::More tests => 14;
+use Carp;
+use_ok( 'Cwd' );
+use_ok( 'File::Copy' );
+use_ok( 'File::Temp', qw| tempdir | );
+use lib qw( . lib ../lib ../../lib t/configure/testlib );
+use_ok( 'Make_VERSION_File', qw| make_VERSION_file |);
+
+my $cwd = cwd();
+my $errstr;
+{
+ my $tdir = tempdir();
+ ok(chdir $tdir, "Changed to temporary directory for testing");
+ ok((mkdir "lib"), "Able to make directory lib");
+ ok((mkdir "lib/Parrot"), "Able to make directory lib/Parrot");
+ ok(copy ("$cwd/lib/Parrot/BuildUtil.pm", "lib/Parrot/"),
+ "Able to copy Parrot::BuildUtil for testing");
+ unshift(@INC, "lib");
+
+ require Parrot::BuildUtil;
+
+ # Case 5: Valid version number
+ make_VERSION_file(q{0.4.11});
+ my ($pv, @pv);
+ $pv = Parrot::BuildUtil::parrot_version();
+ @pv = Parrot::BuildUtil::parrot_version();
+ is($pv, q{0.4.11}, "Correct version number returned in scalar context");
+ is_deeply([EMAIL PROTECTED], [ 0, 4, 11 ],
+ "Correct version number returned in scalar context");
+
+ $pv = Parrot::BuildUtil::parrot_version();
+ @pv = Parrot::BuildUtil::parrot_version();
+ is($pv, q{0.4.11}, "Correct version number returned in scalar context");
+ is_deeply([EMAIL PROTECTED], [ 0, 4, 11 ],
+ "Correct version number returned in scalar context");
+ ok(chdir $cwd, "Able to change back to directory after testing");
+}
+
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+23-version.t - test C<Parrot::BuildUtil::parrot_version()>
+
+=head1 SYNOPSIS
+
+ % prove t/configure/23-version.t
+
+=head1 DESCRIPTION
+
+The files in this directory test functionality used by F<Configure.pl>.
+
+The tests in this file test Parrot::BuildUtil (F<lib/Parrot/BuildUtil.pm>).
+
+=head1 AUTHOR
+
+James E Keenan
+
+=head1 SEE ALSO
+
+Parrot::BuildUtil, 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/23-version.t
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Index: t/configure/24-version.t
===================================================================
--- t/configure/24-version.t (revision 0)
+++ t/configure/24-version.t (revision 0)
@@ -0,0 +1,76 @@
+#! perl
+# Copyright (C) 2007, The Perl Foundation.
+# $Id: 24-version.t 18406 2007-05-03 02:15:18Z jkeenan $
+# 24-version.t
+
+use strict;
+use warnings;
+
+use Test::More tests => 12;
+use Carp;
+use_ok( 'Cwd' );
+use_ok( 'File::Copy' );
+use_ok( 'File::Temp', qw| tempdir | );
+use lib qw( . lib ../lib ../../lib t/configure/testlib );
+use_ok( 'Make_VERSION_File', qw| make_VERSION_file |);
+
+my $cwd = cwd();
+my $errstr;
+{
+ my $tdir = tempdir();
+ ok(chdir $tdir, "Changed to temporary directory for testing");
+ ok((mkdir "lib"), "Able to make directory lib");
+ ok((mkdir "lib/Parrot"), "Able to make directory lib/Parrot");
+ ok(copy ("$cwd/lib/Parrot/BuildUtil.pm", "lib/Parrot/"),
+ "Able to copy Parrot::BuildUtil for testing");
+ unshift(@INC, "lib");
+
+ require Parrot::BuildUtil;
+
+ # Case 5: Valid version number
+ make_VERSION_file(q{0.4.11});
+ my ($pv, @pv);
+ @pv = Parrot::BuildUtil::parrot_version();
+ $pv = Parrot::BuildUtil::parrot_version();
+ is_deeply([EMAIL PROTECTED], [ 0, 4, 11 ],
+ "Correct version number returned in scalar context");
+ is($pv, q{0.4.11}, "Correct version number returned in scalar context");
+
+ ok(chdir $cwd, "Able to change back to directory after testing");
+}
+
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+24-version.t - test C<Parrot::BuildUtil::parrot_version()>
+
+=head1 SYNOPSIS
+
+ % prove t/configure/24-version.t
+
+=head1 DESCRIPTION
+
+The files in this directory test functionality used by F<Configure.pl>.
+
+The tests in this file test Parrot::BuildUtil (F<lib/Parrot/BuildUtil.pm>).
+
+=head1 AUTHOR
+
+James E Keenan
+
+=head1 SEE ALSO
+
+Parrot::BuildUtil, 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/24-version.t
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Index: t/configure/19-version.t
===================================================================
--- t/configure/19-version.t (revision 0)
+++ t/configure/19-version.t (revision 0)
@@ -0,0 +1,71 @@
+#! perl
+# Copyright (C) 2007, The Perl Foundation.
+# $Id: 19-version.t 18406 2007-05-03 02:15:18Z jkeenan $
+# 19-version.t
+
+use strict;
+use warnings;
+
+use Test::More tests => 10;
+use Carp;
+use_ok( 'Cwd' );
+use_ok( 'File::Copy' );
+use_ok( 'File::Temp', qw| tempdir | );
+use lib qw( . lib ../lib ../../lib );
+
+my $cwd = cwd();
+my $errstr;
+{
+ my $tdir = tempdir();
+ ok(chdir $tdir, "Changed to temporary directory for testing");
+ ok((mkdir "lib"), "Able to make directory lib");
+ ok((mkdir "lib/Parrot"), "Able to make directory lib/Parrot");
+ ok(copy ("$cwd/lib/Parrot/BuildUtil.pm", "lib/Parrot/"),
+ "Able to copy Parrot::BuildUtil for testing");
+ unshift(@INC, "lib");
+
+ require Parrot::BuildUtil;
+
+ # Case 1: No VERSION file
+ eval { my $pv = Parrot::BuildUtil::parrot_version(); };
+ like($@, qr/Could not open VERSION file!/,
+ "Absence of VERSION file correctly detected");
+
+ ok(chdir $cwd, "Able to change back to directory after testing");
+}
+
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+19-version.t - test C<Parrot::BuildUtil::parrot_version()>
+
+=head1 SYNOPSIS
+
+ % prove t/configure/19-version.t
+
+=head1 DESCRIPTION
+
+The files in this directory test functionality used by F<Configure.pl>.
+
+The tests in this file test Parrot::BuildUtil (F<lib/Parrot/BuildUtil.pm>).
+
+=head1 AUTHOR
+
+James E Keenan
+
+=head1 SEE ALSO
+
+Parrot::BuildUtil, 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/19-version.t
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native