From 0437bf7a7d968af885dc05931e4e7d1eaddaadbf Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Fri, 1 Mar 2019 17:59:38 +0100 Subject: Allow for stdin input in EmitMode::ModifiedLines --- src/test/mod.rs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'src/test') 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 = 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") { -- cgit 1.4.1-3-g733a5