pub mod output;
pub mod search;
use crate::output::{
colors::Color,
result::{print_result, print_xtreme_stats},
};
use crate::search::xtreme::search_files as search_files_xtreme;
use crate::search::{crawler::get_files, default::search_files};
use std::path::PathBuf;
use std::time::Instant;
pub fn run(dir: &PathBuf, pattern: &str, color: &Color, show_stats: bool) {
let start_time = Instant::now();
let files = get_files(dir);
let rx = search_files(&files, pattern, color, show_stats);
print_result(rx, show_stats, start_time);
}
pub fn run_xtreme(dir: &PathBuf, pattern: &str, color: &Color, show_stats: bool) {
let start_time = Instant::now();
let files = get_files(dir);
let (files_processed, lines, matches, skipped) =
search_files_xtreme(&files, pattern, color, show_stats);
if show_stats {
print_xtreme_stats(files_processed, lines, matches, skipped, start_time);
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::fs::File;
use std::io::Write;
use tempdir::TempDir;
#[test]
fn test_run_integration() {
let temp_dir = TempDir::new("lib_test").unwrap();
let test_file = temp_dir.path().join("test.txt");
let mut file = File::create(&test_file).unwrap();
writeln!(file, "Hello world").unwrap();
writeln!(file, "This is a test").unwrap();
let pattern = "Hello";
let color = Color::Red;
run(&temp_dir.path().to_path_buf(), pattern, &color, false);
}
#[test]
fn test_run_with_single_file() {
let temp_dir = TempDir::new("lib_single_test").unwrap();
let test_file = temp_dir.path().join("single.txt");
let mut file = File::create(&test_file).unwrap();
writeln!(file, "Pattern match here").unwrap();
let pattern = "Pattern";
let color = Color::Blue;
run(&test_file, pattern, &color, false);
}
#[test]
fn test_run_with_no_matches() {
let temp_dir = TempDir::new("lib_no_match_test").unwrap();
let test_file = temp_dir.path().join("nomatch.txt");
let mut file = File::create(&test_file).unwrap();
writeln!(file, "This file has no pattern").unwrap();
let pattern = "NonExistentPattern";
let color = Color::Green;
run(&temp_dir.path().to_path_buf(), pattern, &color, false);
}
#[test]
fn test_run_different_colors() {
let temp_dir = TempDir::new("lib_colors_test").unwrap();
let test_file = temp_dir.path().join("colors.txt");
let mut file = File::create(&test_file).unwrap();
writeln!(file, "Test pattern").unwrap();
let pattern = "pattern";
run(&temp_dir.path().to_path_buf(), pattern, &Color::Red, false);
run(
&temp_dir.path().to_path_buf(),
pattern,
&Color::Green,
false,
);
run(&temp_dir.path().to_path_buf(), pattern, &Color::Blue, false);
run(&temp_dir.path().to_path_buf(), pattern, &Color::Bold, false);
}
}