From a01cf8ad53a3839d13aa99a589ba0f2aa796d511 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Wed, 7 Aug 2019 21:57:51 +0200 Subject: Remove an annoying redundancy in the test harness --- dhall/build.rs | 65 +++++++++++++++++++++------------------------- dhall/src/phase/resolve.rs | 4 +-- dhall/src/tests.rs | 14 +--------- 3 files changed, 33 insertions(+), 50 deletions(-) (limited to 'dhall') diff --git a/dhall/build.rs b/dhall/build.rs index 1da06ca..3d4611e 100644 --- a/dhall/build.rs +++ b/dhall/build.rs @@ -41,29 +41,37 @@ fn dhall_files_in_dir<'a>( fn make_test_module( w: &mut impl Write, // Where to output the generated code mod_name: &str, // Name of the module, used in the output of `cargo test` - dir: &Path, // Directory containing the tests files + subdir: &str, // Directory containing the tests files feature: &str, // Relevant variant of `dhall::tests::Feature` mut exclude: impl FnMut(&str) -> bool, // Given a file name, whether to exclude it ) -> std::io::Result<()> { + let all_tests_dir = Path::new("../dhall-lang/tests/"); + let tests_dir = all_tests_dir.join(subdir); writeln!(w, "mod {} {{", mod_name)?; - for (name, path) in dhall_files_in_dir(&dir.join("success/"), true) { + for (name, path) in dhall_files_in_dir(&tests_dir.join("success/"), true) { if exclude(&("success/".to_owned() + &path)) { continue; } writeln!( w, - r#"make_spec_test!({}, Success, success_{}, "success/{}");"#, - feature, name, path + r#"make_spec_test!({}, Success, success_{}, "{}/success/{}");"#, + feature, + name, + tests_dir.to_string_lossy(), + path )?; } - for (name, path) in dhall_files_in_dir(&dir.join("failure/"), false) { + for (name, path) in dhall_files_in_dir(&tests_dir.join("failure/"), false) { if exclude(&("failure/".to_owned() + &path)) { continue; } writeln!( w, - r#"make_spec_test!({}, Failure, failure_{}, "failure/{}");"#, - feature, name, path + r#"make_spec_test!({}, Failure, failure_{}, "{}/failure/{}");"#, + feature, + name, + tests_dir.to_string_lossy(), + path )?; } writeln!(w, "}}")?; @@ -71,26 +79,20 @@ fn make_test_module( } fn main() -> std::io::Result<()> { - // Tries to detect when the submodule gets updated; doesn't really work. + // Tries to detect when the submodule gets updated. // To force regeneration of the test list, just `touch dhall-lang/.git` println!("cargo:rerun-if-changed=../dhall-lang/.git"); println!( "cargo:rerun-if-changed=../.git/modules/dhall-lang/refs/heads/master" ); let out_dir = env::var("OUT_DIR").unwrap(); - let tests_dir = Path::new("../dhall-lang/tests/"); let parser_tests_path = Path::new(&out_dir).join("spec_tests.rs"); let mut file = File::create(parser_tests_path)?; - make_test_module( - &mut file, - "parse", - &tests_dir.join("parser/"), - "Parser", - |path| { - // Too slow in debug mode - path == "success/largeExpression" + make_test_module(&mut file, "parse", "parser/", "Parser", |path| { + // Too slow in debug mode + path == "success/largeExpression" // TODO: Inline headers || path == "success/unit/import/parenthesizeUsing" || path == "success/unit/import/inlineUsing" @@ -106,17 +108,11 @@ fn main() -> std::io::Result<()> { || path == "success/unit/import/urls/emptyPathSegment" // TODO: toMap || path == "success/toMap" - }, - )?; + })?; - make_test_module( - &mut file, - "printer", - &tests_dir.join("parser/"), - "Printer", - |path| { - // Failure tests are only for the parser - path.starts_with("failure/") + make_test_module(&mut file, "printer", "parser/", "Printer", |path| { + // Failure tests are only for the parser + path.starts_with("failure/") // Too slow in debug mode || path == "success/largeExpression" // TODO: Inline headers @@ -132,13 +128,12 @@ fn main() -> std::io::Result<()> { || path == "success/unit/import/urls/emptyPathSegment" // TODO: toMap || path == "success/toMap" - }, - )?; + })?; make_test_module( &mut file, "binary_encoding", - &tests_dir.join("parser/"), + "parser/", "BinaryEncoding", |path| { // Failure tests are only for the parser @@ -169,7 +164,7 @@ fn main() -> std::io::Result<()> { make_test_module( &mut file, "binary_decoding", - &tests_dir.join("binary-decode/"), + "binary-decode/", "BinaryDecoding", |path| { false @@ -184,7 +179,7 @@ fn main() -> std::io::Result<()> { make_test_module( &mut file, "beta_normalize", - &tests_dir.join("normalization/"), + "normalization/", "Normalization", |path| { // We don't support bignums @@ -207,7 +202,7 @@ fn main() -> std::io::Result<()> { make_test_module( &mut file, "alpha_normalize", - &tests_dir.join("alpha-normalization/"), + "alpha-normalization/", "AlphaNormalization", |_| false, )?; @@ -215,7 +210,7 @@ fn main() -> std::io::Result<()> { make_test_module( &mut file, "typecheck", - &tests_dir.join("typecheck/"), + "typecheck/", "Typecheck", |path| { false @@ -239,7 +234,7 @@ fn main() -> std::io::Result<()> { make_test_module( &mut file, "type_inference", - &tests_dir.join("type-inference/"), + "type-inference/", "TypeInference", |path| { false diff --git a/dhall/src/phase/resolve.rs b/dhall/src/phase/resolve.rs index 0609694..0b29513 100644 --- a/dhall/src/phase/resolve.rs +++ b/dhall/src/phase/resolve.rs @@ -110,13 +110,13 @@ mod spec_tests { macro_rules! import_success { ($name:ident, $path:expr) => { - make_spec_test!(Import, Success, $name, &("success/".to_owned() + $path)); + make_spec_test!(Import, Success, $name, &("../dhall-lang/tests/import/success/".to_owned() + $path)); }; } // macro_rules! import_failure { // ($name:ident, $path:expr) => { - // make_spec_test!(Import, Failure, $name, &("failure/".to_owned() + $path)); + // make_spec_test!(Import, Failure, $name, &("../dhall-lang/tests/import/failure/".to_owned() + $path)); // }; // } diff --git a/dhall/src/tests.rs b/dhall/src/tests.rs index da48d15..9784eec 100644 --- a/dhall/src/tests.rs +++ b/dhall/src/tests.rs @@ -81,19 +81,7 @@ pub fn run_test( ) -> Result<()> { use self::Feature::*; use self::Status::*; - let feature_prefix = match feature { - Parser => "parser/", - Printer => "parser/", - BinaryEncoding => "parser/", - BinaryDecoding => "binary-decode/", - Import => "import/", - Normalization => "normalization/", - AlphaNormalization => "alpha-normalization/", - Typecheck => "typecheck/", - TypeInference => "type-inference/", - }; - let base_path = - "../dhall-lang/tests/".to_owned() + feature_prefix + base_path; + let base_path = base_path.to_owned(); match status { Success => { match feature { -- cgit v1.2.3