Build-Simple
view release on metacpan or search on metacpan
t/10-basics.t view on Meta::CPAN
#! perl
use strict;
use warnings FATAL => 'all';
use Test::More;
use Test::Differences;
use Test::Fatal;
use Carp qw/croak/;
use File::Spec::Functions qw/catfile/;
use File::Basename qw/dirname/;
use File::Path qw/mkpath rmtree/;
use Build::Simple;
my $spew = sub { my %info = @_; next_is($info{name}); spew($info{name}, $info{name}) };
my $poke = sub { next_is('poke') };
my $noop = sub { my %args = @_; next_is($args{name}) };
my $dirname = '_testing';
END { rmtree $dirname }
$SIG{INT} = sub { rmtree $dirname; die "Interrupted!\n"};
my $graph = Build::Simple->new;
my $source1_filename = catfile($dirname, 'source1');
$graph->add_file($source1_filename, action => sub { $poke->(); $spew->(@_)});
my $source2_filename = catfile($dirname, 'source2');
$graph->add_file($source2_filename, action => $spew, dependencies => [ $source1_filename ]);
$graph->add_phony('build', action => $noop, dependencies => [ $source1_filename, $source2_filename ]);
$graph->add_phony('test', action => $noop, dependencies => [ 'build' ]);
$graph->add_phony('install', action => $noop, dependencies => [ 'build' ]);
$graph->add_phony('loop1', dependencies => ['loop2']);
$graph->add_phony('loop2', dependencies => ['loop1']);
my @sorted = $graph->_sort_nodes('build');
eq_or_diff \@sorted, [ $source1_filename, $source2_filename, 'build' ], 'topological sort is ok';
my @runs = qw/build test install/;
my %expected = (
build => [
[qw{poke _testing/source1 _testing/source2 build}],
[qw/build/],
sub { rmtree $dirname },
[qw{poke _testing/source1 _testing/source2 build}],
[qw/build/],
sub { unlink $source2_filename or die "Couldn't remove $source2_filename: $!" },
[qw{_testing/source2 build}],
[qw/build/],
sub { unlink $source1_filename; sleep 1 },
[qw{poke _testing/source1 _testing/source2 build}],
[qw/build/],
],
test => [
[qw{poke _testing/source1 _testing/source2 build test}],
[qw/build test/],
],
install => [
[qw{poke _testing/source1 _testing/source2 build install}],
( run in 1.714 second using v1.01-cache-2.11-cpan-39bf76dae61 )