#[macro_use] mod testutil; use msi::{Package, PackageType}; use std::io::{Cursor, ErrorKind, Read, Write}; // ========================================================================= // #[test] fn invalid_stream_name() { let cursor = Cursor::new(Vec::new()); let mut package = Package::create(PackageType::Installer, cursor).unwrap(); assert_error!( package.read_stream("\u{4840}Foo"), ErrorKind::InvalidInput, "\"\u{4840}Foo\" is not a valid stream name" ); assert_error!( package.write_stream("\u{4840}Bar"), ErrorKind::InvalidInput, "\"\u{4840}Bar\" is not a valid stream name" ); assert_error!( package.remove_stream("\u{4840}Baz"), ErrorKind::InvalidInput, "\"\u{4840}Baz\" is not a valid stream name" ); } #[test] fn nonexistent_stream_name() { let cursor = Cursor::new(Vec::new()); let mut package = Package::create(PackageType::Installer, cursor).unwrap(); assert_error!( package.read_stream("Foo"), ErrorKind::NotFound, "Stream \"Foo\" does not exist" ); assert_error!( package.remove_stream("Baz"), ErrorKind::NotFound, "Stream \"Baz\" does not exist" ); } #[test] fn create_and_remove_stream() { let cursor = Cursor::new(Vec::new()); let mut package = Package::create(PackageType::Installer, cursor).unwrap(); assert!(!package.has_stream("Hello")); assert_eq!( package.streams().collect::>(), Vec::::new() ); package.write_stream("Hello").unwrap().write_all(b"Hi there!").unwrap(); assert!(package.has_stream("Hello")); assert_eq!( package.streams().collect::>(), vec!["Hello".to_string()] ); let cursor = package.into_inner().unwrap(); let mut package = Package::open(cursor).unwrap(); assert!(package.has_stream("Hello")); assert_eq!( package.streams().collect::>(), vec!["Hello".to_string()] ); let mut data = Vec::::new(); package.read_stream("Hello").unwrap().read_to_end(&mut data).unwrap(); assert_eq!(data.as_slice(), b"Hi there!"); package.remove_stream("Hello").unwrap(); assert!(!package.has_stream("Hello")); assert_eq!( package.streams().collect::>(), Vec::::new() ); let cursor = package.into_inner().unwrap(); let package = Package::open(cursor).unwrap(); assert!(!package.has_stream("Hello")); assert_eq!( package.streams().collect::>(), Vec::::new() ); } // ========================================================================= //