Author: jkeenan
Date: Sun Nov  4 08:09:27 2007
New Revision: 22702

Modified:
   trunk/config/auto/revision.pm
   trunk/t/configure/152-auto_revision.t

Log:
Modify config/auto/revision.pm to handle edge cases.  Add tests to
t/configure/152-auto_revision.t to test all cases.


Modified: trunk/config/auto/revision.pm
==============================================================================
--- trunk/config/auto/revision.pm       (original)
+++ trunk/config/auto/revision.pm       Sun Nov  4 08:09:27 2007
@@ -35,9 +35,13 @@
 
     my $revision = $Parrot::Revision::current;
 
-    $conf->data->set( revision => $revision, );
+    if ( defined($revision) and $revision !~ /^\d+$/ ) {
+        die "Cannot use non-numeric revision number: $!";
+    }
+
+    $conf->data->set( revision => $revision );
 
-    if ( $revision >= 1 ) {
+    if ( defined $revision and $revision >= 1 ) {
         $self->set_result("r$revision");
     }
     else {

Modified: trunk/t/configure/152-auto_revision.t
==============================================================================
--- trunk/t/configure/152-auto_revision.t       (original)
+++ trunk/t/configure/152-auto_revision.t       Sun Nov  4 08:09:27 2007
@@ -5,10 +5,79 @@
 
 use strict;
 use warnings;
-use Test::More tests =>  2;
+use Test::More tests => 20;
 use Carp;
-use lib qw( lib );
+use lib qw( lib t/configure/testlib );
+use_ok('config::init::defaults');
 use_ok('config::auto::revision');
+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::revision};
+
+$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 ($testrev, $ret);
+{
+    $testrev = 99999;
+    local $Parrot::Revision::current = $testrev;
+    $ret = $step->runstep($conf);
+    ok( $ret, "$step_name runstep() returned true value" );
+    is($conf->data->get('revision'), $testrev,
+        "'revision' element was set correctly");
+    is($step->result(), qq{r$testrev}, "Expected result was set");
+}
+
+{
+    $testrev = 0;
+    local $Parrot::Revision::current = $testrev;
+    $ret = $step->runstep($conf);
+    ok( $ret, "$step_name runstep() returned true value" );
+    is($conf->data->get('revision'), $testrev,
+        "'revision' element was set correctly");
+    is($step->result(), q{done}, "Expected result was set");
+}
+
+{
+    $testrev = q{foobar};
+    local $Parrot::Revision::current = $testrev;
+    eval { $ret = $step->runstep($conf); };
+    like($@, qr/Cannot use non-numeric revision number/,
+        "Got expected error message");
+}
+
+{
+    $testrev = undef;
+    local $Parrot::Revision::current = $testrev;
+    $ret = $step->runstep($conf);
+    ok( $ret, "$step_name runstep() returned true value" );
+    ok(! defined($conf->data->get('revision')), 
+        "'revision' element is undefined as expected");
+    is($step->result(), q{done}, "Expected result was set");
+}
 
 pass("Completed all tests in $0");
 

Reply via email to