Config-Crontab
view release on metacpan or search on metacpan
t/04_block.t view on Meta::CPAN
MAILTO=joe
5 0 * * * /bin/foo
_LINES_
undef $block;
## test select
@lines = ( $comment1, $env1, $event1, );
$block = new Config::Crontab::Block( -lines => \@lines );
my @select = $block->select( -type => 'comment' );
is( scalar @select, 1 );
$block->first( new Config::Crontab::Comment( -data => '## why?' ) );
@select = $block->select( -type => 'comment' );
is( scalar @select, 2 );
my($obj) = $block->select( -type => 'comment');
is( $obj->dump, '## why?' );
($obj) = $block->select( -type => 'event');
is( $obj->dump, '5 0 * * * /bin/foo' );
($obj) = $block->select;
is( $obj->dump, '## why?' );
undef $block;
## select some datetime attributes
$block = new Config::Crontab::Block( -lines => \@lines );
$block->last( new Config::Crontab::Event( -data => '10 10 * * Mon /bin/monday' ) );
is( $block->select( -datetime_re => '0 \* \*'), 2 );
is( $block->select( -datetime_re => ' 0 \* \*'), 1 );
is( $block->select( -datetime => '5 0 * * *'), 1, "datetime selector" );
undef $block;
## some select tests w/o the '-type' attribute
$block = new Config::Crontab::Block( -lines => \@lines );
$block->first( new Config::Crontab::Comment( -data => '## foo' ) );
is( $block->select( -data_re => 'foo' ), 2 );
is( $block->select( -data => 'foo' ), 0 ); ## no matching exact strings
undef $block;
## some empty criteria tests
$block = new Config::Crontab::Block;
$block->last( new Config::Crontab::Comment( -data => '## next is empty' ) );
$block->last( new Config::Crontab::Comment );
$block->last( new Config::Crontab::Comment( -data => '## next is empty' ) );
$block->last( new Config::Crontab::Comment );
$block->last( new Config::Crontab::Comment( -data => '## next is empty' ) );
$block->last( new Config::Crontab::Comment );
$block->last( new Config::Crontab::Comment( -data => '## next is not empty' ) );
$block->last( new Config::Crontab::Env( -data => 'FOO=next' ) );
is( $block->select( -bogus => '' ), 8 );
is( $block->select( -data_re => 'next' ), 5 );
is( $block->select( -data => '' ), 3 );
undef $block;
## create a crontab block
@lines = ( $comment1, $env1, $event1, );
$block = new Config::Crontab::Block( -lines => \@lines );
$block->last( new Config::Crontab::Event( -data => '5 1 * * * /sbin/backup' ) );
$block->last( new Config::Crontab::Event( -data => '10 4 * * 3 /bin/wednesday' ) );
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
5 1 * * * /sbin/backup
10 4 * * 3 /bin/wednesday
_DUMPED_
## delete the backup event
for my $event ( $block->select( -type => 'event') ) {
next unless $event->command =~ /\bbackup\b/; ## look for backup command
$block->remove($event); last;
}
is( $block->dump, <<_DUMPED_, "backup removed" );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
10 4 * * 3 /bin/wednesday
_DUMPED_
## compare string match vs regex
is( $block->select( -type => 'event', -command => 'foo' ), 0 );
is( $block->select( -type => 'event', -command_re => 'foo' ), 1 );
undef $block;
## set up block for up, down, first, last tests
@lines = ( $comment1, $env1, $event1, );
$block = new Config::Crontab::Block( -lines => \@lines );
$event2 = new Config::Crontab::Event( -data => '5 1 * * * /sbin/backup' );
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_
## add new event to bottom
$block->down($event2); ## add at bottom
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
5 1 * * * /sbin/backup
_DUMPED_
## add new event to top
$block->remove($event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_
## add new event to top
$block->first($event2);
is( $block->dump, <<_DUMPED_ );
5 1 * * * /sbin/backup
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_
## try last
$block->last($event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
5 1 * * * /sbin/backup
_DUMPED_
## move back to top
$block->first($event2);
is( $block->dump, <<_DUMPED_ );
5 1 * * * /sbin/backup
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_
## try up (duplicate bug)
$block->up($event2);
is( $block->dump, <<_DUMPED_ );
5 1 * * * /sbin/backup
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_
## try down
$block->down($event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
5 1 * * * /sbin/backup
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_
## last, then down again
$block->last($event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
5 1 * * * /sbin/backup
_DUMPED_
## (duplicate bug)
$block->down($event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
5 1 * * * /sbin/backup
_DUMPED_
## try up
$block->up($event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 1 * * * /sbin/backup
5 0 * * * /bin/foo
_DUMPED_
undef $block;
## setup tests for before, after
@lines = ( $comment1, $env1, $event1, );
$block = new Config::Crontab::Block( -lines => \@lines );
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_
$event2 = new Config::Crontab::Event( -data => '5 1 * * * /sbin/backup' );
$block->before($comment1, $event2);
is( $block->dump, <<_DUMPED_ );
5 1 * * * /sbin/backup
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_
$block->after($comment1, $event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
5 1 * * * /sbin/backup
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_
## see about non-existent references
my $event3 = new Config::Crontab::Event( -minute => 33, -command => '/sbin/uptime' );
$block->before(undef, $event3);
is( $block->dump, <<_DUMPED_ );
33 * * * * /sbin/uptime
## just a comment
5 1 * * * /sbin/backup
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_
## test active
is( $block->active(0), 0 );
is( $block->dump, <<_DUMPED_, "inactive block" );
#33 * * * * /sbin/uptime
## just a comment
#5 1 * * * /sbin/backup
#MAILTO=joe
#5 0 * * * /bin/foo
_DUMPED_
ok( $block->active(1) );
is( $event3->active(0), 0 );
is( $block->dump, <<_DUMPED_ );
#33 * * * * /sbin/uptime
## just a comment
5 1 * * * /sbin/backup
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_
ok( ! $block->active(undef) );
ok( $event3->active(1) );
is( $block->dump, <<_DUMPED_ );
33 * * * * /sbin/uptime
## just a comment
#5 1 * * * /sbin/backup
#MAILTO=joe
#5 0 * * * /bin/foo
_DUMPED_
## a system block
undef $block;
$block = new Config::Crontab::Block;
$block->system(1);
$block->data(<<_DATA_);
## this is foo
#6 * 0 0 Sat rogerdodger /bin/saturday
_DATA_
is( ($block->select(-type => 'event'))[0]->user, 'rogerdodger' );
undef $block;
$block = new Config::Crontab::Block( -system => 1,
-data => <<_DATA_);
## this is foo
#6 * 0 0 Sat wonka /bin/saturday
_DATA_
is( ($block->select(-type => 'event'))[0]->user, 'wonka' );
##
## remove many items using 'flag'
##
undef $block;
$block = new Config::Crontab::Block;
$block->system(1);
$block->data( <<'_DATA_');
1 5 * * * bin echo 1
2 5 * * * bin echo 2
3 5 * * * bin echo 3
4 5 * * * bin echo 4
5 5 * * * bin echo 5
6 5 * * * bin echo 6
7 5 * * * bin echo 7
8 5 * * * bin echo 8
9 5 * * * bin echo 9
10 5 * * * bin echo 10
11 5 * * * bin echo 11
12 5 * * * bin echo 12
13 5 * * * bin echo 13
14 5 * * * bin echo 14
15 5 * * * bin echo 15
16 5 * * * bin echo 16
17 5 * * * bin echo 17
_DATA_
## flag evens
my $count = 0;
for my $event ( $block->select( -type => 'event' ) ) {
$event->flag('delete')
if $count % 2 == 0;
$count++;
}
## delete them
$block->remove( $block->select( -flag => 'delete' ) );
is( $block->dump, <<_BLOCK_ );
( run in 1.510 second using v1.01-cache-2.11-cpan-2398b32b56e )