]> git.lizzy.rs Git - rust.git/blobdiff - src/test/run-pass/issue-15149.rs
cleanup: s/impl Copy/#[derive(Copy)]/g
[rust.git] / src / test / run-pass / issue-15149.rs
index 59b1bb287fa747869dea9c1ea4e72a0a87e18625..bf395b14eb4eceafedb6bd2f75ffeb27ff386729 100644 (file)
@@ -8,14 +8,21 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+use std::slice::SliceExt;
 use std::io::{Command, fs, USER_RWX};
 use std::os;
+use std::path::BytesContainer;
+use std::rand::random;
 
 fn main() {
     // If we're the child, make sure we were invoked correctly
     let args = os::args();
     if args.len() > 1 && args[1].as_slice() == "child" {
-        return assert_eq!(args[0].as_slice(), "mytest");
+        // FIXME: This should check the whole `args[0]` instead of just
+        // checking that it ends_with the executable name. This
+        // is needed because of Windows, which has a different behavior.
+        // See #15149 for more info.
+        return assert!(args[0].ends_with(&format!("mytest{}", os::consts::EXE_SUFFIX)[]));
     }
 
     test();
@@ -26,8 +33,10 @@ fn test() {
     let my_path = os::self_exe_name().unwrap();
     let my_dir  = my_path.dir_path();
 
-    let child_dir = Path::new(my_dir.join("issue-15149-child"));
-    drop(fs::mkdir(&child_dir, USER_RWX));
+    let random_u32: u32 = random();
+    let child_dir = Path::new(my_dir.join(format!("issue-15149-child-{}",
+                                                  random_u32)));
+    fs::mkdir(&child_dir, USER_RWX).unwrap();
 
     let child_path = child_dir.join(format!("mytest{}",
                                             os::consts::EXE_SUFFIX));
@@ -38,7 +47,15 @@ fn test() {
     path.push(child_dir.clone());
     let path = os::join_paths(path.as_slice()).unwrap();
 
-    assert!(Command::new("mytest").env("PATH", path.as_slice())
-                                  .arg("child")
-                                  .status().unwrap().success());
+    let child_output = Command::new("mytest").env("PATH", path.as_slice())
+                                             .arg("child")
+                                             .output().unwrap();
+
+    assert!(child_output.status.success(),
+            format!("child assertion failed\n child stdout:\n {}\n child stderr:\n {}",
+                    child_output.output.container_as_str().unwrap(),
+                    child_output.error.container_as_str().unwrap()));
+
+    fs::rmdir_recursive(&child_dir).unwrap();
+
 }