2025-02-24 00:30:16 -05:00
|
|
|
use binrw::{BinRead, BinWrite};
|
2025-03-02 16:26:38 -05:00
|
|
|
use ireko::{GenericTaggedObject, TaggedSerialization};
|
2025-02-23 17:04:26 -05:00
|
|
|
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);
|
|
|
|
|
2025-03-02 16:26:38 -05:00
|
|
|
let local_profile = TaggedSerialization::<GenericTaggedObject>::read_le(&mut cursor).unwrap();
|
|
|
|
let tagged_object = &local_profile.objs;
|
2025-02-23 17:04:26 -05:00
|
|
|
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<u8> = 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[..]);
|
|
|
|
}
|
2025-02-24 00:30:16 -05:00
|
|
|
|
|
|
|
#[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);
|
|
|
|
|
2025-03-02 16:26:38 -05:00
|
|
|
let local_profile = TaggedSerialization::<GenericTaggedObject>::read_le(&mut cursor).unwrap();
|
|
|
|
let tagged_object = &local_profile.objs;
|
2025-02-24 00:30:16 -05:00
|
|
|
assert_eq!(tagged_object.size_in_bytes, 900);
|
|
|
|
|
2025-02-25 19:54:48 -05:00
|
|
|
tagged_object.entry("PlayTime").unwrap();
|
|
|
|
tagged_object.entry("SlotInfo").unwrap();
|
2025-02-24 00:30:16 -05:00
|
|
|
|
|
|
|
// TODO: check values
|
|
|
|
|
|
|
|
let mut new_data: Vec<u8> = 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[..]);
|
|
|
|
}
|