use std::fs::File;
use std::io::{BufReader, Seek};
use wow_wmo::chunk_discovery::discover_chunks;
use wow_wmo::group_parser::parse_group_file;
#[test]
#[ignore = "Requires WMO test files not available in CI"]
fn test_parse_classic_group_file() {
let test_file = "tests/data/vanilla/World/wmo/Azeroth/Buildings/Stormwind/Stormwind_000.wmo";
let file =
File::open(test_file).unwrap_or_else(|_| panic!("Test file not found: {}", test_file));
let mut reader = BufReader::new(file);
let discovery = discover_chunks(&mut reader).expect("Failed to discover chunks");
reader
.seek(std::io::SeekFrom::Start(0))
.expect("Failed to seek");
let group = parse_group_file(&mut reader, discovery).expect("Failed to parse group file");
assert_eq!(group.version, 17, "Expected version 17 for Classic");
}
#[test]
#[ignore = "Requires WMO test files not available in CI"]
fn test_parse_multiple_group_files() {
let test_files = vec![
"tests/data/vanilla/World/wmo/Dungeon/KL_DireMaul/KL_Diremaul_Instance_030.wmo",
"tests/data/vanilla/World/wmo/KhazModan/Cities/Ironforge/ironforge_091.wmo",
"tests/data/wotlk/World/wmo/Dungeon/Valgarde/Valgarde_003.wmo",
];
for test_file in test_files {
let file =
File::open(test_file).unwrap_or_else(|_| panic!("Test file not found: {}", test_file));
let mut reader = BufReader::new(file);
let discovery = discover_chunks(&mut reader).expect("Failed to discover chunks");
reader
.seek(std::io::SeekFrom::Start(0))
.expect("Failed to seek");
let group = parse_group_file(&mut reader, discovery)
.unwrap_or_else(|e| panic!("Failed to parse {}: {:?}", test_file, e));
assert_eq!(group.version, 17, "Expected version 17");
}
}
#[test]
fn test_parse_group_header() {
use binrw::io::Cursor;
let mut data = Vec::new();
data.extend_from_slice(b"REVM"); data.extend_from_slice(&4u32.to_le_bytes()); data.extend_from_slice(&17u32.to_le_bytes());
data.extend_from_slice(b"PGOM"); data.extend_from_slice(&68u32.to_le_bytes());
data.extend_from_slice(&5u32.to_le_bytes()); data.extend_from_slice(&0u32.to_le_bytes()); data.extend_from_slice(&0u32.to_le_bytes()); data.extend_from_slice(&[0u8; 24]); data.extend_from_slice(&0u16.to_le_bytes()); data.extend_from_slice(&0u16.to_le_bytes()); data.extend_from_slice(&0u16.to_le_bytes()); data.extend_from_slice(&0u16.to_le_bytes()); data.extend_from_slice(&0u16.to_le_bytes()); data.extend_from_slice(&0u16.to_le_bytes()); data.extend_from_slice(&[0u8; 4]); data.extend_from_slice(&0u32.to_le_bytes()); data.extend_from_slice(&0u32.to_le_bytes()); data.extend_from_slice(&0u32.to_le_bytes()); data.extend_from_slice(&0i16.to_le_bytes()); data.extend_from_slice(&0i16.to_le_bytes());
let mut cursor = Cursor::new(&data);
let discovery = discover_chunks(&mut cursor).expect("Failed to discover chunks");
cursor
.seek(std::io::SeekFrom::Start(0))
.expect("Failed to seek");
let group = parse_group_file(&mut cursor, discovery).expect("Failed to parse group");
assert_eq!(group.version, 17);
assert_eq!(group.group_name_index, 5); assert_eq!(group.n_triangles, 0); assert_eq!(group.n_vertices, 0); }