pptx 0.1.0

A Rust library for creating and manipulating PowerPoint (.pptx) files
Documentation
use crate::slide::*;

#[test]
fn test_set_slide_background_solid() {
    let mut xml = new_slide_xml();
    set_slide_background_solid(&mut xml, "FF0000").unwrap();
    let s = String::from_utf8(xml).unwrap();
    assert!(s.contains("<p:bg>"));
    assert!(s.contains(r#"val="FF0000""#));
}

#[test]
fn test_set_slide_background_gradient() {
    use crate::dml::color::ColorFormat;
    use crate::dml::fill::{GradientFill, GradientStop};

    let mut xml = new_slide_xml();
    let gradient = GradientFill {
        stops: vec![
            GradientStop {
                position: 0.0,
                color: ColorFormat::rgb(255, 0, 0),
            },
            GradientStop {
                position: 1.0,
                color: ColorFormat::rgb(0, 0, 255),
            },
        ],
        angle: Some(90.0),
    };
    set_slide_background_gradient(&mut xml, &gradient).unwrap();
    let s = String::from_utf8(xml).unwrap();
    assert!(s.contains("<p:bg>"));
    assert!(s.contains("<a:gradFill>"));
    assert!(s.contains("FF0000"));
    assert!(s.contains("0000FF"));
    assert!(s.contains("<a:lin"));
}

#[test]
fn test_set_slide_background_image() {
    let mut xml = new_slide_xml();
    set_slide_background_image(&mut xml, "rId5").unwrap();
    let s = String::from_utf8(xml).unwrap();
    assert!(s.contains("<p:bg>"));
    assert!(s.contains("<a:blipFill>"));
    assert!(s.contains(r#"r:embed="rId5""#));
    assert!(s.contains("<a:stretch>"));
}

#[test]
fn test_set_follow_master_background_remove() {
    let mut xml = new_slide_xml();
    set_slide_background_solid(&mut xml, "FF0000").unwrap();
    let s = std::str::from_utf8(&xml).unwrap();
    assert!(s.contains("<p:bg>"));

    set_follow_master_background(&mut xml, true).unwrap();
    let s = String::from_utf8(xml).unwrap();
    assert!(!s.contains("<p:bg>"));
}

#[test]
fn test_set_follow_master_background_false_noop() {
    let mut xml = new_slide_xml();
    let original = xml.clone();
    set_follow_master_background(&mut xml, false).unwrap();
    assert_eq!(xml, original);
}

#[test]
fn test_gradient_background_replaces_existing() {
    use crate::dml::color::ColorFormat;
    use crate::dml::fill::{GradientFill, GradientStop};

    let mut xml = new_slide_xml();
    set_slide_background_solid(&mut xml, "FF0000").unwrap();

    let gradient = GradientFill {
        stops: vec![
            GradientStop {
                position: 0.0,
                color: ColorFormat::rgb(0, 255, 0),
            },
            GradientStop {
                position: 1.0,
                color: ColorFormat::rgb(0, 0, 255),
            },
        ],
        angle: Some(45.0),
    };
    set_slide_background_gradient(&mut xml, &gradient).unwrap();
    let s = String::from_utf8(xml).unwrap();
    assert!(s.contains("<a:gradFill>"));
    assert!(!s.contains("FF0000"));
    assert_eq!(s.matches("<p:bg>").count(), 1);
}

#[test]
fn test_image_background_replaces_existing() {
    let mut xml = new_slide_xml();
    set_slide_background_solid(&mut xml, "FF0000").unwrap();
    set_slide_background_image(&mut xml, "rId10").unwrap();
    let s = String::from_utf8(xml).unwrap();
    assert!(s.contains("<a:blipFill>"));
    assert!(!s.contains("solidFill"));
    assert_eq!(s.matches("<p:bg>").count(), 1);
}

#[test]
fn test_remove_bg_element() {
    let xml = r#"<p:cSld><p:bg><p:bgPr><a:solidFill/></p:bgPr></p:bg><p:spTree/></p:cSld>"#;
    let result = background::remove_bg_element(xml);
    assert!(!result.contains("<p:bg>"));
    assert!(result.contains("<p:spTree/>"));
}

#[test]
fn test_remove_bg_element_no_bg() {
    let xml = r#"<p:cSld><p:spTree/></p:cSld>"#;
    let result = background::remove_bg_element(xml);
    assert_eq!(result, xml);
}