summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNadrieril2019-03-24 17:59:57 +0100
committerNadrieril2019-03-24 18:00:55 +0100
commita6f61ec4843f4ec91eb9651b79c8b843fb995b46 (patch)
tree1c082c2e820f117fb86c69f7ba9b659b8af7ac2f
parent8bae9a8fab523668e9aea96e4f32cec21e22998a (diff)
Generate parser tests list automatically
Diffstat (limited to '')
-rw-r--r--dhall/Cargo.toml1
-rw-r--r--dhall/build.rs42
-rw-r--r--dhall/tests/parser.rs69
3 files changed, 45 insertions, 67 deletions
diff --git a/dhall/Cargo.toml b/dhall/Cargo.toml
index 3c3e375..234daa4 100644
--- a/dhall/Cargo.toml
+++ b/dhall/Cargo.toml
@@ -3,6 +3,7 @@ name = "dhall"
version = "0.1.0"
authors = ["NanoTech <nanotech@nanotechcorp.net>", "Nadrieril <nadrieril@users.noreply.github.com>"]
edition = "2018"
+build = "build.rs"
[lib]
doctest = false
diff --git a/dhall/build.rs b/dhall/build.rs
new file mode 100644
index 0000000..c8ad6ad
--- /dev/null
+++ b/dhall/build.rs
@@ -0,0 +1,42 @@
+use std::env;
+use std::ffi::OsString;
+use std::fs::{self, File};
+use std::io::Write;
+use std::path::Path;
+
+fn dhall_files_in_dir<'a>(dir: &'a Path) -> impl Iterator<Item = String> + 'a {
+ fs::read_dir(dir).unwrap().filter_map(move |path| {
+ let path = path.unwrap().path();
+ let path = path.strip_prefix(dir).unwrap();
+ if path.extension() != Some(&OsString::from("dhall")) {
+ return None;
+ }
+ let path = path.to_string_lossy();
+ let path = path[..path.len() - 6].to_owned();
+ Some(path)
+ })
+}
+
+fn main() -> std::io::Result<()> {
+ 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("parser_tests.rs");
+ let mut file = File::create(parser_tests_path)?;
+
+ for path in dhall_files_in_dir(&tests_dir.join("parser/success/")) {
+ let name = &path[..path.len() - 1];
+ // Skip this test; parser is way too slow indebug mode
+ if name == "largeExpression" {
+ continue;
+ }
+ writeln!(file, r#"make_spec_test!(ParserSuccess, spec_parser_success_{0}, "{0}");"#, name)?;
+ }
+
+ for path in dhall_files_in_dir(&tests_dir.join("parser/failure/")) {
+ let name = &path;
+ writeln!(file, r#"make_spec_test!(ParserFailure, spec_parser_failure_{0}, "{0}");"#, name)?;
+ }
+
+ Ok(())
+}
diff --git a/dhall/tests/parser.rs b/dhall/tests/parser.rs
index 1db8d33..0b5e2d6 100644
--- a/dhall/tests/parser.rs
+++ b/dhall/tests/parser.rs
@@ -2,70 +2,5 @@
#![rustfmt::skip]
mod common;
-macro_rules! parser_success {
- ($name:ident, $path:expr) => {
- make_spec_test!(ParserSuccess, $name, $path);
- };
-}
-macro_rules! parser_failure {
- ($name:ident, $path:expr) => {
- make_spec_test!(ParserFailure, $name, $path);
- };
-}
-
-parser_success!(spec_parser_success_annotations, "annotations");
-parser_success!(spec_parser_success_asText, "asText");
-parser_success!(spec_parser_success_blockComment, "blockComment");
-parser_success!(spec_parser_success_builtins, "builtins");
-parser_success!(spec_parser_success_collectionImportType, "collectionImportType");
-parser_success!(spec_parser_success_double, "double");
-parser_success!(spec_parser_success_doubleQuotedString, "doubleQuotedString");
-parser_success!(spec_parser_success_environmentVariables, "environmentVariables");
-parser_success!(spec_parser_success_escapedDoubleQuotedString, "escapedDoubleQuotedString");
-parser_success!(spec_parser_success_escapedSingleQuotedString, "escapedSingleQuotedString");
-parser_success!(spec_parser_success_fields, "fields");
-parser_success!(spec_parser_success_forall, "forall");
-parser_success!(spec_parser_success_functionType, "functionType");
-parser_success!(spec_parser_success_identifier, "identifier");
-parser_success!(spec_parser_success_ifThenElse, "ifThenElse");
-parser_success!(spec_parser_success_importAlt, "importAlt");
-parser_success!(spec_parser_success_interpolatedDoubleQuotedString, "interpolatedDoubleQuotedString");
-parser_success!(spec_parser_success_interpolatedSingleQuotedString, "interpolatedSingleQuotedString");
-parser_success!(spec_parser_success_label, "label");
-parser_success!(spec_parser_success_lambda, "lambda");
-// parser_success!(spec_parser_success_largeExpression, "largeExpression");
-parser_success!(spec_parser_success_let, "let");
-parser_success!(spec_parser_success_lineComment, "lineComment");
-parser_success!(spec_parser_success_list, "list");
-parser_success!(spec_parser_success_merge, "merge");
-parser_success!(spec_parser_success_multilet, "multilet");
-parser_success!(spec_parser_success_natural, "natural");
-parser_success!(spec_parser_success_nestedBlockComment, "nestedBlockComment");
-parser_success!(spec_parser_success_operators, "operators");
-parser_success!(spec_parser_success_parenthesizeUsing, "parenthesizeUsing");
-parser_success!(spec_parser_success_pathTermination, "pathTermination");
-parser_success!(spec_parser_success_paths, "paths");
-parser_success!(spec_parser_success_quotedLabel, "quotedLabel");
-parser_success!(spec_parser_success_quotedPaths, "quotedPaths");
-parser_success!(spec_parser_success_record, "record");
-parser_success!(spec_parser_success_reservedPrefix, "reservedPrefix");
-parser_success!(spec_parser_success_singleQuotedString, "singleQuotedString");
-parser_success!(spec_parser_success_sort, "sort");
-parser_success!(spec_parser_success_spaceAfterListAppend, "spaceAfterListAppend");
-parser_success!(spec_parser_success_template, "template");
-parser_success!(spec_parser_success_unicodeComment, "unicodeComment");
-parser_success!(spec_parser_success_unicodeDoubleQuotedString, "unicodeDoubleQuotedString");
-parser_success!(spec_parser_success_unicodePaths, "unicodePaths");
-parser_success!(spec_parser_success_union, "union");
-parser_success!(spec_parser_success_urls, "urls");
-parser_success!(spec_parser_success_whitespace, "whitespace");
-parser_success!(spec_parser_success_whitespaceBuffet, "whitespaceBuffet");
-
-parser_failure!(spec_parser_failure_annotation, "annotation");
-parser_failure!(spec_parser_failure_builtins, "builtins");
-parser_failure!(spec_parser_failure_doubleBoundsNeg, "doubleBoundsNeg");
-parser_failure!(spec_parser_failure_doubleBoundsPos, "doubleBoundsPos");
-parser_failure!(spec_parser_failure_importAccess, "importAccess");
-parser_failure!(spec_parser_failure_incompleteIf, "incompleteIf");
-parser_failure!(spec_parser_failure_mandatoryNewline, "mandatoryNewline");
-parser_failure!(spec_parser_failure_missingSpace, "missingSpace");
+// See ../build.rs
+include!(concat!(env!("OUT_DIR"), "/parser_tests.rs"));