cranpose-capabilities 0.9.20

Declare platform services, permissions and hardware for Cranpose apps
Documentation
use super::*;

const PLIST: &str = "<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleName</key>\n\t<string>App</string>\n</dict>\n</plist>\n";

#[test]
fn a_usage_file_reads_as_key_and_value() {
    let text = "\t<key>NSCameraUsageDescription</key>\n\t<string>Reads receipts.</string>\n";
    assert_eq!(
        pairs(text),
        vec![(
            String::from("NSCameraUsageDescription"),
            String::from("Reads receipts.")
        )]
    );
}

#[test]
fn a_new_key_lands_before_the_closing_tag() {
    let merged = merge(
        PLIST,
        &[(
            String::from("NSCameraUsageDescription"),
            String::from("Reads receipts."),
        )],
    );
    assert!(merged.contains(
        "<key>NSCameraUsageDescription</key>\n\t<string>Reads receipts.</string>\n</dict>"
    ));
    assert!(merged.contains("<key>CFBundleName</key>"));
}

#[test]
fn a_key_the_list_holds_takes_the_new_sentence() {
    let once = merge(
        PLIST,
        &[(
            String::from("NSCameraUsageDescription"),
            String::from("First."),
        )],
    );
    let twice = merge(
        &once,
        &[(
            String::from("NSCameraUsageDescription"),
            String::from("Second."),
        )],
    );
    assert_eq!(twice.matches("NSCameraUsageDescription").count(), 1);
    assert!(twice.contains("<string>Second.</string>"));
    assert!(!twice.contains("First."));
}