]> git.vpit.fr Git - perl/modules/VPIT-TestHelpers.git/blob - t/30-run_perl.t
Test run_perl() preserving ENV vars
[perl/modules/VPIT-TestHelpers.git] / t / 30-run_perl.t
1 #!perl
2
3 use strict;
4 use warnings;
5
6 use VPIT::TestHelpers;
7
8 use Test::More tests => 4;
9
10 use Config;
11 use File::Temp;
12
13 my $filename = '/tmp/run_perl_test';
14
15 my $code = "open my \$fh, q[>], q[$filename] or die \$!; for my \$key (sort keys %ENV) { print \$fh qq[\$key:\$ENV{\$key}\n] } close \$fh";
16
17 my $ld_path = $Config::Config{ldlibpthname};
18
19 my %expected_vars = (
20  'MSWin32' => [ qw<SystemRoot> ],
21  'android' => [ $ld_path       ],
22  'cygwin'  => [ qw<PATH>       ],
23  'linux'   => [                ],
24 );
25
26 my @all_vars = do {
27  my %uniq;
28  grep !$uniq{$_}++, map @$_, values %expected_vars;
29 };
30 push @all_vars, 'DUMMY';
31
32 my @ignored_vars = qw<
33  VERSIONER_PERL_PREFER_32_BIT
34  VERSIONER_PERL_VERSION
35  __CF_USER_TEXT_ENCODING
36 >;
37
38 for my $os (qw<MSWin32 android cygwin linux>) {
39  1 while unlink $filename;
40
41  local $^O  = $os;
42  local %ENV;
43
44  @ENV{@all_vars} = @all_vars;
45
46  run_perl $code;
47
48  my %subprocess_env;
49
50  open my $fh, '<', $filename;
51  if ($fh) {
52   my @lines = <$fh>;
53   close $fh;
54   chomp for @lines;
55   %subprocess_env = map { split /:/, $_, 2 } @lines;
56  }
57
58  delete @subprocess_env{@ignored_vars};
59
60  my $got = join "\n", sort keys %subprocess_env;
61  my $exp = join "\n", sort @{ $expected_vars{$os} || [] };
62
63  is $got, $exp, "run_perl preserving $os ENV vars";
64 }