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");