]> git.lizzy.rs Git - rust.git/commitdiff
Fix path issue with tests on Windows
authorBryce Van Dyk <bryce@vandyk.net.nz>
Wed, 7 Oct 2015 12:10:07 +0000 (01:10 +1300)
committerBryce Van Dyk <bryce@vandyk.net.nz>
Wed, 7 Oct 2015 12:10:07 +0000 (01:10 +1300)
The code that manipulates paths to try and find files in the target dir
was not handling windows file seperators correctly. The code has been
updated to use the path module, and hopefully will play nicer across
operating systems.

tests/system.rs

index 346bbcd9123771074980bed1f96583fc6045f6b9..b6dee149ed1f5299292e319efa39f6ee5741499c 100644 (file)
@@ -16,6 +16,7 @@
 use std::collections::HashMap;
 use std::fs;
 use std::io::{self, Read, BufRead, BufReader};
+use std::path::Path;
 
 use rustfmt::*;
 use rustfmt::config::{Config, ReportTactic};
@@ -232,8 +233,19 @@ fn handle_result(result: HashMap<String, String>,
 
 // Map source file paths to their target paths.
 fn get_target(file_name: &str, target: Option<&str>) -> String {
-    if file_name.starts_with("tests/source/") {
-        let base = target.unwrap_or(file_name.trim_left_matches("tests/source/"));
+    let file_path = Path::new(file_name);
+    let source_path_prefix = Path::new("tests/source/");
+    if file_path.starts_with(source_path_prefix) {
+        let mut components = file_path.components();
+        // Can't skip(2) as the resulting iterator can't as_path()
+        components.next();
+        components.next();
+
+        let new_target = match components.as_path().to_str() {
+            Some(string) => string,
+            None => file_name,
+        };
+        let base = target.unwrap_or(new_target);
 
         format!("tests/target/{}", base)
     } else {