From 264fac4b4e93dff0ea0c89b3f0c3fb3bffd41843 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Sun, 23 Mar 2025 16:45:52 -0400 Subject: [PATCH] Start writing tests for ItemInfo and ContainerInfo IPC --- resources/tests/container_info.bin | Bin 0 -> 16 bytes resources/tests/item_info.bin | Bin 0 -> 64 bytes resources/tests/tiny_mandragora.bin | Bin 0 -> 648 bytes src/world/ipc/container_info.rs | 35 +++++++++++++++++ src/world/ipc/item_info.rs | 59 ++++++++++++++++++++++++++++ src/world/ipc/mod.rs | 6 +++ 6 files changed, 100 insertions(+) create mode 100644 resources/tests/container_info.bin create mode 100644 resources/tests/item_info.bin create mode 100644 resources/tests/tiny_mandragora.bin create mode 100644 src/world/ipc/container_info.rs create mode 100644 src/world/ipc/item_info.rs diff --git a/resources/tests/container_info.bin b/resources/tests/container_info.bin new file mode 100644 index 0000000000000000000000000000000000000000..5d1d9ff675940dee24f41c1d2a660147a35559d4 GIT binary patch literal 16 NcmZQ%fB;4)4FCWr00RI3 literal 0 HcmV?d00001 diff --git a/resources/tests/item_info.bin b/resources/tests/item_info.bin new file mode 100644 index 0000000000000000000000000000000000000000..905a1df40487a9966d58f765e518bb0ca6ada4ba GIT binary patch literal 64 ccmZQ!fPfdw+zgCBrk5a808SZ{!kJhY09y+I`~Uy| literal 0 HcmV?d00001 diff --git a/resources/tests/tiny_mandragora.bin b/resources/tests/tiny_mandragora.bin new file mode 100644 index 0000000000000000000000000000000000000000..980ff30877a8525d2727067f33cfc6b9b27deb0e GIT binary patch literal 648 zcmZQzfB;4YMivGUF#7>ih$yNIsA?)B1B2jqYh?8gfSd=>Kmvr3fhJ=`EsW2{$iT$P zz`z2;qhJ6+VD;~pPL)10o%GnO50hv8RI;q?ic+TJ9k> literal 0 HcmV?d00001 diff --git a/src/world/ipc/container_info.rs b/src/world/ipc/container_info.rs new file mode 100644 index 0000000..c024b3a --- /dev/null +++ b/src/world/ipc/container_info.rs @@ -0,0 +1,35 @@ +use binrw::binrw; + +#[binrw] +#[brw(little)] +#[derive(Debug, Clone, Default)] +pub struct ContainerInfo { + pub sequence: u32, + pub num_items: u32, + pub container_id: u32, + pub start_or_finish: u32, +} + +#[cfg(test)] +mod tests { + use std::{fs::read, io::Cursor, path::PathBuf}; + + use binrw::BinRead; + + use super::*; + + #[test] + fn read_containerinfo() { + let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + d.push("resources/tests/container_info.bin"); + + let buffer = read(d).unwrap(); + let mut buffer = Cursor::new(&buffer); + + let container_info = ContainerInfo::read_le(&mut buffer).unwrap(); + assert_eq!(container_info.sequence, 1); + assert_eq!(container_info.num_items, 0); + assert_eq!(container_info.container_id, 1); + assert_eq!(container_info.start_or_finish, 0); + } +} diff --git a/src/world/ipc/item_info.rs b/src/world/ipc/item_info.rs new file mode 100644 index 0000000..07952e7 --- /dev/null +++ b/src/world/ipc/item_info.rs @@ -0,0 +1,59 @@ +use binrw::binrw; + +#[binrw] +#[brw(little)] +#[derive(Debug, Clone, Default)] +pub struct ItemInfo { + pub sequence: u32, + pub unk1: u32, + pub container_id: u16, + pub slot: u16, + pub quantity: u32, + pub catalog_id: u32, + pub reserved_flag: u32, + pub signature_id: u64, + pub hq_flag: u8, + pub unk2: u8, + pub condition: u16, + pub spirit_bond: u16, + pub stain: u16, + pub glamour_catalog_id: u32, + pub materia: [u16; 5], + #[brw(pad_before = 6)] + pub unk3: u32, +} + +#[cfg(test)] +mod tests { + use std::{fs::read, io::Cursor, path::PathBuf}; + + use binrw::BinRead; + + use super::*; + + #[test] + fn read_iteminfo() { + let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + d.push("resources/tests/item_info.bin"); + + let buffer = read(d).unwrap(); + let mut buffer = Cursor::new(&buffer); + + let item_info = ItemInfo::read_le(&mut buffer).unwrap(); + assert_eq!(item_info.sequence, 4); + assert_eq!(item_info.unk1, 0); + assert_eq!(item_info.container_id, 1000); + assert_eq!(item_info.slot, 11); + assert_eq!(item_info.quantity, 1); + assert_eq!(item_info.catalog_id, 4426); + assert_eq!(item_info.reserved_flag, 0); + assert_eq!(item_info.signature_id, 0); + assert_eq!(item_info.hq_flag, 0); + assert_eq!(item_info.unk2, 0); + assert_eq!(item_info.condition, 30000); + assert_eq!(item_info.spirit_bond, 0); + assert_eq!(item_info.stain, 0); + assert_eq!(item_info.glamour_catalog_id, 0); + assert_eq!(item_info.unk3, 0); + } +} diff --git a/src/world/ipc/mod.rs b/src/world/ipc/mod.rs index 7be01af..cadf530 100644 --- a/src/world/ipc/mod.rs +++ b/src/world/ipc/mod.rs @@ -47,6 +47,12 @@ pub use weather_change::WeatherChange; mod action_request; pub use action_request::ActionRequest; +mod container_info; +pub use container_info::ContainerInfo; + +mod item_info; +pub use item_info::ItemInfo; + use crate::common::Position; use crate::common::read_string; use crate::common::write_string;