From d064efd894d034726f1d67494fa98fc975708106 Mon Sep 17 00:00:00 2001
From: Nadrieril
Date: Wed, 24 Jun 2020 22:19:08 +0100
Subject: ci: run tests on windows

---
 dhall/tests/spec.rs | 33 ++++++++++++++++++++++++++-------
 1 file changed, 26 insertions(+), 7 deletions(-)

(limited to 'dhall/tests')

diff --git a/dhall/tests/spec.rs b/dhall/tests/spec.rs
index 8670013..a423435 100644
--- a/dhall/tests/spec.rs
+++ b/dhall/tests/spec.rs
@@ -238,7 +238,10 @@ impl TestFile {
         }
 
         let expected = read_to_string(self.path())?;
+        let expected = expected.replace("\r\n", "\n"); // Normalize line endings
         let msg = format!("{}\n", x);
+        // TODO: git changes newlines on windows
+        let msg = msg.replace("\r\n", "\n");
         if msg != expected {
             if Self::force_update() {
                 self.write_ui(x)?;
@@ -306,7 +309,7 @@ fn dhall_files_in_dir<'a>(
     dir: &'a Path,
     take_ab_suffix: bool,
     filetype: FileType,
-) -> impl Iterator<Item = (String, String)> + 'a {
+) -> impl Iterator<Item = String> + 'a {
     WalkDir::new(dir)
         .into_iter()
         .filter_map(|e| e.ok())
@@ -325,9 +328,7 @@ fn dhall_files_in_dir<'a>(
             } else {
                 path.to_owned()
             };
-            // Transform path into a valid Rust identifier
-            let name = path.replace("/", "_").replace("-", "_");
-            Some((name, path))
+            Some(path)
         })
 }
 
@@ -341,13 +342,16 @@ fn discover_tests_for_feature(feature: TestFeature) -> Vec<Test<SpecTest>> {
     for base_path in TEST_PATHS {
         let base_path = Path::new(base_path);
         let tests_dir = base_path.join(feature.directory);
-        for (name, path) in
+        for path in
             dhall_files_in_dir(&tests_dir, take_ab_suffix, feature.input_type)
         {
-            if (feature.exclude_path)(&path) {
+            let normalized_path = path.replace("\\", "/");
+            if (feature.exclude_path)(&normalized_path) {
                 continue;
             }
-            if (feature.too_slow_path)(&path) && cfg!(debug_assertions) {
+            if (feature.too_slow_path)(&normalized_path)
+                && cfg!(debug_assertions)
+            {
                 continue;
             }
             let path = tests_dir.join(path);
@@ -366,6 +370,8 @@ fn discover_tests_for_feature(feature: TestFeature) -> Vec<Test<SpecTest>> {
                 _ => path.as_ref().to_owned(),
             };
 
+            // Transform path into a valid Rust identifier
+            let name = normalized_path.replace("/", "_").replace("-", "_");
             let input = feature
                 .input_type
                 .construct(&format!("{}{}", path, input_suffix));
@@ -420,6 +426,10 @@ fn define_features() -> Vec<TestFeature> {
             directory: "parser/failure/",
             variant: SpecTestKind::ParserFailure,
             output_type: FileType::UI,
+            exclude_path: Rc::new(|_path: &str| {
+                // TODO: git changes newlines on windows
+                cfg!(windows)
+            }),
             ..default_feature.clone()
         },
         TestFeature {
@@ -481,6 +491,11 @@ fn define_features() -> Vec<TestFeature> {
                     || path == "customHeaders"
                     || path == "headerForwarding"
                     || path == "noHeaderForwarding"
+                    // TODO: git changes newlines on windows
+                    || (cfg!(windows) && path == "unit/AsText")
+                    // TODO: paths on windows have backslashes; this breaks all the `as Location` tests
+                    // See https://github.com/dhall-lang/dhall-lang/issues/1032
+                    || (cfg!(windows) && path.contains("asLocation"))
             }),
             ..default_feature.clone()
         },
@@ -490,6 +505,8 @@ fn define_features() -> Vec<TestFeature> {
             variant: SpecTestKind::ImportFailure,
             exclude_path: Rc::new(|path: &str| {
                 false
+                    // TODO: paths on windows have backslashes; this breaks many things
+                    || cfg!(windows)
                     // TODO: import headers
                     || path == "customHeadersUsingBoundVariable"
             }),
@@ -553,6 +570,8 @@ fn define_features() -> Vec<TestFeature> {
                 false
                     // TODO: enable free variable checking
                     || path == "unit/MergeHandlerFreeVar"
+                    // TODO: git changes newlines on windows
+                    || cfg!(windows)
             }),
             output_type: FileType::UI,
             ..default_feature
-- 
cgit v1.2.3