diff options
| author | Nick Cameron <ncameron@mozilla.com> | 2018-07-23 14:52:02 +1200 |
|---|---|---|
| committer | Nick Cameron <ncameron@mozilla.com> | 2018-07-23 15:37:34 +1200 |
| commit | 71d3d04270474ae0afdeeb410fdcc168a54714b7 (patch) | |
| tree | 3fa5b35afdbddf86bd68a61c43987ab0c24adc74 /src/test | |
| parent | 4153e66e422fde262bac3d36b82e79af69d01f2d (diff) | |
factor out a `Session` object
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/mod.rs | 111 |
1 files changed, 78 insertions, 33 deletions
diff --git a/src/test/mod.rs b/src/test/mod.rs index b2eead3183d..f02cfbc858c 100644 --- a/src/test/mod.rs +++ b/src/test/mod.rs @@ -23,9 +23,9 @@ use std::str::Chars; use config::summary::Summary; use config::{Color, Config, EmitMode, FileName, ReportTactic}; use filemap; -use formatting::{format_input_inner, get_modified_lines, FileMap, ModifiedChunk, ModifiedLines}; +use formatting::{FileMap, ModifiedChunk}; use rustfmt_diff::{make_diff, print_diff, DiffLine, Mismatch, OutputWriter}; -use {format_input, FormatReport, Input}; +use {FormatReport, Input, Session}; const DIFF_CONTEXT_SIZE: usize = 3; const CONFIGURATIONS_FILE_NAME: &str = "Configurations.md"; @@ -142,25 +142,56 @@ fn checkstyle_test() { #[test] fn modified_test() { + use std::io::BufRead; + // Test "modified" output let filename = "tests/writemode/source/modified.rs"; - let result = get_modified_lines(Input::File(filename.into()), &Config::default()).unwrap(); - assert_eq!( - result, - ModifiedLines { - chunks: vec![ - ModifiedChunk { - line_number_orig: 4, - lines_removed: 4, - lines: vec!["fn blah() {}".into()], - }, - ModifiedChunk { - line_number_orig: 9, - lines_removed: 6, - lines: vec!["#[cfg(a, b)]".into(), "fn main() {}".into()], - }, - ], + let mut data = Vec::new(); + let mut config = Config::default(); + config.set().emit_mode(::config::EmitMode::ModifiedLines); + + { + let mut session = Session::new(config, Some(&mut data)); + session.format(Input::File(filename.into())).unwrap(); + } + + let mut lines = data.lines(); + let mut chunks = Vec::new(); + while let Some(Ok(header)) = lines.next() { + // Parse the header line + let values: Vec<_> = header + .split(' ') + .map(|s| s.parse::<u32>().unwrap()) + .collect(); + assert_eq!(values.len(), 3); + let line_number_orig = values[0]; + let lines_removed = values[1]; + let num_added = values[2]; + let mut added_lines = Vec::new(); + for _ in 0..num_added { + added_lines.push(lines.next().unwrap().unwrap()); } + chunks.push(ModifiedChunk { + line_number_orig, + lines_removed, + lines: added_lines, + }); + } + + assert_eq!( + chunks, + vec![ + ModifiedChunk { + line_number_orig: 4, + lines_removed: 4, + lines: vec!["fn blah() {}".into()], + }, + ModifiedChunk { + line_number_orig: 9, + lines_removed: 6, + lines: vec!["#[cfg(a, b)]".into(), "fn main() {}".into()], + }, + ], ); } @@ -168,7 +199,7 @@ fn modified_test() { // to a known output file generated by one of the write modes. fn assert_output(source: &Path, expected_filename: &Path) { let config = read_config(source); - let (_error_summary, file_map, _report) = format_file(source, &config); + let (_, file_map, _) = format_file(source, config.clone()); // Populate output by writing to a vec. let mut out = vec![]; @@ -246,8 +277,11 @@ fn stdin_formatting_smoke_test() { let mut config = Config::default(); config.set().emit_mode(EmitMode::Stdout); let mut buf: Vec<u8> = vec![]; - let (error_summary, _) = format_input(input, &config, Some(&mut buf)).unwrap(); - assert!(error_summary.has_no_errors()); + { + let mut session = Session::new(config, Some(&mut buf)); + session.format(input).unwrap(); + assert!(session.summary.has_no_errors()); + } //eprintln!("{:?}", ); #[cfg(not(windows))] assert_eq!(buf, "fn main() {}\n".as_bytes()); @@ -284,8 +318,9 @@ fn format_lines_errors_are_reported() { let input = Input::Text(format!("fn {}() {{}}", long_identifier)); let mut config = Config::default(); config.set().error_on_line_overflow(true); - let (error_summary, _) = format_input::<io::Stdout>(input, &config, None).unwrap(); - assert!(error_summary.has_formatting_errors()); + let mut session = Session::<io::Stdout>::new(config, None); + session.format(input).unwrap(); + assert!(session.summary.has_formatting_errors()); } #[test] @@ -295,8 +330,9 @@ fn format_lines_errors_are_reported_with_tabs() { let mut config = Config::default(); config.set().error_on_line_overflow(true); config.set().hard_tabs(true); - let (error_summary, _) = format_input::<io::Stdout>(input, &config, None).unwrap(); - assert!(error_summary.has_formatting_errors()); + let mut session = Session::<io::Stdout>::new(config, None); + session.format(input).unwrap(); + assert!(session.summary.has_formatting_errors()); } // For each file, run rustfmt and collect the output. @@ -380,11 +416,15 @@ fn read_config(filename: &Path) -> Config { config } -fn format_file<P: Into<PathBuf>>(filepath: P, config: &Config) -> (Summary, FileMap, FormatReport) { +fn format_file<P: Into<PathBuf>>(filepath: P, config: Config) -> (bool, FileMap, FormatReport) { let filepath = filepath.into(); let input = Input::File(filepath); - //format_input::<io::Stdout>(input, config, None).unwrap() - syntax::with_globals(|| format_input_inner::<io::Stdout>(input, config, None)).unwrap() + let mut session = Session::<io::Stdout>::new(config, None); + syntax::with_globals(|| { + let result = session.format_input_inner(input).unwrap(); + let parsing_errors = session.summary.has_parsing_errors(); + (parsing_errors, result.0, result.1) + }) } enum IdempotentCheckError { @@ -402,8 +442,8 @@ fn idempotent_check( } else { read_config(filename) }; - let (error_summary, file_map, format_report) = format_file(filename, &config); - if error_summary.has_parsing_errors() { + let (parsing_errors, file_map, format_report) = format_file(filename, config); + if parsing_errors { return Err(IdempotentCheckError::Parse); } @@ -779,10 +819,15 @@ impl ConfigCodeBlock { config.set().emit_mode(EmitMode::Stdout); let mut buf: Vec<u8> = vec![]; - let (error_summary, _) = format_input(input, &config, Some(&mut buf)).unwrap(); + { + let mut session = Session::new(config, Some(&mut buf)); + session.format(input).unwrap(); + if self.has_parsing_errors(session.summary) { + return false; + } + } - !self.has_parsing_errors(error_summary) - && !self.formatted_has_diff(&String::from_utf8(buf).unwrap()) + !self.formatted_has_diff(&String::from_utf8(buf).unwrap()) } // Extract a code block from the iterator. Behavior: |
