trimdown 0.1.6

Fast file compression tool for Office documents (PPTX, DOCX, XLSX), PDFs, videos, images, OpenDocument formats, and archives with streaming support
Documentation
use std::path::PathBuf;
use trimdown::{detect_file_type, FileType};

#[test]
fn test_fixture_images_exist() {
    let fixtures = vec![
        "tests/fixtures/images/sample.jpg",
        "tests/fixtures/images/sample.png",
        "tests/fixtures/images/sample.webp",
        "tests/fixtures/images/large.jpg",
    ];

    for fixture in fixtures {
        let path = PathBuf::from(fixture);
        assert!(path.exists(), "Fixture file not found: {}", fixture);
        
        let metadata = std::fs::metadata(&path).unwrap();
        assert!(metadata.len() > 0, "Fixture file is empty: {}", fixture);
    }
}

#[test]
fn test_fixture_videos_exist() {
    let fixtures = vec![
        "tests/fixtures/videos/sample.mp4",
        "tests/fixtures/videos/sample2.mp4",
    ];

    for fixture in fixtures {
        let path = PathBuf::from(fixture);
        assert!(path.exists(), "Fixture file not found: {}", fixture);
        
        let metadata = std::fs::metadata(&path).unwrap();
        assert!(metadata.len() > 0, "Fixture file is empty: {}", fixture);
    }
}

#[test]
fn test_fixture_pdfs_exist() {
    let fixtures = vec![
        "tests/fixtures/pdfs/sample.pdf",
    ];

    for fixture in fixtures {
        let path = PathBuf::from(fixture);
        assert!(path.exists(), "Fixture file not found: {}", fixture);
        
        let metadata = std::fs::metadata(&path).unwrap();
        assert!(metadata.len() > 0, "Fixture file is empty: {}", fixture);
    }
}

#[test]
fn test_fixture_office_exist() {
    let fixtures = vec![
        "tests/fixtures/office/sample.pptx",
        "tests/fixtures/office/sample.docx",
    ];

    for fixture in fixtures {
        let path = PathBuf::from(fixture);
        assert!(path.exists(), "Fixture file not found: {}", fixture);
        
        let metadata = std::fs::metadata(&path).unwrap();
        assert!(metadata.len() > 0, "Fixture file is empty: {}", fixture);
    }
}

#[test]
fn test_detect_fixture_file_types() {
    let test_cases = vec![
        ("tests/fixtures/videos/sample.mp4", FileType::Video),
        ("tests/fixtures/pdfs/sample.pdf", FileType::Pdf),
        ("tests/fixtures/office/sample.pptx", FileType::PowerPoint),
        ("tests/fixtures/office/sample.docx", FileType::Word),
    ];

    for (path, expected_type) in test_cases {
        let detected = detect_file_type(&PathBuf::from(path)).unwrap();
        assert_eq!(detected, expected_type, "Failed to detect type for {}", path);
    }
}

#[test]
fn test_fixture_file_sizes() {
    // Verify files have reasonable sizes
    let path = PathBuf::from("tests/fixtures/images/large.jpg");
    let metadata = std::fs::metadata(&path).unwrap();
    assert!(metadata.len() > 100_000, "Large image should be > 100KB");

    let path = PathBuf::from("tests/fixtures/videos/sample.mp4");
    let metadata = std::fs::metadata(&path).unwrap();
    assert!(metadata.len() > 10_000, "Video should be > 10KB");

    let path = PathBuf::from("tests/fixtures/pdfs/sample.pdf");
    let metadata = std::fs::metadata(&path).unwrap();
    assert!(metadata.len() > 500, "PDF should be > 500 bytes");
}

#[test]
fn test_fixture_image_formats() {
    let formats: Vec<(&str, &[u8])> = vec![
        ("tests/fixtures/images/sample.jpg", &[0xFF, 0xD8, 0xFF]),
        ("tests/fixtures/images/sample.png", &[0x89, 0x50, 0x4E, 0x47]),
    ];

    for (path, magic_bytes) in formats {
        let mut file = std::fs::File::open(path).unwrap();
        let mut buffer = vec![0u8; magic_bytes.len()];
        use std::io::Read;
        file.read_exact(&mut buffer).unwrap();
        
        assert_eq!(&buffer[..], magic_bytes, "Invalid magic bytes for {}", path);
    }
}

#[test]
fn test_fixture_pdf_header() {
    let path = "tests/fixtures/pdfs/sample.pdf";
    let mut file = std::fs::File::open(path).unwrap();
    let mut buffer = vec![0u8; 5];
    use std::io::Read;
    file.read_exact(&mut buffer).unwrap();
    
    assert_eq!(&buffer[..], b"%PDF-", "Invalid PDF header");
}

#[test]
fn test_fixture_office_zip_structure() {
    use std::io::Read;
    
    // PPTX and DOCX are ZIP files
    let fixtures = vec![
        "tests/fixtures/office/sample.pptx",
        "tests/fixtures/office/sample.docx",
    ];

    for fixture in fixtures {
        let mut file = std::fs::File::open(fixture).unwrap();
        let mut buffer = vec![0u8; 4];
        file.read_exact(&mut buffer).unwrap();
        
        // ZIP magic bytes: PK\x03\x04
        assert_eq!(&buffer[..2], b"PK", "Invalid ZIP header for {}", fixture);
    }
}