From 42cf4779295b1a1660ed432360ddecbed96eed84 Mon Sep 17 00:00:00 2001 From: A Farzat Date: Fri, 5 Jun 2026 17:10:13 +0300 Subject: Test binary file rendering in Renderer --- src/renderer.rs | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/renderer.rs b/src/renderer.rs index 88f3623..a70c3be 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -35,16 +35,28 @@ impl Renderer { } pub fn render_file(&mut self, filename: &Path, mut reader: R) -> std::io::Result<()> { - let mut buf = String::new(); - reader.read_to_string(&mut buf)?; + let mut bytes = Vec::new(); + reader.read_to_end(&mut bytes)?; + let contents = if let Ok(utf8string) = std::str::from_utf8(&bytes) { + utf8string + } else { + return self.render_binary_file(filename); + }; let name = render_filename(filename); - let fence = outer_backticks(&buf); + let fence = outer_backticks(contents); writeln!(self.output)?; writeln!(self.output, "## File: {}", name)?; writeln!(self.output, "{}", fence)?; - writeln!(self.output, "{}", buf)?; + writeln!(self.output, "{}", contents)?; writeln!(self.output, "{}", fence) } + + fn render_binary_file(&mut self, filename: &Path) -> std::io::Result<()> { + let name = render_filename(filename); + writeln!(self.output)?; + writeln!(self.output, "## File: {}", name)?; + writeln!(self.output, "[BINARY FILE]") + } } pub fn render(project_name: &str, files: &[(&Path, &[u8])]) -> Result { @@ -208,4 +220,16 @@ mod tests { assert_eq!(String::from_utf8(output).unwrap(), expected); } + + #[test] + fn renderer_places_a_placeholder_for_binary_files_by_default() { + let mut output = Vec::new(); + let mut renderer = Renderer::new(&mut output); + + let input = Cursor::new(&[0x00, 0x01, 0x02, 0xc3]); + renderer.render_file(Path::new("image.png"), input).unwrap(); + let expected = "\n## File: image.png\n[BINARY FILE]\n"; + + assert_eq!(String::from_utf8(output).unwrap(), expected); + } } -- cgit v1.3.1