#!perl -w use strict; use Test::More; use Fatal qw(open close chdir); use File::Spec; my $new_version; BEGIN{ # Fake Term::ReadLine, which is hard coded in ShipIt::Util package Term::ReadLine; sub new{ bless {}, shift } sub readline{ $new_version }; $INC{'Term/ReadLine.pm'} = __FILE__; } use ShipIt; use ShipIt::VC; use ShipIt::Step::ChangeAllVersions; chdir 't/test'; { package ShipIt::VC::Dummy; sub new { bless {} } # intentinaly one-arg bless sub exists_tagged_version{ 0 } no warnings 'redefine'; *ShipIt::VC::new = \&ShipIt::VC::Dummy::new; } close STDOUT; sub f{ File::Spec->catfile(split /\//, $_[0]); } for( {new_version => '0.001_01', current_version => '0.001' }, {new_version => '0.001', current_version => '0.001_01' }, ) { my $stdout = ''; open STDOUT, '>', \$stdout; $new_version = $_->{new_version}; my $conf = ShipIt::Conf->parse('.shipit'); my $state = ShipIt::State->new($conf); foreach my $step( $conf->steps ){ ok $step->run($state), $step; if($step->isa('ShipIt::Step::ChangeAllVersions')){ ok $step->changed_version_variable->{f 'lib/Foo.pm'}, 'VERSION variable in Foo.pm changed'; ok $step->changed_version_variable->{'Bar.pm'}, 'VERSION variable in Bar.pm changed'; ok $step->changed_version_variable->{f 'script/qux'}, 'VERSION variable in script/qux changed'; ok $step->changed_version_section->{f 'lib/Foo.pm'}, 'VERSION section in Foo.pm changed'; ok $step->changed_version_section->{'Bar.pm'}, 'VERSION section in Bar.pm changed'; ok $step->changed_version_section->{'Baz.pod'}, 'VERSION section in Baz.pod changed'; } } like $stdout, qr/^Update \s+ \$VERSION/xms; like $stdout, qr/^Update \s+ the \s+ VERSION \s+ section/xms; require './lib/Foo.pm'; require './script/qux'; require './Bar.pm'; if($new_version eq '0.001_01'){ # on the first step no warnings 'once'; is $Foo::VERSION, $new_version, '$Foo::VERSION has been updated'; is $Bar::VERSION, $new_version, '$Bar::VERSION has been updated'; is $App::qux::VERSION, $new_version, '$App::qux::VERSION has been updated'; isnt $Bar::version, $new_version, '$version is not touched'; isnt $Bar::Version, $new_version, '$Version is not touched'; } } done_testing;