respk 0.1.2

Manage resource files using a fast, custom open format designed especially for use in games.
Documentation
use error::Error;
use package::Package;
use std::io::Read;


#[test]
fn open() {
    Package::temporary().unwrap();
}

#[test]
fn write_resource() {
    let package = Package::temporary().unwrap();

    package.write("test", "test".as_bytes()).unwrap();
}

#[test]
fn write_then_read_resource() {
    let package = Package::temporary().unwrap();

    package.write("test", "test".as_bytes()).unwrap();
    let resource = package.read("test").unwrap();

    assert!(resource.contents() == "test".as_bytes());
}

#[test]
fn read_nonexistent_resource_fails() {
    let package = Package::temporary().unwrap();

    match package.read("test") {
        Err(Error::ResourceNotFound) => {},
        _ => panic!("expected Error::ResourceNotFound)"),
    }
}

#[test]
fn delete_existing_resource() {
    let package = Package::temporary().unwrap();

    package.write("test", "test".as_bytes()).unwrap();
    package.delete("test").unwrap();
}

#[test]
fn delete_nonexistent_resource_fails() {
    let package = Package::temporary().unwrap();

    assert!(package.delete("test") == Err(Error::ResourceNotFound));
}

#[test]
fn package_len() {
    let package = Package::temporary().unwrap();
    let len = 10;

    for i in 0..len {
        assert!(package.len() == i);
        package.write(format!("test-{}", i), "test".as_bytes()).unwrap();
        assert!(package.len() == i + 1);
    }

    package.delete("test-0").unwrap();

    assert!(package.len() == len - 1);
}

#[test]
fn stream_resource() {
    let package = Package::temporary().unwrap();

    package.write("test", "test".as_bytes()).unwrap();

    let mut bytes = Vec::new();
    package.stream("test")
        .unwrap()
        .read_to_end(&mut bytes)
        .unwrap();

    assert!(&bytes as &[u8] == "test".as_bytes());
}

#[test]
fn stream_nonexistent_resource_fails() {
    let package = Package::temporary().unwrap();
    let stream = package.stream("test");

    match stream {
        Err(Error::ResourceNotFound) => {},
        _ => panic!("expected Error::ResourceNotFound)"),
    }
}