about summary refs log tree commit diff
path: root/src/test/parser.rs
diff options
context:
space:
mode:
authorCaleb Cartwright <caleb.cartwright@outlook.com>2020-10-29 22:50:25 -0500
committerCaleb Cartwright <calebcartwright@users.noreply.github.com>2020-11-02 18:31:51 -0600
commit9faba4539b24ac2db69edd385774d085bb0fd120 (patch)
tree926899a142152ef8b30022fb5c4312f5180ad759 /src/test/parser.rs
parente131797b62fd52f48fb59296c4c700a97250dee4 (diff)
fix(parser): better unclosed delims handling
Diffstat (limited to 'src/test/parser.rs')
-rw-r--r--src/test/parser.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/test/parser.rs b/src/test/parser.rs
new file mode 100644
index 00000000000..75aed32e68b
--- /dev/null
+++ b/src/test/parser.rs
@@ -0,0 +1,50 @@
+use std::io;
+use std::path::PathBuf;
+
+use super::read_config;
+
+use crate::modules::{ModuleResolutionError, ModuleResolutionErrorKind};
+use crate::{ErrorKind, Input, Session};
+
+#[test]
+fn parser_errors_in_submods_are_surfaced() {
+    // See also https://github.com/rust-lang/rustfmt/issues/4126
+    let filename = "tests/parser/issue-4126/lib.rs";
+    let input_file = PathBuf::from(filename);
+    let exp_mod_name = "invalid";
+    let config = read_config(&input_file);
+    let mut session = Session::<io::Stdout>::new(config, None);
+    if let Err(ErrorKind::ModuleResolutionError(ModuleResolutionError { module, kind })) =
+        session.format(Input::File(filename.into()))
+    {
+        assert_eq!(&module, exp_mod_name);
+        if let ModuleResolutionErrorKind::ParseError {
+            file: unparseable_file,
+        } = kind
+        {
+            assert_eq!(
+                unparseable_file,
+                PathBuf::from("tests/parser/issue-4126/invalid.rs"),
+            );
+        } else {
+            panic!("Expected parser error");
+        }
+    } else {
+        panic!("Expected ModuleResolution operation error");
+    }
+}
+
+fn assert_parser_error(filename: &str) {
+    let file = PathBuf::from(filename);
+    let config = read_config(&file);
+    let mut session = Session::<io::Stdout>::new(config, None);
+    let _ = session.format(Input::File(filename.into())).unwrap();
+    assert!(session.has_parsing_errors());
+}
+
+#[test]
+fn crate_parsing_errors_on_unclosed_delims() {
+    // See also https://github.com/rust-lang/rustfmt/issues/4466
+    let filename = "tests/parser/unclosed-delims/issue_4466.rs";
+    assert_parser_error(filename);
+}