office2pdf 0.5.0

Convert DOCX, XLSX, and PPTX files to PDF using pure Rust
Documentation
use ts_rs::TS;

use crate::config::{ConvertOptions, Format, PaperSize, PdfStandard, SlideRange};
use crate::error::{ConvertMetrics, ConvertWarning};

fn cfg_for_bindings() -> ts_rs::Config {
    let bindings_dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("bindings");
    std::fs::create_dir_all(&bindings_dir).unwrap();
    ts_rs::Config::new().with_out_dir(bindings_dir)
}

#[test]
fn test_export_all_types_to_bindings() {
    let cfg = cfg_for_bindings();
    let bindings_dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("bindings");

    Format::export_all(&cfg).unwrap();
    PaperSize::export_all(&cfg).unwrap();
    PdfStandard::export_all(&cfg).unwrap();
    SlideRange::export_all(&cfg).unwrap();
    ConvertOptions::export_all(&cfg).unwrap();
    ConvertWarning::export_all(&cfg).unwrap();
    ConvertMetrics::export_all(&cfg).unwrap();

    assert!(bindings_dir.join("Format.ts").exists());
    assert!(bindings_dir.join("PaperSize.ts").exists());
    assert!(bindings_dir.join("PdfStandard.ts").exists());
    assert!(bindings_dir.join("SlideRange.ts").exists());
    assert!(bindings_dir.join("ConvertOptions.ts").exists());
    assert!(bindings_dir.join("ConvertWarning.ts").exists());
    assert!(bindings_dir.join("ConvertMetrics.ts").exists());
}

#[test]
fn test_generated_types_contain_expected_content() {
    let cfg = cfg_for_bindings();
    let bindings_dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("bindings");

    Format::export_all(&cfg).unwrap();
    ConvertOptions::export_all(&cfg).unwrap();

    let format_ts = std::fs::read_to_string(bindings_dir.join("Format.ts")).unwrap();
    assert!(
        format_ts.contains("Docx"),
        "Format.ts should contain Docx: {format_ts}"
    );
    assert!(
        format_ts.contains("Pptx"),
        "Format.ts should contain Pptx: {format_ts}"
    );
    assert!(
        format_ts.contains("Xlsx"),
        "Format.ts should contain Xlsx: {format_ts}"
    );

    let opts_ts = std::fs::read_to_string(bindings_dir.join("ConvertOptions.ts")).unwrap();
    assert!(
        opts_ts.contains("tagged"),
        "ConvertOptions.ts should contain tagged: {opts_ts}"
    );
    assert!(
        opts_ts.contains("pdf_ua"),
        "ConvertOptions.ts should contain pdf_ua: {opts_ts}"
    );
    assert!(
        opts_ts.contains("boolean"),
        "boolean fields should be mapped: {opts_ts}"
    );
}