use crate::archive::ArchiveBuilder;
use crate::archive::ArchiveExtractor;
use crate::error::{ArchiveError, MismallError};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_archive_builder_empty_filename() {
let result = ArchiveBuilder::new().add_file("", b"content");
assert!(result.is_err());
}
#[test]
fn test_archive_builder_duplicate_filename() {
let result = ArchiveBuilder::new()
.add_file("test.txt", b"content1")
.and_then(|builder| builder.add_file("test.txt", b"content2"));
assert!(result.is_err());
}
#[test]
fn test_archive_builder_too_many_files() {
let builder = ArchiveBuilder::new();
for i in 0..10000 {
builder = builder
.add_file(&format!("file{}.txt", i), b"content")
.unwrap();
}
let result = builder.build("test.small");
}
#[test]
fn test_archive_extractor_nonexistent_file() {
let extractor = ArchiveExtractor::new("nonexistent.small");
let result = extractor.extract_all();
assert!(result.is_err());
}
#[test]
fn test_archive_extractor_corrupted_file() {
let invalid_data = b"fake header content";
std::fs::write("corrupted.small", invalid_data).unwrap();
let extractor = ArchiveExtractor::new("corrupted.small");
let result = extractor.extract_all();
assert!(result.is_err());
std::fs::remove_file("corrupted.small").unwrap();
}
#[test]
fn test_archive_extractor_missing_file() {
let result =
ArchiveExtractor::new("test.small").extract_file("nonexistent.txt", "output.txt");
assert!(result.is_err());
}
#[test]
fn test_archive_builder_large_file() {
let large_content = vec![0u8; 100 * 1024 * 1024]; let result = ArchiveBuilder::new().add_file("large.txt", large_content);
assert!(result.is_ok());
}
}