use binrw::{BinRead, BinWrite}; use ireko::TaggedSerialization; use ireko::save_object::generic::GenericTaggedObject; use std::fs::read; use std::io::Cursor; use std::path::PathBuf; #[test] fn roundtrip_localprofile() { let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); d.push("tests/resources"); d.push("LocalProfile.bin"); let mut data = read(d).unwrap(); let mut cursor = Cursor::new(&mut data); let local_profile = TaggedSerialization::::read_le(&mut cursor).unwrap(); let tagged_object = &local_profile.objs; assert_eq!(tagged_object.size_in_bytes, 339); tagged_object.entry("SavedDataVersion").unwrap(); tagged_object.entry("bDemoVersion").unwrap(); // TODO: check values let mut new_data: Vec = Vec::new(); { let mut new_cursor = Cursor::new(&mut new_data); local_profile.write_le(&mut new_cursor).unwrap(); } // Ensure our written version is the same as retail assert_eq!(new_data.as_slice(), &data[..]); } #[test] fn roundtrip_slot() { let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); d.push("tests/resources"); d.push("Slot.bin"); let mut data = read(d).unwrap(); let mut cursor = Cursor::new(&mut data); let local_profile = TaggedSerialization::::read_le(&mut cursor).unwrap(); let tagged_object = &local_profile.objs; assert_eq!(tagged_object.size_in_bytes, 900); tagged_object.entry("PlayTime").unwrap(); tagged_object.entry("SlotInfo").unwrap(); // TODO: check values let mut new_data: Vec = Vec::new(); { let mut new_cursor = Cursor::new(&mut new_data); local_profile.write_le(&mut new_cursor).unwrap(); } // Ensure our written version is the same as retail assert_eq!(new_data.as_slice(), &data[..]); }