diff options
Diffstat (limited to 'src/md_generator.rs')
| -rw-r--r-- | src/md_generator.rs | 76 |
1 files changed, 62 insertions, 14 deletions
diff --git a/src/md_generator.rs b/src/md_generator.rs index 44802af..98ab22d 100644 --- a/src/md_generator.rs +++ b/src/md_generator.rs @@ -7,7 +7,10 @@ use std::{ }; use crate::{ - logger::Logger, normalizer::Normalizer, renderer::Renderer, util::path_display::display_path, + logger::Logger, + normalizer::Normalizer, + renderer::{RenderOptions, Renderer}, + util::path_display::display_path, }; const DEFAULT_PROJECT_NAME: &str = "Project Outline"; @@ -15,6 +18,7 @@ const DEFAULT_PROJECT_NAME: &str = "Project Outline"; pub fn generate_markdown_from_paths<R: Read, W: Write>( mut input: R, output: W, + render_options: RenderOptions, root: &Path, origin_base: &Path, project_title: Option<&str>, @@ -25,7 +29,7 @@ pub fn generate_markdown_from_paths<R: Read, W: Write>( let normalizer = Normalizer::new(root, origin_base)?; - let mut renderer = Renderer::new(output).with_logger(logger); + let mut renderer = Renderer::new(output, render_options).with_logger(logger); let project_title = project_title.unwrap_or_else(|| derive_project_title(root)); renderer.render_header(project_title)?; @@ -68,6 +72,7 @@ mod tests { use std::path::Path; use crate::logger::Logger; + use crate::renderer::RenderOptions; use tempfile::tempdir; use super::{DEFAULT_PROJECT_NAME, derive_project_title, generate_markdown_from_paths}; @@ -81,7 +86,7 @@ mod tests { output } - fn run_with_default_logger<R: Read, W: Write>( + fn generate_with_defaults<R: Read, W: Write>( input: R, output: W, root: &Path, @@ -89,7 +94,16 @@ mod tests { project_title: Option<&str>, ) -> Result<(), Box<dyn std::error::Error>> { let logger = Logger::default(); - generate_markdown_from_paths(input, output, root, origin_base, project_title, logger) + let render_options = RenderOptions::default(); + generate_markdown_from_paths( + input, + output, + render_options, + root, + origin_base, + project_title, + logger, + ) } #[test] @@ -100,7 +114,7 @@ mod tests { let root = temp_dir.path(); let origin_base = temp_dir.path(); - run_with_default_logger(input, &mut output, root, origin_base, Some("Project name")) + generate_with_defaults(input, &mut output, root, origin_base, Some("Project name")) .unwrap(); assert_eq!(String::from_utf8(output).unwrap(), "# Project name\n"); @@ -116,7 +130,7 @@ mod tests { fs::write(origin_base.join("test_main.rs"), "fn main() {}").unwrap(); - run_with_default_logger(input, &mut output, root, origin_base, None).unwrap(); + generate_with_defaults(input, &mut output, root, origin_base, None).unwrap(); let output_str = String::from_utf8(output).unwrap(); @@ -135,7 +149,7 @@ mod tests { fs::write(origin_base.join("a.rs"), "A").unwrap(); fs::write(origin_base.join("b.rs"), "B").unwrap(); - run_with_default_logger(input, &mut output, root, origin_base, None).unwrap(); + generate_with_defaults(input, &mut output, root, origin_base, None).unwrap(); let output = String::from_utf8(output).unwrap(); @@ -157,7 +171,7 @@ mod tests { fs::create_dir_all(&write_dir).unwrap(); fs::write(write_dir.join("main.rs"), "fn main() {}").unwrap(); - run_with_default_logger(input, &mut output, root, origin_base, None).unwrap(); + generate_with_defaults(input, &mut output, root, origin_base, None).unwrap(); let output = String::from_utf8(output).unwrap(); @@ -175,7 +189,7 @@ mod tests { fs::create_dir_all(&origin_base).unwrap(); fs::write(origin_base.join("main.rs"), "fn main() {}").unwrap(); - run_with_default_logger(input, &mut output, &root, &origin_base, None).unwrap(); + generate_with_defaults(input, &mut output, &root, &origin_base, None).unwrap(); let output = String::from_utf8(output).unwrap(); @@ -197,7 +211,7 @@ mod tests { let root = temp_dir2.path(); fs::write(&filepath, "fn main() {}").unwrap(); - run_with_default_logger(input, &mut output, root, origin_base, None).unwrap(); + generate_with_defaults(input, &mut output, root, origin_base, None).unwrap(); let output = String::from_utf8(output).unwrap(); @@ -216,7 +230,7 @@ mod tests { let input = Cursor::new(b"a.rs\0a.rs\0"); let mut output = Vec::new(); - run_with_default_logger(input, &mut output, root, origin, None).unwrap(); + generate_with_defaults(input, &mut output, root, origin, None).unwrap(); let output = String::from_utf8(output).unwrap(); @@ -235,7 +249,7 @@ mod tests { let input = Cursor::new(b"a.rs\0b.rs\0a.rs\0"); let mut output = Vec::new(); - run_with_default_logger(input, &mut output, root, origin, None).unwrap(); + generate_with_defaults(input, &mut output, root, origin, None).unwrap(); let output = String::from_utf8(output).unwrap(); assert_eq!(output.matches("## File: a.rs").count(), 1); @@ -258,7 +272,7 @@ mod tests { let input = Cursor::new(b"a.rs\0b.rs\0bla/../a.rs\0"); let mut output = Vec::new(); - run_with_default_logger(input, &mut output, root, origin, None).unwrap(); + generate_with_defaults(input, &mut output, root, origin, None).unwrap(); let output = String::from_utf8(output).unwrap(); assert_eq!(output.matches("## File: a.rs").count(), 1); @@ -272,7 +286,7 @@ mod tests { let mut output = Vec::new(); let root = temp_dir.path().join("repo2markdown"); - run_with_default_logger(input, &mut output, &root, origin_base, None).unwrap(); + generate_with_defaults(input, &mut output, &root, origin_base, None).unwrap(); let output_str = String::from_utf8(output).unwrap(); @@ -295,4 +309,38 @@ mod tests { let root = Path::new("/root/repo2markdown/"); assert_eq!(derive_project_title(root), "repo2markdown"); } + + #[test] + fn generator_uses_render_options_for_large_file_placeholders() { + let temp_dir = tempdir().unwrap(); + let origin_base = temp_dir.path(); + let root = temp_dir.path(); + + let file_path = origin_base.join("big.txt"); + fs::write(&file_path, "A".repeat(10)).unwrap(); + + let input = Cursor::new(b"big.txt\0"); + let mut output = Vec::new(); + + let config = RenderOptions { + placeholder_for_binary_files: false, + placeholder_for_large_files: true, + max_file_size: 5, + }; + + generate_markdown_from_paths( + input, + &mut output, + config, + root, + origin_base, + None, + Logger::default(), + ) + .unwrap(); + + let output = String::from_utf8(output).unwrap(); + assert!(output.contains("## File: big.txt")); + assert!(output.contains("[FILE TOO LARGE]")); + } } |
