2
2
// ignore-windows - this is a unix-specific test
3
3
// ignore-cloudabi no processes
4
4
// ignore-emscripten no processes
5
-
6
5
#![ feature( process_exec, rustc_private) ]
7
6
8
7
extern crate libc;
@@ -11,71 +10,104 @@ use std::env;
11
10
use std:: io:: Error ;
12
11
use std:: os:: unix:: process:: CommandExt ;
13
12
use std:: process:: Command ;
14
- use std:: sync:: Arc ;
15
13
use std:: sync:: atomic:: { AtomicUsize , Ordering } ;
14
+ use std:: sync:: Arc ;
16
15
17
16
fn main ( ) {
18
17
if let Some ( arg) = env:: args ( ) . nth ( 1 ) {
19
18
match & arg[ ..] {
20
19
"test1" => println ! ( "hello2" ) ,
21
20
"test2" => assert_eq ! ( env:: var( "FOO" ) . unwrap( ) , "BAR" ) ,
22
- "test3" => assert_eq ! ( env:: current_dir( ) . unwrap( )
23
- . to_str( ) . unwrap( ) , "/" ) ,
21
+ "test3" => assert_eq ! ( env:: current_dir( ) . unwrap( ) . to_str( ) . unwrap( ) , "/" ) ,
24
22
"empty" => { }
25
23
_ => panic ! ( "unknown argument: {}" , arg) ,
26
24
}
27
- return
25
+ return ;
28
26
}
29
27
30
28
let me = env:: current_exe ( ) . unwrap ( ) ;
31
29
32
- let output = unsafe { Command :: new ( & me) . arg ( "test1" ) . pre_exec ( || {
33
- println ! ( "hello" ) ;
34
- Ok ( ( ) )
35
- } ) . output ( ) . unwrap ( ) } ;
30
+ let output = unsafe {
31
+ Command :: new ( & me)
32
+ . arg ( "test1" )
33
+ . pre_exec ( || {
34
+ println ! ( "hello" ) ;
35
+ Ok ( ( ) )
36
+ } )
37
+ . output ( )
38
+ . unwrap ( )
39
+ } ;
36
40
assert ! ( output. status. success( ) ) ;
37
41
assert ! ( output. stderr. is_empty( ) ) ;
38
42
assert_eq ! ( output. stdout, b"hello\n hello2\n " ) ;
39
43
40
- let output = unsafe { Command :: new ( & me) . arg ( "test2" ) . pre_exec ( || {
41
- env:: set_var ( "FOO" , "BAR" ) ;
42
- Ok ( ( ) )
43
- } ) . output ( ) . unwrap ( ) } ;
44
+ let output = unsafe {
45
+ Command :: new ( & me)
46
+ . arg ( "test2" )
47
+ . pre_exec ( || {
48
+ env:: set_var ( "FOO" , "BAR" ) ;
49
+ Ok ( ( ) )
50
+ } )
51
+ . output ( )
52
+ . unwrap ( )
53
+ } ;
44
54
assert ! ( output. status. success( ) ) ;
45
55
assert ! ( output. stderr. is_empty( ) ) ;
46
56
assert ! ( output. stdout. is_empty( ) ) ;
47
57
48
- let output = unsafe { Command :: new ( & me) . arg ( "test3" ) . pre_exec ( || {
49
- env:: set_current_dir ( "/" ) . unwrap ( ) ;
50
- Ok ( ( ) )
51
- } ) . output ( ) . unwrap ( ) } ;
58
+ let output = unsafe {
59
+ Command :: new ( & me)
60
+ . arg ( "test3" )
61
+ . pre_exec ( || {
62
+ env:: set_current_dir ( "/" ) . unwrap ( ) ;
63
+ Ok ( ( ) )
64
+ } )
65
+ . output ( )
66
+ . unwrap ( )
67
+ } ;
52
68
assert ! ( output. status. success( ) ) ;
53
69
assert ! ( output. stderr. is_empty( ) ) ;
54
70
assert ! ( output. stdout. is_empty( ) ) ;
55
71
56
- let output = unsafe { Command :: new ( & me) . arg ( "bad" ) . pre_exec ( || {
57
- Err ( Error :: from_raw_os_error ( 102 ) )
58
- } ) . output ( ) . unwrap_err ( ) } ;
72
+ let output = unsafe {
73
+ Command :: new ( & me)
74
+ . arg ( "bad" )
75
+ . pre_exec ( || Err ( Error :: from_raw_os_error ( 102 ) ) )
76
+ . output ( )
77
+ . unwrap_err ( )
78
+ } ;
59
79
assert_eq ! ( output. raw_os_error( ) , Some ( 102 ) ) ;
60
80
61
81
let pid = unsafe { libc:: getpid ( ) } ;
62
82
assert ! ( pid >= 0 ) ;
63
- let output = unsafe { Command :: new ( & me) . arg ( "empty" ) . pre_exec ( move || {
64
- let child = libc:: getpid ( ) ;
65
- assert ! ( child >= 0 ) ;
66
- assert ! ( pid != child) ;
67
- Ok ( ( ) )
68
- } ) . output ( ) . unwrap ( ) } ;
83
+ let output = unsafe {
84
+ Command :: new ( & me)
85
+ . arg ( "empty" )
86
+ . pre_exec ( move || {
87
+ let child = libc:: getpid ( ) ;
88
+ assert ! ( child >= 0 ) ;
89
+ assert ! ( pid != child) ;
90
+ Ok ( ( ) )
91
+ } )
92
+ . output ( )
93
+ . unwrap ( )
94
+ } ;
69
95
assert ! ( output. status. success( ) ) ;
70
96
assert ! ( output. stderr. is_empty( ) ) ;
71
97
assert ! ( output. stdout. is_empty( ) ) ;
72
98
73
99
let mem = Arc :: new ( AtomicUsize :: new ( 0 ) ) ;
74
100
let mem2 = mem. clone ( ) ;
75
- let output = unsafe { Command :: new ( & me) . arg ( "empty" ) . pre_exec ( move || {
76
- assert_eq ! ( mem2. fetch_add( 1 , Ordering :: SeqCst ) , 0 ) ;
77
- Ok ( ( ) )
78
- } ) . output ( ) . unwrap ( ) } ;
101
+ let output = unsafe {
102
+ Command :: new ( & me)
103
+ . arg ( "empty" )
104
+ . pre_exec ( move || {
105
+ assert_eq ! ( mem2. fetch_add( 1 , Ordering :: SeqCst ) , 0 ) ;
106
+ Ok ( ( ) )
107
+ } )
108
+ . output ( )
109
+ . unwrap ( )
110
+ } ;
79
111
assert ! ( output. status. success( ) ) ;
80
112
assert ! ( output. stderr. is_empty( ) ) ;
81
113
assert ! ( output. stdout. is_empty( ) ) ;
0 commit comments