From f610726fdeee1cd33aad675033e0c6d935c3c74c Mon Sep 17 00:00:00 2001 From: A Farzat Date: Fri, 5 Jun 2026 16:45:25 +0300 Subject: Test single file rendering in Renderer --- src/renderer.rs | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/renderer.rs b/src/renderer.rs index 23b5cf3..88f3623 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -1,6 +1,6 @@ use std::{ fmt, - io::Write, + io::{Read, Write}, path::{Path, PathBuf}, }; @@ -33,6 +33,18 @@ impl Renderer { pub fn render_header(&mut self, project_name: &str) -> std::io::Result<()> { writeln!(self.output, "# {}", project_name) } + + 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 name = render_filename(filename); + let fence = outer_backticks(&buf); + writeln!(self.output)?; + writeln!(self.output, "## File: {}", name)?; + writeln!(self.output, "{}", fence)?; + writeln!(self.output, "{}", buf)?; + writeln!(self.output, "{}", fence) + } } pub fn render(project_name: &str, files: &[(&Path, &[u8])]) -> Result { @@ -77,7 +89,7 @@ fn render_filename(path: &Path) -> String { #[cfg(test)] mod tests { - use std::{ffi::OsStr, os::unix::ffi::OsStrExt, path::Path}; + use std::{ffi::OsStr, io::Cursor, os::unix::ffi::OsStrExt, path::Path}; use super::{RenderError, Renderer, render}; @@ -184,4 +196,16 @@ mod tests { assert_eq!(String::from_utf8(output).unwrap(), "# Project name\n"); } + + #[test] + fn renderer_renders_single_file() { + let mut output = Vec::new(); + let mut renderer = Renderer::new(&mut output); + + let input = Cursor::new("fn main() {}"); + renderer.render_file(Path::new("main.rs"), input).unwrap(); + let expected = "\n## File: main.rs\n```\nfn main() {}\n```\n"; + + assert_eq!(String::from_utf8(output).unwrap(), expected); + } } -- cgit v1.3.1