/home/.cpanm/work/1759492321.34808/Alien-Build-2.84/t
use 5.008004; use Test2::V0 -no_srand => 1; use Test::Alien::Build; use Capture::Tiny qw( capture_merged ); { my %commands; my @command_list; BEGIN { *CORE::GLOBAL::system = sub { push @command_list, [@_]; if($commands{$_[0]}) { $commands{$_[0]}->(@_); } $? = $_[0] eq 'bogus' ? -1 : 0; }; } sub system_last { \@command_list; } sub system_clear { @command_list = (); } sub system_hook { my($name, $code) = @_; $commands{$name} = $code; } } use Alien::Build::CommandSequence; subtest 'basic' => sub { my $seq = Alien::Build::CommandSequence->new; isa_ok $seq, 'Alien::Build::CommandSequence'; }; subtest 'apply requirements' => sub { my $build = alienfile filename => 'corpus/blank/alienfile'; my $meta = $build->meta; my $intr = $meta->interpolator; $intr->add_helper(foo => undef, Foo => '1.00'); $intr->add_helper(bar => undef, Bar => '2.00'); $intr->add_helper(baz => undef, Baz => '3.00'); my $seq = Alien::Build::CommandSequence->new( '%{foo}', [ '%{bar}' ], [ '%{baz}', '--version', sub {} ], sub {}, ); $seq->apply_requirements($meta, 'share'); is( $build->requires('share'), hash { field Foo => '1.00'; field Bar => '2.00'; field Baz => '3.00'; }, ); }; subtest 'execute' => sub { my $build = alienfile filename => 'corpus/blank/alienfile'; my $meta = $build->meta; my $intr = $meta->interpolator; $intr->add_helper(foo => sub { 'myfoo' }); system_clear; note capture_merged { Alien::Build::CommandSequence->new( '%{foo}', [ 'stuff', '%{foo}' ], )->execute($build); }; is( system_last, [ ['myfoo'], ['stuff','myfoo'] ], 'plain', ); system_clear; my $error; note capture_merged { eval { Alien::Build::CommandSequence->new( 'bogus', [ 'stuff', '%{foo}' ], )->execute($build); }; $error = $@; }; like $error, qr/command failed/; system_clear; system_hook stuff => sub { print "stuff output"; print STDERR "stuff error"; }; my @cap; note capture_merged { Alien::Build::CommandSequence->new( [ 'stuff', '%{foo}', sub { @cap = @_ } ], )->execute($build); }; is( \@cap, array { item object { prop blessed => ref $build; call sub { shift->isa('Alien::Build') } => T(); }; item hash { field command => ['stuff','myfoo']; field err => match qr/stuff error/; field out => match qr/stuff output/; field exit => 0; }; }, ); system_hook bogus => sub { print "bogus output"; print STDERR "bogus error"; }; @cap = (); note capture_merged { Alien::Build::CommandSequence->new( [ 'bogus', '%{foo}', sub { @cap = @_ } ], )->execute($build); }; is( \@cap, array { item object { prop blessed => ref $build; call sub { shift->isa('Alien::Build') } => T(); }; item hash { field command => ['bogus','myfoo']; field err => match qr/bogus error/; field out => match qr/bogus output/; field exit => -1; }; }, ); system_hook stuff2 => sub { print "single line\n"; print STDERR "stuff error\n"; print STDERR "stuff error\n"; }; system_clear; note capture_merged { Alien::Build::CommandSequence->new( [ 'stuff2', '%{foo}', \'%{alien.runtime.foo}' ], )->execute($build); }; is($build->runtime_prop->{foo}, 'single line'); system_clear; system_hook 'stuff2 myfoo' => sub { print "single line2\n"; print STDERR "stuff error\n"; print STDERR "stuff error\n"; }; note capture_merged { Alien::Build::CommandSequence->new( [ 'stuff2 %{foo}', \'%{alien.runtime.foo2}' ], )->execute($build); }; is($build->runtime_prop->{foo2}, 'single line2'); is system_last, [['stuff2 myfoo']]; system_clear; system_hook 'stuff2 myfoo' => sub { print "single line2\n"; print STDERR "stuff error\n"; print STDERR "stuff error\n"; }; note capture_merged { Alien::Build::CommandSequence->new( [ 'stuff2 %{foo}', \'%{.runtime.foo2}' ], )->execute($build); }; is($build->runtime_prop->{foo2}, 'single line2'); is system_last, [['stuff2 myfoo']]; }; done_testing;
.
Edit
..
Edit
00_diag.t
Edit
01_use.t
Edit
alien_base.t
Edit
alien_base__system_installed.t
Edit
alien_base_pkgconfig.t
Edit
alien_base_wrapper.t
Edit
alien_build.t
Edit
alien_build__download_rule.t
Edit
alien_build_commandsequence.t
Edit
alien_build_commandsequence__cd.t
Edit
alien_build_interpolate.t
Edit
alien_build_interpolate_default.t
Edit
alien_build_log.t
Edit
alien_build_log_abbreviate.t
Edit
alien_build_log_default.t
Edit
alien_build_meta.t
Edit
alien_build_mm.t
Edit
alien_build_plugin.t
Edit
alien_build_plugin_build_autoconf.t
Edit
alien_build_plugin_build_cmake.t
Edit
alien_build_plugin_build_copy.t
Edit
alien_build_plugin_build_make.t
Edit
alien_build_plugin_build_msys.t
Edit
alien_build_plugin_build_searchdep.t
Edit
alien_build_plugin_core_cleaninstall.t
Edit
alien_build_plugin_core_download.t
Edit
alien_build_plugin_core_ffi.t
Edit
alien_build_plugin_core_gather.t
Edit
alien_build_plugin_core_legacy.t
Edit
alien_build_plugin_core_override.t
Edit
alien_build_plugin_core_setup.t
Edit
alien_build_plugin_core_tail.t
Edit
alien_build_plugin_decode_dirlisting.t
Edit
alien_build_plugin_decode_dirlistingftpcopy.t
Edit
alien_build_plugin_decode_html.t
Edit
alien_build_plugin_decode_mojo.t
Edit
alien_build_plugin_digest_negotiate.t
Edit
alien_build_plugin_digest_sha.t
Edit
alien_build_plugin_digest_shapp.t
Edit
alien_build_plugin_download_negotiate.t
Edit
alien_build_plugin_extract_archivetar.t
Edit
alien_build_plugin_extract_archivezip.t
Edit
alien_build_plugin_extract_commandline.t
Edit
alien_build_plugin_extract_commandline__tar_can.t
Edit
alien_build_plugin_extract_directory.t
Edit
alien_build_plugin_extract_file.t
Edit
alien_build_plugin_extract_negotiate.t
Edit
alien_build_plugin_fetch_curlcommand.t
Edit
alien_build_plugin_fetch_httptiny.t
Edit
alien_build_plugin_fetch_local.t
Edit
alien_build_plugin_fetch_localdir.t
Edit
alien_build_plugin_fetch_lwp.t
Edit
alien_build_plugin_fetch_netftp.t
Edit
alien_build_plugin_fetch_wget.t
Edit
alien_build_plugin_gather_isolatedynamic.t
Edit
alien_build_plugin_meta.t
Edit
alien_build_plugin_pkgconfig_commandline.t
Edit
alien_build_plugin_pkgconfig_libpkgconf.t
Edit
alien_build_plugin_pkgconfig_makestatic.t
Edit
alien_build_plugin_pkgconfig_negotiate.t
Edit
alien_build_plugin_pkgconfig_negotiate__pick.t
Edit
alien_build_plugin_pkgconfig_pp.t
Edit
alien_build_plugin_prefer_badversion.t
Edit
alien_build_plugin_prefer_goodversion.t
Edit
alien_build_plugin_prefer_sortversions.t
Edit
alien_build_plugin_probe_cbuilder.t
Edit
alien_build_plugin_probe_cbuilder__live.t
Edit
alien_build_plugin_probe_commandline.t
Edit
alien_build_plugin_probe_vcpkg.t
Edit
alien_build_plugin_test_mock.t
Edit
alien_build_rc.t
Edit
alien_build_rc__prepostload.t
Edit
alien_build_rc__prepostload_plugin.t
Edit
alien_build_temp.t
Edit
alien_build_tempdir.t
Edit
alien_build_util.t
Edit
alien_build_version_basic.t
Edit
alien_role.t
Edit
alien_util.t
Edit
alienfile.t
Edit
bin
Edit
lib
Edit
test_alien.t
Edit
test_alien_build.t
Edit
test_alien_cancompile.t
Edit
test_alien_canplatypus.t
Edit
test_alien_diag.t
Edit
test_alien_run.t
Edit
test_alien_synthetic.t
Edit