From 64edb40a08a1e8de5fbae8730b021f2cc2f31edb Mon Sep 17 00:00:00 2001 From: A Farzat Date: Thu, 18 Jun 2026 21:43:34 +0300 Subject: Move the logic from main.rs to make it testable --- src/run.rs | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/run.rs (limited to 'src/run.rs') diff --git a/src/run.rs b/src/run.rs new file mode 100644 index 0000000..e9a32c2 --- /dev/null +++ b/src/run.rs @@ -0,0 +1,77 @@ +use std::io::{Read, Write}; + +use repo2markdown::{ + fenced_md_generator::generate_fenced_markdown, logger::Logger, + md_generator::generate_markdown_from_paths, +}; + +use crate::cli::Cli; + +pub fn run( + cli: &Cli, + input: R, + output: W, +) -> Result<(), Box> { + let logger = Logger::new(cli.verbosity()); + + if cli.fenced { + generate_fenced_markdown( + input, + output, + cli.render_options(), + &cli.root, + &cli.origin, + cli.name.as_deref(), + logger, + ) + } else { + generate_markdown_from_paths( + input, + output, + cli.render_options(), + &cli.root, + &cli.origin, + cli.name.as_deref(), + logger, + ) + } +} + +#[cfg(test)] +mod tests { + use std::io::Cursor; + + use clap::Parser; + + use crate::cli::Cli; + + use super::run; + + #[test] + fn run_does_not_fence_output_by_default() { + let cli = Cli::try_parse_from(["repo2markdown", "--name", "Project name"]).unwrap(); + + let input = Cursor::new(b""); + let mut output = Vec::new(); + + run(&cli, input, &mut output).unwrap(); + + assert_eq!(String::from_utf8(output).unwrap(), "# Project name\n"); + } + + #[test] + fn run_uses_fenced_output_when_requested() { + let cli = + Cli::try_parse_from(["repo2markdown", "--fenced", "--name", "Project name"]).unwrap(); + + let input = Cursor::new(b""); + let mut output = Vec::new(); + + run(&cli, input, &mut output).unwrap(); + + assert_eq!( + String::from_utf8(output).unwrap(), + "```markdown\n# Project name\n```\n" + ); + } +} -- cgit v1.3.1