use anyhow::Result;
use psd::{DescriptorField, ImageResource, Psd};
use std::path::PathBuf;
#[test]
fn name_of_slices_resource_group() {
let fixtures = ["1.psd", "12.psd", "123.psd", "1234.psd"];
for fixture in fixtures.iter() {
let file = fixtures_dir().join(fixture);
let expected_slices_name = file.file_stem().unwrap().to_str().unwrap();
let psd = std::fs::read(&file).unwrap();
let psd = Psd::from_bytes(&psd).unwrap();
match &psd.resources()[0] {
ImageResource::Slices(slices) => {
assert_eq!(slices.name().as_str(), expected_slices_name);
}
};
}
}
fn fixtures_dir() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/slices-resource")
}
#[test]
fn slices_v7_8() -> Result<()> {
let psd = include_bytes!("./fixtures/slices-v8.psd");
let psd = Psd::from_bytes(psd)?;
match &psd.resources()[0] {
ImageResource::Slices(slices) => {
assert_eq!(slices.name().as_str(), "\u{0}");
}
};
let descriptors = match &psd.resources()[0] {
ImageResource::Slices(s) => s.descriptors(),
};
let descriptor = descriptors.get(0).unwrap();
let bounds = descriptor.fields.get("bounds").unwrap();
if let DescriptorField::Descriptor(d) = bounds {
match d.fields.get("Rght").unwrap() {
DescriptorField::Integer(v) => assert_eq!(*v, 1),
_ => panic!("expected integer"),
}
match d.fields.get("Btom").unwrap() {
DescriptorField::Integer(v) => assert_eq!(*v, 1),
_ => panic!("expected integer"),
}
} else {
panic!("expected descriptor");
}
Ok(())
}