fix capture/tee_stderr problem with string handles and ties
David Golden
12 years ago
308 | 308 | $localize{stdout}++, local(*STDOUT) |
309 | 309 | if $do_stdout && grep { $_ eq 'scalar' } @{$layers{stdout}}; |
310 | 310 | $localize{stderr}++, local(*STDERR) |
311 | if $do_stderr && grep { $_ eq 'scalar' } @{$layers{stderr}}; | |
311 | if ($do_stderr || $do_merge) && grep { $_ eq 'scalar' } @{$layers{stderr}}; | |
312 | 312 | $localize{stdout}++, local(*STDOUT), _open( \*STDOUT, ">&=1") |
313 | 313 | if $do_stdout && tied *STDOUT && $] >= 5.008; |
314 | 314 | $localize{stderr}++, local(*STDERR), _open( \*STDERR, ">&=2") |
315 | if $do_stderr && tied *STDERR && $] >= 5.008; | |
315 | if ($do_stderr || $do_merge) && tied *STDERR && $] >= 5.008; | |
316 | 316 | _debug( "# localized $_\n" ) for keys %localize; |
317 | 317 | # proxy any closed/localized handles so we don't use fds 0, 1 or 2 |
318 | 318 | my %proxy_std = _proxy_std(); |
10 | 10 | |
11 | 11 | my @api = qw( |
12 | 12 | capture |
13 | capture_stdout | |
14 | capture_stderr | |
13 | 15 | capture_merged |
14 | 16 | tee |
17 | tee_stdout | |
18 | tee_stderr | |
15 | 19 | tee_merged |
16 | 20 | ); |
17 | 21 |
19 | 19 | |
20 | 20 | run_test('capture'); |
21 | 21 | run_test('capture_scalar'); |
22 | run_test('capture_merged'); | |
23 | 22 | run_test('capture_stdout'); |
24 | 23 | run_test('capture_stderr'); |
24 | run_test('capture_merged'); | |
25 | 25 | |
26 | 26 | is( next_fd, $fd, "no file descriptors leaked" ); |
27 | 27 |
26 | 26 | |
27 | 27 | run_test('tee'); |
28 | 28 | run_test('tee_scalar'); |
29 | run_test('tee_merged'); | |
30 | 29 | run_test('tee_stdout'); |
31 | 30 | run_test('tee_stderr'); |
31 | run_test('tee_merged'); | |
32 | 32 | |
33 | 33 | is( next_fd, $fd, "no file descriptors leaked" ); |
34 | 34 |
26 | 26 | run_test($_) for qw( |
27 | 27 | capture |
28 | 28 | capture_scalar |
29 | capture_stdout | |
30 | capture_stderr | |
29 | 31 | capture_merged |
30 | 32 | ); |
31 | 33 | |
33 | 35 | run_test($_) for qw( |
34 | 36 | tee |
35 | 37 | tee_scalar |
38 | tee_stdout | |
39 | tee_stderr | |
36 | 40 | tee_merged |
37 | 41 | ); |
38 | 42 | } |
26 | 26 | run_test($_) for qw( |
27 | 27 | capture |
28 | 28 | capture_scalar |
29 | capture_stdout | |
30 | capture_stderr | |
29 | 31 | capture_merged |
30 | 32 | ); |
31 | 33 | |
33 | 35 | run_test($_) for qw( |
34 | 36 | tee |
35 | 37 | tee_scalar |
38 | tee_stdout | |
39 | tee_stderr | |
36 | 40 | tee_merged |
37 | 41 | ); |
38 | 42 | } |
26 | 26 | run_test($_) for qw( |
27 | 27 | capture |
28 | 28 | capture_scalar |
29 | capture_stdout | |
30 | capture_stderr | |
29 | 31 | capture_merged |
30 | 32 | ); |
31 | 33 | |
33 | 35 | run_test($_) for qw( |
34 | 36 | tee |
35 | 37 | tee_scalar |
38 | tee_stdout | |
39 | tee_stderr | |
36 | 40 | tee_merged |
37 | 41 | ); |
38 | 42 | } |
30 | 30 | run_test($_) for qw( |
31 | 31 | capture |
32 | 32 | capture_scalar |
33 | capture_stdout | |
34 | capture_stderr | |
33 | 35 | capture_merged |
34 | 36 | ); |
35 | 37 | |
37 | 39 | run_test($_) for qw( |
38 | 40 | tee |
39 | 41 | tee_scalar |
42 | tee_stdout | |
43 | tee_stderr | |
40 | 44 | tee_merged |
41 | 45 | ); |
42 | 46 | } |
30 | 30 | run_test($_) for qw( |
31 | 31 | capture |
32 | 32 | capture_scalar |
33 | capture_stdout | |
34 | capture_stderr | |
33 | 35 | capture_merged |
34 | 36 | ); |
35 | 37 | |
37 | 39 | run_test($_) for qw( |
38 | 40 | tee |
39 | 41 | tee_scalar |
42 | tee_stdout | |
43 | tee_stderr | |
40 | 44 | tee_merged |
41 | 45 | ); |
42 | 46 | } |
36 | 36 | run_test($_) for qw( |
37 | 37 | capture |
38 | 38 | capture_scalar |
39 | capture_stdout | |
40 | capture_stderr | |
39 | 41 | capture_merged |
40 | 42 | ); |
41 | 43 | |
43 | 45 | run_test($_) for qw( |
44 | 46 | tee |
45 | 47 | tee_scalar |
48 | tee_stdout | |
49 | tee_stderr | |
46 | 50 | tee_merged |
47 | 51 | ); |
48 | 52 | } |
33 | 33 | run_test($_) for qw( |
34 | 34 | capture |
35 | 35 | capture_scalar |
36 | capture_stdout | |
37 | capture_stderr | |
36 | 38 | capture_merged |
37 | 39 | ); |
38 | 40 | |
40 | 42 | run_test($_) for qw( |
41 | 43 | tee |
42 | 44 | tee_scalar |
45 | tee_stdout | |
46 | tee_stderr | |
43 | 47 | tee_merged |
44 | 48 | ); |
45 | 49 | } |