about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorNick Cameron <ncameron@mozilla.com>2018-07-23 14:52:02 +1200
committerNick Cameron <ncameron@mozilla.com>2018-07-23 15:37:34 +1200
commit71d3d04270474ae0afdeeb410fdcc168a54714b7 (patch)
tree3fa5b35afdbddf86bd68a61c43987ab0c24adc74 /src/test
parent4153e66e422fde262bac3d36b82e79af69d01f2d (diff)
factor out a `Session` object
Diffstat (limited to 'src/test')
-rw-r--r--src/test/mod.rs111
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: