use msi::{CodePage, Package, PackageType}; use std::io::{Cursor, Write}; use std::time::{Duration, SystemTime, UNIX_EPOCH}; use uuid::Uuid; // ========================================================================= // #[test] fn set_summary_info_properties() { let sat_2017_mar_18_at_18_46_36_gmt = UNIX_EPOCH + Duration::from_secs(1489862796); let uuid = Uuid::parse_str("9bb29b0d-edc7-4699-9607-a5e201d67ed1").unwrap(); let cursor = Cursor::new(Vec::new()); let mut package = Package::create(PackageType::Installer, cursor).unwrap(); { let summary_info = package.summary_info_mut(); summary_info.set_author("Jane Doe".to_string()); summary_info.set_comments("This app is the greatest!".to_string()); summary_info.set_creating_application("cargo-test".to_string()); summary_info.set_creation_time(sat_2017_mar_18_at_18_46_36_gmt); summary_info.set_subject("My Great App".to_string()); summary_info.set_title("Awesome Package".to_string()); summary_info.set_uuid(uuid); } let cursor = package.into_inner().unwrap(); let package = Package::open(cursor).unwrap(); let summary_info = package.summary_info(); assert_eq!(summary_info.author(), Some("Jane Doe")); assert_eq!(summary_info.comments(), Some("This app is the greatest!")); assert_eq!(summary_info.creating_application(), Some("cargo-test")); assert_eq!( summary_info.creation_time(), Some(sat_2017_mar_18_at_18_46_36_gmt) ); assert_eq!(summary_info.subject(), Some("My Great App")); assert_eq!(summary_info.title(), Some("Awesome Package")); assert_eq!(summary_info.uuid(), Some(uuid)); } #[test] fn set_summary_info_codepage() { let cursor = Cursor::new(Vec::new()); let mut package = Package::create(PackageType::Installer, cursor).unwrap(); package.summary_info_mut().set_codepage(CodePage::Utf8); package.summary_info_mut().set_author("Snowman=\u{2603}".to_string()); let cursor = package.into_inner().unwrap(); let mut package = Package::open(cursor).unwrap(); assert_eq!(package.summary_info().codepage(), CodePage::Utf8); assert_eq!(package.summary_info().author(), Some("Snowman=\u{2603}")); package.summary_info_mut().set_codepage(CodePage::Windows1252); let cursor = package.into_inner().unwrap(); let package = Package::open(cursor).unwrap(); assert_eq!(package.summary_info().codepage(), CodePage::Windows1252); assert_eq!(package.summary_info().author(), Some("Snowman=?")); } #[test] fn dropping_package_persists_changes() { let mut cursor = Cursor::new(Vec::new()); { let mut package = Package::create(PackageType::Installer, cursor.by_ref()).unwrap(); assert_eq!(package.summary_info().comments(), None); package.summary_info_mut().set_comments("Hello, world!".to_string()); } let package = Package::open(cursor).unwrap(); assert_eq!(package.summary_info().comments(), Some("Hello, world!")); } #[test] fn set_creation_time_to_now() { let timestamp = SystemTime::now(); let cursor = Cursor::new(Vec::new()); let mut package = Package::create(PackageType::Installer, cursor).unwrap(); package.summary_info_mut().set_creation_time_to_now(); let cursor = package.into_inner().unwrap(); let package = Package::open(cursor).unwrap(); assert!(package.summary_info().creation_time().is_some()); assert!(package.summary_info().creation_time().unwrap() > timestamp); } // ========================================================================= //