@@ -260,11 +260,18 @@ impl fmt::Debug for ChildStderr {
260
260
/// ```
261
261
/// use std::process::Command;
262
262
///
263
- /// let output = Command::new("sh")
264
- /// .arg("-c")
265
- /// .arg("echo hello")
266
- /// .output()
267
- /// .expect("failed to execute process");
263
+ /// let output = if cfg!(target_os = "windows") {
264
+ /// Command::new("cmd")
265
+ /// .args(&["/C", "echo hello"])
266
+ /// .output()
267
+ /// .expect("failed to execute process")
268
+ /// } else {
269
+ /// Command::new("sh")
270
+ /// .arg("-c")
271
+ /// .arg("echo hello")
272
+ /// .output()
273
+ /// .expect("failed to execute process")
274
+ /// };
268
275
///
269
276
/// let hello = output.stdout;
270
277
/// ```
@@ -925,7 +932,11 @@ mod tests {
925
932
#[ test]
926
933
#[ cfg_attr( target_os = "android" , ignore) ]
927
934
fn smoke ( ) {
928
- let p = Command :: new ( "true" ) . spawn ( ) ;
935
+ let p = if cfg ! ( target_os = "windows" ) {
936
+ Command :: new ( "cmd" ) . args ( & [ "/C" , "exit 0" ] ) . spawn ( )
937
+ } else {
938
+ Command :: new ( "true" ) . spawn ( )
939
+ } ;
929
940
assert ! ( p. is_ok( ) ) ;
930
941
let mut p = p. unwrap ( ) ;
931
942
assert ! ( p. wait( ) . unwrap( ) . success( ) ) ;
@@ -943,7 +954,11 @@ mod tests {
943
954
#[ test]
944
955
#[ cfg_attr( target_os = "android" , ignore) ]
945
956
fn exit_reported_right ( ) {
946
- let p = Command :: new ( "false" ) . spawn ( ) ;
957
+ let p = if cfg ! ( target_os = "windows" ) {
958
+ Command :: new ( "cmd" ) . args ( & [ "/C" , "exit 1" ] ) . spawn ( )
959
+ } else {
960
+ Command :: new ( "false" ) . spawn ( )
961
+ } ;
947
962
assert ! ( p. is_ok( ) ) ;
948
963
let mut p = p. unwrap ( ) ;
949
964
assert ! ( p. wait( ) . unwrap( ) . code( ) == Some ( 1 ) ) ;
@@ -982,9 +997,15 @@ mod tests {
982
997
#[ test]
983
998
#[ cfg_attr( target_os = "android" , ignore) ]
984
999
fn stdout_works ( ) {
985
- let mut cmd = Command :: new ( "echo" ) ;
986
- cmd. arg ( "foobar" ) . stdout ( Stdio :: piped ( ) ) ;
987
- assert_eq ! ( run_output( cmd) , "foobar\n " ) ;
1000
+ if cfg ! ( target_os = "windows" ) {
1001
+ let mut cmd = Command :: new ( "cmd" ) ;
1002
+ cmd. args ( & [ "/C" , "echo foobar" ] ) . stdout ( Stdio :: piped ( ) ) ;
1003
+ assert_eq ! ( run_output( cmd) , "foobar\r \n " ) ;
1004
+ } else {
1005
+ let mut cmd = Command :: new ( "echo" ) ;
1006
+ cmd. arg ( "foobar" ) . stdout ( Stdio :: piped ( ) ) ;
1007
+ assert_eq ! ( run_output( cmd) , "foobar\n " ) ;
1008
+ }
988
1009
}
989
1010
990
1011
#[ test]
@@ -1044,10 +1065,18 @@ mod tests {
1044
1065
#[ test]
1045
1066
#[ cfg_attr( target_os = "android" , ignore) ]
1046
1067
fn test_process_status ( ) {
1047
- let mut status = Command :: new ( "false" ) . status ( ) . unwrap ( ) ;
1068
+ let mut status = if cfg ! ( target_os = "windows" ) {
1069
+ Command :: new ( "cmd" ) . args ( & [ "/C" , "exit 1" ] ) . status ( ) . unwrap ( )
1070
+ } else {
1071
+ Command :: new ( "false" ) . status ( ) . unwrap ( )
1072
+ } ;
1048
1073
assert ! ( status. code( ) == Some ( 1 ) ) ;
1049
1074
1050
- status = Command :: new ( "true" ) . status ( ) . unwrap ( ) ;
1075
+ status = if cfg ! ( target_os = "windows" ) {
1076
+ Command :: new ( "cmd" ) . args ( & [ "/C" , "exit 0" ] ) . status ( ) . unwrap ( )
1077
+ } else {
1078
+ Command :: new ( "true" ) . status ( ) . unwrap ( )
1079
+ } ;
1051
1080
assert ! ( status. success( ) ) ;
1052
1081
}
1053
1082
@@ -1063,7 +1092,11 @@ mod tests {
1063
1092
#[ cfg_attr( target_os = "android" , ignore) ]
1064
1093
fn test_process_output_output ( ) {
1065
1094
let Output { status, stdout, stderr}
1066
- = Command :: new ( "echo" ) . arg ( "hello" ) . output ( ) . unwrap ( ) ;
1095
+ = if cfg ! ( target_os = "windows" ) {
1096
+ Command :: new ( "cmd" ) . args ( & [ "/C" , "echo hello" ] ) . output ( ) . unwrap ( )
1097
+ } else {
1098
+ Command :: new ( "echo" ) . arg ( "hello" ) . output ( ) . unwrap ( )
1099
+ } ;
1067
1100
let output_str = str:: from_utf8 ( & stdout) . unwrap ( ) ;
1068
1101
1069
1102
assert ! ( status. success( ) ) ;
@@ -1075,7 +1108,11 @@ mod tests {
1075
1108
#[ cfg_attr( target_os = "android" , ignore) ]
1076
1109
fn test_process_output_error ( ) {
1077
1110
let Output { status, stdout, stderr}
1078
- = Command :: new ( "mkdir" ) . arg ( "." ) . output ( ) . unwrap ( ) ;
1111
+ = if cfg ! ( target_os = "windows" ) {
1112
+ Command :: new ( "cmd" ) . args ( & [ "/C" , "mkdir ." ] ) . output ( ) . unwrap ( )
1113
+ } else {
1114
+ Command :: new ( "mkdir" ) . arg ( "." ) . output ( ) . unwrap ( )
1115
+ } ;
1079
1116
1080
1117
assert ! ( status. code( ) == Some ( 1 ) ) ;
1081
1118
assert_eq ! ( stdout, Vec :: new( ) ) ;
@@ -1085,23 +1122,35 @@ mod tests {
1085
1122
#[ test]
1086
1123
#[ cfg_attr( target_os = "android" , ignore) ]
1087
1124
fn test_finish_once ( ) {
1088
- let mut prog = Command :: new ( "false" ) . spawn ( ) . unwrap ( ) ;
1125
+ let mut prog = if cfg ! ( target_os = "windows" ) {
1126
+ Command :: new ( "cmd" ) . args ( & [ "/C" , "exit 1" ] ) . spawn ( ) . unwrap ( )
1127
+ } else {
1128
+ Command :: new ( "false" ) . spawn ( ) . unwrap ( )
1129
+ } ;
1089
1130
assert ! ( prog. wait( ) . unwrap( ) . code( ) == Some ( 1 ) ) ;
1090
1131
}
1091
1132
1092
1133
#[ test]
1093
1134
#[ cfg_attr( target_os = "android" , ignore) ]
1094
1135
fn test_finish_twice ( ) {
1095
- let mut prog = Command :: new ( "false" ) . spawn ( ) . unwrap ( ) ;
1136
+ let mut prog = if cfg ! ( target_os = "windows" ) {
1137
+ Command :: new ( "cmd" ) . args ( & [ "/C" , "exit 1" ] ) . spawn ( ) . unwrap ( )
1138
+ } else {
1139
+ Command :: new ( "false" ) . spawn ( ) . unwrap ( )
1140
+ } ;
1096
1141
assert ! ( prog. wait( ) . unwrap( ) . code( ) == Some ( 1 ) ) ;
1097
1142
assert ! ( prog. wait( ) . unwrap( ) . code( ) == Some ( 1 ) ) ;
1098
1143
}
1099
1144
1100
1145
#[ test]
1101
1146
#[ cfg_attr( target_os = "android" , ignore) ]
1102
1147
fn test_wait_with_output_once ( ) {
1103
- let prog = Command :: new ( "echo" ) . arg ( "hello" ) . stdout ( Stdio :: piped ( ) )
1104
- . spawn ( ) . unwrap ( ) ;
1148
+ let prog = if cfg ! ( target_os = "windows" ) {
1149
+ Command :: new ( "cmd" ) . args ( & [ "/C" , "echo hello" ] ) . stdout ( Stdio :: piped ( ) ) . spawn ( ) . unwrap ( )
1150
+ } else {
1151
+ Command :: new ( "echo" ) . arg ( "hello" ) . stdout ( Stdio :: piped ( ) ) . spawn ( ) . unwrap ( )
1152
+ } ;
1153
+
1105
1154
let Output { status, stdout, stderr} = prog. wait_with_output ( ) . unwrap ( ) ;
1106
1155
let output_str = str:: from_utf8 ( & stdout) . unwrap ( ) ;
1107
1156
0 commit comments