]> git.vpit.fr Git - perl/modules/VPIT-TestHelpers.git/blob - t/30-run_perl.t
cd040e133c8938e70fce9f21bbcbc77ea01f0ab5
[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 => 5;
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' => [                ],
22  'cygwin'  => [ qw<PATH>       ],
23  'darwin'  => [                ],
24  'linux'   => [                ],
25 );
26 push @$_, $ld_path for values %expected_vars;
27
28 my @all_vars = do {
29  my %uniq;
30  grep !$uniq{$_}++, map @$_, values %expected_vars;
31 };
32 push @all_vars, 'DUMMY';
33
34 my @ignored_vars = qw<
35  VERSIONER_PERL_PREFER_32_BIT
36  VERSIONER_PERL_VERSION
37  __CF_USER_TEXT_ENCODING
38 >;
39
40 for my $os (qw<MSWin32 android darwin cygwin linux>) {
41  1 while unlink $filename;
42
43  local $^O  = $os;
44  local %ENV;
45
46  @ENV{@all_vars} = @all_vars;
47
48  run_perl $code;
49
50  my %subprocess_env;
51
52  open my $fh, '<', $filename;
53  if ($fh) {
54   my @lines = <$fh>;
55   close $fh;
56   chomp for @lines;
57   %subprocess_env = map { split /:/, $_, 2 } @lines;
58  }
59
60  delete @subprocess_env{@ignored_vars};
61
62  my $got = join "\n", sort keys %subprocess_env;
63  my $exp = join "\n", sort @{ $expected_vars{$os} || [] };
64
65  is $got, $exp, "run_perl preserving $os ENV vars";
66 }