diff --git a/lib/Test2/Harness/Runner/Job.pm b/lib/Test2/Harness/Runner/Job.pm index 866db0846..b47884e76 100644 --- a/lib/Test2/Harness/Runner/Job.pm +++ b/lib/Test2/Harness/Runner/Job.pm @@ -511,7 +511,7 @@ sub env_vars { my $from_task = $self->{+TASK}->{env_vars}; my @p5l = ($from_task->{PERL5LIB}, $from_run->{PERL5LIB}); - push @p5l => $self->includes if $self->{+TASK}->{binary} || $self->{+TASK}->{non_perl}; + push @p5l => $self->includes; push @p5l => $ENV{PERL5LIB} if $ENV{PERL5LIB}; my $p5l = join $Config{path_sep} => grep { defined $_ && $_ ne '.' } @p5l; diff --git a/t/integration/includes.t b/t/integration/includes.t index a0f355ff0..6eabc4b03 100644 --- a/t/integration/includes.t +++ b/t/integration/includes.t @@ -52,4 +52,10 @@ yath( exit => 0, ) if can_run('bash'); +yath( + command => 'test', + args => ['child-inherits-inc.tx'], + exit => 0, +); + done_testing; diff --git a/t/integration/includes/child-inherits-inc.tx b/t/integration/includes/child-inherits-inc.tx new file mode 100644 index 000000000..98c94c9a7 --- /dev/null +++ b/t/integration/includes/child-inherits-inc.tx @@ -0,0 +1,27 @@ +use Test2::V0; + +use File::Spec; +use Config qw/%Config/; + +# This test verifies that child processes spawned via system() inherit +# the include paths set by yath (fixes GitHub #296). +# When yath runs a test with --lib, the test process gets -I flags on +# the command line. But system($^X, ...) children don't inherit CLI flags; +# they need PERL5LIB to find project modules. + +my @parts = File::Spec->splitpath(File::Spec->rel2abs(__FILE__)); +pop @parts; +my $path = File::Spec->catpath(@parts); + +my $lib_dir = File::Spec->catdir($path, 'lib'); + +# Spawn a child perl process and capture its @INC +my $child_inc = `$^X -e "print join qq{\\n}, \@INC"`; +my @child_inc = split /\n/, $child_inc; + +ok( + (grep { $_ eq $lib_dir } @child_inc), + "Child process via backticks inherits project lib dir ($lib_dir) via PERL5LIB" +) or diag "Child \@INC was: @child_inc"; + +done_testing; diff --git a/t/integration/includes/default-i.tx b/t/integration/includes/default-i.tx index f5c90d447..d77d38f01 100644 --- a/t/integration/includes/default-i.tx +++ b/t/integration/includes/default-i.tx @@ -1,6 +1,7 @@ use Test2::V0; use File::Spec; +use Config qw/%Config/; my @parts = File::Spec->splitpath(File::Spec->rel2abs(__FILE__)); pop @parts; @@ -20,6 +21,16 @@ like( "Added lib, blib/lib, and blib/arch AFTER the -Ixyz" ); -is($ENV{PERL5LIB}, $ENV{OLD_PERL5LIB}, "PERL5LIB has not been modified"); +like( + [split $Config{path_sep}, $ENV{PERL5LIB}], + [ + App::Yath->app_path, + File::Spec->catdir($path, 'xyz'), + File::Spec->catdir($path, 'lib'), + File::Spec->catdir($path, 'blib', 'lib'), + File::Spec->catdir($path, 'blib', 'arch'), + ], + "PERL5LIB includes all lib paths so child processes inherit them" +); done_testing; diff --git a/t/integration/includes/default.tx b/t/integration/includes/default.tx index 163114a8a..7788f6dff 100644 --- a/t/integration/includes/default.tx +++ b/t/integration/includes/default.tx @@ -3,6 +3,7 @@ use Test2::V0; require App::Yath; use File::Spec; +use Config qw/%Config/; my @parts = File::Spec->splitpath(File::Spec->rel2abs(__FILE__)); pop @parts; @@ -19,6 +20,15 @@ like( "Added lib, blib/lib, and blib/arch to the front of the line" ); -is($ENV{PERL5LIB}, $ENV{OLD_PERL5LIB}, "PERL5LIB has not been modified"); +like( + [split $Config{path_sep}, $ENV{PERL5LIB}], + [ + App::Yath->app_path, + File::Spec->catdir($path, 'lib'), + File::Spec->catdir($path, 'blib', 'lib'), + File::Spec->catdir($path, 'blib', 'arch'), + ], + "PERL5LIB includes lib paths so child processes inherit them" +); done_testing; diff --git a/t/integration/includes/dot-last.tx b/t/integration/includes/dot-last.tx index b048c5763..b924b8f58 100644 --- a/t/integration/includes/dot-last.tx +++ b/t/integration/includes/dot-last.tx @@ -22,6 +22,6 @@ like( is($INC[-1], '.', "Dot added last"); -is($ENV{PERL5LIB}, $ENV{OLD_PERL5LIB}, "PERL5LIB has not been modified"); +isnt($ENV{PERL5LIB}, $ENV{OLD_PERL5LIB}, "PERL5LIB includes project lib paths for child process inheritance"); done_testing; diff --git a/t/integration/includes/order-ibili.tx b/t/integration/includes/order-ibili.tx index 466101688..f40e90477 100644 --- a/t/integration/includes/order-ibili.tx +++ b/t/integration/includes/order-ibili.tx @@ -27,6 +27,6 @@ like( "Added all via cli, in order" ); -is($ENV{PERL5LIB}, $ENV{OLD_PERL5LIB}, "PERL5LIB has not been modified"); +isnt($ENV{PERL5LIB}, $ENV{OLD_PERL5LIB}, "PERL5LIB includes project lib paths for child process inheritance"); done_testing; diff --git a/t/integration/includes/order-ilibi.tx b/t/integration/includes/order-ilibi.tx index 6abd157f9..1be9c0fe5 100644 --- a/t/integration/includes/order-ilibi.tx +++ b/t/integration/includes/order-ilibi.tx @@ -27,6 +27,6 @@ like( "Added all via cli, in order" ); -is($ENV{PERL5LIB}, $ENV{OLD_PERL5LIB}, "PERL5LIB has not been modified"); +isnt($ENV{PERL5LIB}, $ENV{OLD_PERL5LIB}, "PERL5LIB includes project lib paths for child process inheritance"); done_testing;