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::::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::::new(config, None); let _ = session.format(Input::File(filename.into())).unwrap(); assert!(session.has_parsing_errors()); } #[test] fn parser_creation_errors_on_entry_new_parser_from_file_panic() { // See also https://github.com/rust-lang/rustfmt/issues/4418 let filename = "tests/parser/issue_4418.rs"; assert_parser_error(filename); } #[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); }