diff options
| author | Caleb Cartwright <caleb.cartwright@outlook.com> | 2020-06-11 21:49:40 -0500 |
|---|---|---|
| committer | Caleb Cartwright <caleb.cartwright@outlook.com> | 2020-06-11 21:49:40 -0500 |
| commit | ce1a3efff03a17af6f0f8f93c07e3abe9058762e (patch) | |
| tree | 224caf342f9b2ba799d83b93a10a381e9fca1165 /src/test | |
| parent | dead3a807d6031972559c67ac5d30c61c50b0067 (diff) | |
fix: backport fix for submod parser errors
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/mod.rs | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/test/mod.rs b/src/test/mod.rs index e6497f48e0f..57b5f2a78cd 100644 --- a/src/test/mod.rs +++ b/src/test/mod.rs @@ -11,10 +11,12 @@ use std::thread; use crate::config::{Color, Config, EmitMode, FileName, NewlineStyle, ReportTactic}; use crate::formatting::{ReportedErrors, SourceFile}; -use crate::is_nightly_channel; +use crate::modules::{ModuleResolutionError, ModuleResolutionErrorKind}; use crate::rustfmt_diff::{make_diff, print_diff, DiffLine, Mismatch, ModifiedChunk, OutputWriter}; use crate::source_file; -use crate::{FormatReport, FormatReportFormatterBuilder, Input, Session}; +use crate::{ + is_nightly_channel, ErrorKind, FormatReport, FormatReportFormatterBuilder, Input, Session, +}; mod configuration_snippet; @@ -483,6 +485,34 @@ fn format_lines_errors_are_reported_with_tabs() { assert!(session.has_formatting_errors()); } +#[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"); + } +} + // For each file, run rustfmt and collect the output. // Returns the number of files checked and the number of failures. fn check_files(files: Vec<PathBuf>, opt_config: &Option<PathBuf>) -> (Vec<FormatReport>, u32, u32) { |
