Implemented --file-name for multiple files + tests

This commit is contained in:
Kyle Criddle
2020-03-24 18:26:00 -06:00
parent cfa2cb6ec7
commit 59f2e2d58d
5 changed files with 80 additions and 21 deletions

View File

@ -41,7 +41,20 @@ impl<'b> Controller<'b> {
let stdin = io::stdin();
for input_file in &self.config.files {
let filenames = if self.config.filenames.is_none() {
vec![None; self.config.files.len()]
} else {
self.config
.filenames
.as_ref()
.unwrap()
.into_iter()
.map(|name| Some(*name))
.collect()
};
for it in self.config.files.iter().zip(filenames) {
let (input_file, file_name) = it;
match input_file.get_reader(&stdin) {
Err(error) => {
handle_error(&error);
@ -50,7 +63,7 @@ impl<'b> Controller<'b> {
Ok(mut reader) => {
let result = if self.config.loop_through {
let mut printer = SimplePrinter::new();
self.print_file(reader, &mut printer, writer, *input_file)
self.print_file(reader, &mut printer, writer, *input_file, file_name)
} else {
let mut printer = InteractivePrinter::new(
&self.config,
@ -58,7 +71,7 @@ impl<'b> Controller<'b> {
*input_file,
&mut reader,
);
self.print_file(reader, &mut printer, writer, *input_file)
self.print_file(reader, &mut printer, writer, *input_file, file_name)
};
if let Err(error) = result {
@ -78,9 +91,10 @@ impl<'b> Controller<'b> {
printer: &mut P,
writer: &mut dyn Write,
input_file: InputFile<'a>,
file_name: Option<&str>,
) -> Result<()> {
if !reader.first_line.is_empty() || self.config.output_components.header() {
printer.print_header(writer, input_file)?;
printer.print_header(writer, input_file, file_name)?;
}
if !reader.first_line.is_empty() {