summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorA Farzat <a@farzat.xyz>2026-06-05 16:45:25 +0300
committerA Farzat <a@farzat.xyz>2026-06-05 16:45:25 +0300
commitf610726fdeee1cd33aad675033e0c6d935c3c74c (patch)
tree4233417801ac50257eeab9d66d765e296c4da62d
parent1ee2201833578111597dfb3c170eb517e7de10b9 (diff)
downloadrepo2markdown-f610726fdeee1cd33aad675033e0c6d935c3c74c.tar.gz
repo2markdown-f610726fdeee1cd33aad675033e0c6d935c3c74c.zip
Test single file rendering in Renderer
-rw-r--r--src/renderer.rs28
1 files 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<W: Write> Renderer<W> {
pub fn render_header(&mut self, project_name: &str) -> std::io::Result<()> {
writeln!(self.output, "# {}", project_name)
}
+
+ pub fn render_file<R: Read>(&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<String, RenderError> {
@@ -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);
+ }
}