dot-multisample 0.1.0

Bindings to the .multisample manifest file format
Documentation
use std::path::Path;

use dot_multisample::*;

#[test]
fn empty() {
    let multi: Multisample = quick_xml::de::from_str(include_str!("data/empty.xml")).unwrap();

    assert_eq!(multi.name(), "");
    assert_eq!(multi.generator(), "");
    assert_eq!(multi.category(), "");
    assert_eq!(multi.creator(), "");
    assert_eq!(multi.description(), "");
    assert_eq!(multi.keywords(), &[] as &[std::borrow::Cow<'_, str>]);
    assert_eq!(multi.groups(), []);
    assert_eq!(multi.samples(), []);
}

#[test]
fn with_xml_header() {
    let multi: Multisample = quick_xml::de::from_str(include_str!("data/with_header.xml")).unwrap();

    assert_eq!(multi.name(), "Test");
}

#[test]
fn just_groups() {
    let multi: Multisample = quick_xml::de::from_str(include_str!("data/groups.xml")).unwrap();

    assert_eq!(
        multi.groups(),
        [
            Group::default().with_name("First"),
            Group::default().with_name("Second")
        ]
    );
}

#[test]
fn more_detailed() {
    let multi: Multisample = quick_xml::de::from_str(include_str!("data/details.xml")).unwrap();

    assert_eq!(multi.name(), "1980s FM Synth");
    assert_eq!(multi.generator(), "multirec");
    assert_eq!(multi.category(), "Pad");
    assert_eq!(multi.creator(), "");
    assert_eq!(
        multi.description(),
        "Very large plastic synthesizer playing a pad sound"
    );
    assert_eq!(multi.keywords(), ["Pad", "Synth", "Glassy", "Retro"]);
    assert_eq!(multi.groups(), []);
    assert_eq!(
        multi.samples(),
        [
            Sample::default().with_file(AsRef::<Path>::as_ref("C2.wav")),
            Sample::default().with_file(AsRef::<Path>::as_ref("F2.wav")),
            Sample::default().with_file(AsRef::<Path>::as_ref("A#2.wav")),
            Sample::default().with_file(AsRef::<Path>::as_ref("D#3.wav")),
        ]
    );
}