about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorIgor Matuszewski <Xanewok@gmail.com>2019-03-01 17:59:38 +0100
committerIgor Matuszewski <Xanewok@gmail.com>2019-03-04 18:19:30 +0100
commit0437bf7a7d968af885dc05931e4e7d1eaddaadbf (patch)
treed11cc2cb623eda33999bbef632c27cebe53d58f5 /src/test
parent51af19547313cc129dcccbe728ab2b9de439405f (diff)
Allow for stdin input in EmitMode::ModifiedLines
Diffstat (limited to 'src/test')
-rw-r--r--src/test/mod.rs26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/test/mod.rs b/src/test/mod.rs
index 2d1a62ceda5..5d9c103ed03 100644
--- a/src/test/mod.rs
+++ b/src/test/mod.rs
@@ -9,7 +9,7 @@ use std::process::{Command, Stdio};
 use std::str::Chars;
 
 use crate::config::{Color, Config, EmitMode, FileName, ReportTactic};
-use crate::formatting::{ModifiedChunk, SourceFile};
+use crate::formatting::{ModifiedChunk, ReportedErrors, SourceFile};
 use crate::rustfmt_diff::{make_diff, print_diff, DiffLine, Mismatch, OutputWriter};
 use crate::source_file;
 use crate::{FormatReport, Input, Session};
@@ -290,6 +290,30 @@ fn stdin_parser_panic_caught() {
     }
 }
 
+/// Ensures that `EmitMode::ModifiedLines` works with input from `stdin`. Useful
+/// when embedding Rustfmt (e.g. inside RLS).
+#[test]
+fn stdin_works_with_modified_lines() {
+    let input = "\nfn\n some( )\n{\n}\nfn main () {}\n";
+    let output = "1 6 2\nfn some() {}\nfn main() {}\n";
+
+    let input = Input::Text(input.to_owned());
+    let mut config = Config::default();
+    config.set().emit_mode(EmitMode::ModifiedLines);
+    let mut buf: Vec<u8> = vec![];
+    {
+        let mut session = Session::new(config, Some(&mut buf));
+        session.format(input).unwrap();
+        let errors = ReportedErrors {
+            has_diff: true,
+            ..Default::default()
+        };
+        assert_eq!(session.errors, errors);
+    }
+    let newline = if cfg!(windows) { "\r\n" } else { "\n" };
+    assert_eq!(buf, output.replace('\n', newline).as_bytes());
+}
+
 #[test]
 fn stdin_disable_all_formatting_test() {
     match option_env!("CFG_RELEASE_CHANNEL") {