Files
RustBox/examples/test_email_theme.rs
Mateusz Gruszczyński bc5fbd6ba9
RustBox CI / rustbox (push) Waiting to run
first commit
2026-10-29 15:24:59 +01:00

98 lines
2.8 KiB
Rust

use mail_parser::MessageParser;
use std::fs;
use std::path::Path;
#[allow(dead_code)]
#[path = "../src/email_theme.rs"]
mod email_theme;
use email_theme::{detect_email_theme, EmailTheme};
fn main() {
let debugging_dir = Path::new("../debugging");
let test_cases = [
("dark-1.eml", "dark"),
("dark-2.eml", "adaptive"),
("dark-3.eml", "adaptive"),
("dark-4.eml", "adaptive"),
("light-1.eml", "light"),
("light-2.eml", "light"),
("light-3.eml", "light"),
("light-4.eml", "adaptive"),
("light-5.eml", "light"),
("light-6.eml", "light"),
("light-7.eml", "adaptive"),
("light-8.eml", "light"),
("light-9.eml", "light"),
("transparent-1.eml", "transparent"),
("transparent-2.eml", "transparent"),
("transparent-3.eml", "transparent"),
("transparent-4.eml", "transparent"),
("transparent-5.eml", "transparent"),
("text-1.eml", "transparent"),
("text-2.eml", "transparent"),
("new-light.eml", "light"),
("light-10.eml", "light"),
("light-11.eml", "light"),
("light-12.eml", "adaptive"),
("padding.eml", "transparent"),
("light-13.eml", "light"),
("text-3.eml", "transparent"),
];
println!(
"{:<20} | {:<12} | {:<12} | Result",
"File", "Expected", "Detected"
);
println!("{}", "-".repeat(60));
let mut passed = 0;
let mut failed = 0;
for (filename, expected) in test_cases {
let path = debugging_dir.join(filename);
let result = test_file(&path, expected);
let status = if result.0 { "✅" } else { "❌" };
println!(
"{:<20} | {:<12} | {:<12} | {}",
filename, expected, result.1, status
);
if result.0 {
passed += 1;
} else {
failed += 1;
}
}
println!("{}", "-".repeat(60));
println!("Passed: {}, Failed: {}", passed, failed);
}
fn test_file(path: &Path, expected: &str) -> (bool, String) {
let content = match fs::read(path) {
Ok(c) => c,
Err(e) => return (false, format!("Error reading: {}", e)),
};
let msg = match MessageParser::default().parse(&content) {
Some(m) => m,
None => return (false, "Parse failed".to_string()),
};
let html = msg.body_html(0).map(|s| s.to_string());
let detected = match html {
Some(ref h) if !h.is_empty() => match detect_email_theme(h) {
Some(EmailTheme::Dark) => "dark",
Some(EmailTheme::Light) => "light",
Some(EmailTheme::Transparent) => "transparent",
Some(EmailTheme::Adaptive) => "adaptive",
None => "none",
},
_ => "none",
};
(detected == expected, detected.to_string())
}