use std::fs::File;
use std::io::{BufReader, Seek};
use wow_wmo::chunk_discovery::discover_chunks;
use wow_wmo::root_parser::parse_root_file;
#[test]
#[ignore = "Requires WMO test files not available in CI"]
fn test_parse_classic_root_file() {
let test_file = "tests/data/vanilla/World/wmo/Azeroth/Buildings/Stormwind/Stormwind.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 root = parse_root_file(&mut reader, discovery).expect("Failed to parse root file");
assert_eq!(root.version, 17, "Expected version 17 for Classic");
assert!(root.n_materials > 0, "Root file should have materials");
assert!(root.n_groups > 0, "Root file should have groups");
}
#[test]
#[ignore = "Requires WMO test files not available in CI"]
fn test_parse_wotlk_root_file() {
let test_file =
"tests/data/wotlk/World/wmo/Northrend/Dragonblight/NewHearthglen/NH_Cathedral.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 root = parse_root_file(&mut reader, discovery).expect("Failed to parse root file");
assert_eq!(root.version, 17, "Expected version 17 for WotLK");
assert!(root.n_materials > 0, "Should have materials count");
assert!(root.n_groups > 0, "Root file should have groups");
}
#[test]
fn test_parse_root_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"DHOM"); data.extend_from_slice(&64u32.to_le_bytes());
data.extend_from_slice(&1u32.to_le_bytes()); data.extend_from_slice(&2u32.to_le_bytes()); data.extend_from_slice(&3u32.to_le_bytes()); data.extend_from_slice(&4u32.to_le_bytes()); data.extend_from_slice(&5u32.to_le_bytes()); data.extend_from_slice(&6u32.to_le_bytes()); data.extend_from_slice(&7u32.to_le_bytes()); data.extend_from_slice(&[0u8; 36]);
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 root = parse_root_file(&mut cursor, discovery).expect("Failed to parse root");
assert_eq!(root.version, 17);
assert_eq!(root.n_materials, 1);
assert_eq!(root.n_groups, 2);
assert_eq!(root.n_portals, 3);
assert_eq!(root.n_lights, 4);
}