diff --git a/src/controller.rs b/src/controller.rs index ccbb6c31..e5c6ed53 100644 --- a/src/controller.rs +++ b/src/controller.rs @@ -26,20 +26,30 @@ impl<'b> Controller<'b> { let stdin = io::stdin(); for input_file in &self.config.files { - let mut reader = input_file.get_reader(&stdin)?; - - let result = if self.config.loop_through { - let mut printer = SimplePrinter::new(); - self.print_file(reader, &mut printer, writer, *input_file) - } else { - let mut printer = - InteractivePrinter::new(&self.config, &self.assets, *input_file, &mut reader); - self.print_file(reader, &mut printer, writer, *input_file) - }; + match input_file.get_reader(&stdin) { + Err(error) => { + handle_error(&error); + no_errors = false; + } + Ok(mut reader) => { + let result = if self.config.loop_through { + let mut printer = SimplePrinter::new(); + self.print_file(reader, &mut printer, writer, *input_file) + } else { + let mut printer = InteractivePrinter::new( + &self.config, + &self.assets, + *input_file, + &mut reader, + ); + self.print_file(reader, &mut printer, writer, *input_file) + }; - if let Err(error) = result { - handle_error(&error); - no_errors = false; + if let Err(error) = result { + handle_error(&error); + no_errors = false; + } + } } } diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index 2192bbd3..58482386 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -102,3 +102,13 @@ fn fail_non_existing() { fn fail_directory() { bat().arg("sub_directory").assert().failure(); } + +#[test] +fn do_not_exit_directory() { + bat() + .arg("sub_directory") + .arg("test.txt") + .assert() + .stdout("hello world\n") + .failure(); +}