#[cfg(test)]
mod tests {
use std::path::Path;
use std::path::PathBuf;
use anyhow::Result;
use png2wasm4src::{build_sprite_modules_tree, Module};
#[test]
fn sprite_modules_tree() -> Result<()> {
let module = build_sprite_modules_tree(Path::new("tests/sprites"))?;
let expected = Module::new(
"sprites",
Vec::default(),
vec![
Module::new(
"characters",
vec![PathBuf::from("tests/sprites/characters/player.png")],
vec![
Module::new(
"npcs",
vec![
PathBuf::from("tests/sprites/characters/npcs/blacksmith.png"),
PathBuf::from("tests/sprites/characters/npcs/vendor.png"),
],
Vec::default(),
),
Module::new(
"bosses",
vec![
PathBuf::from("tests/sprites/characters/bosses/dragon.png"),
PathBuf::from("tests/sprites/characters/bosses/behemoth.png"),
],
Vec::default(),
),
],
),
Module::new(
"tiles",
vec![
PathBuf::from("tests/sprites/tiles/forest.png"),
PathBuf::from("tests/sprites/tiles/town.png"),
PathBuf::from("tests/sprites/tiles/desert.png"),
],
Vec::default(),
),
],
);
assert_eq!(module, expected);
Ok(())
}
#[test]
fn sprite_modules_tree_to_string() -> Result<()> {
let module = build_sprite_modules_tree(Path::new("tests/sprites"))?;
let module = module.parse()?;
let code = module.to_string();
let expected = "pub mod sprites {
pub mod characters {
pub const PLAYER_WIDTH: u32 = 4;
pub const PLAYER_HEIGHT: u32 = 4;
pub const PLAYER_FLAGS: u32 = 1; // BLIT_2BPP
pub const PLAYER: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
pub mod bosses {
pub const BEHEMOTH_WIDTH: u32 = 4;
pub const BEHEMOTH_HEIGHT: u32 = 4;
pub const BEHEMOTH_FLAGS: u32 = 1; // BLIT_2BPP
pub const BEHEMOTH: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
pub const DRAGON_WIDTH: u32 = 4;
pub const DRAGON_HEIGHT: u32 = 4;
pub const DRAGON_FLAGS: u32 = 1; // BLIT_2BPP
pub const DRAGON: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
}
pub mod npcs {
pub const BLACKSMITH_WIDTH: u32 = 4;
pub const BLACKSMITH_HEIGHT: u32 = 4;
pub const BLACKSMITH_FLAGS: u32 = 1; // BLIT_2BPP
pub const BLACKSMITH: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
pub const VENDOR_WIDTH: u32 = 4;
pub const VENDOR_HEIGHT: u32 = 4;
pub const VENDOR_FLAGS: u32 = 1; // BLIT_2BPP
pub const VENDOR: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
}
}
pub mod tiles {
pub const DESERT_WIDTH: u32 = 4;
pub const DESERT_HEIGHT: u32 = 4;
pub const DESERT_FLAGS: u32 = 1; // BLIT_2BPP
pub const DESERT: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
pub const FOREST_WIDTH: u32 = 4;
pub const FOREST_HEIGHT: u32 = 4;
pub const FOREST_FLAGS: u32 = 1; // BLIT_2BPP
pub const FOREST: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
pub const TOWN_WIDTH: u32 = 4;
pub const TOWN_HEIGHT: u32 = 4;
pub const TOWN_FLAGS: u32 = 1; // BLIT_2BPP
pub const TOWN: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
}
}
";
assert_eq!(code, expected);
Ok(())
}
#[test]
fn sprite_modules_list() -> Result<()> {
let module = build_sprite_modules_tree(Path::new("tests/sprites"))?;
let module = module.flatten();
let expected = Module::new(
"sprites",
vec![
PathBuf::from("tests/sprites/characters/player.png"),
PathBuf::from("tests/sprites/characters/npcs/blacksmith.png"),
PathBuf::from("tests/sprites/characters/npcs/vendor.png"),
PathBuf::from("tests/sprites/characters/bosses/dragon.png"),
PathBuf::from("tests/sprites/characters/bosses/behemoth.png"),
PathBuf::from("tests/sprites/tiles/forest.png"),
PathBuf::from("tests/sprites/tiles/town.png"),
PathBuf::from("tests/sprites/tiles/desert.png"),
],
Vec::default(),
);
assert_eq!(module, expected);
Ok(())
}
#[test]
fn sprite_modules_list_to_string() -> Result<()> {
let module = build_sprite_modules_tree(Path::new("tests/sprites"))?;
let module = module.flatten();
let module = module.parse()?;
let code = module.to_string();
let expected = "pub mod sprites {
pub const BEHEMOTH_WIDTH: u32 = 4;
pub const BEHEMOTH_HEIGHT: u32 = 4;
pub const BEHEMOTH_FLAGS: u32 = 1; // BLIT_2BPP
pub const BEHEMOTH: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
pub const BLACKSMITH_WIDTH: u32 = 4;
pub const BLACKSMITH_HEIGHT: u32 = 4;
pub const BLACKSMITH_FLAGS: u32 = 1; // BLIT_2BPP
pub const BLACKSMITH: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
pub const DESERT_WIDTH: u32 = 4;
pub const DESERT_HEIGHT: u32 = 4;
pub const DESERT_FLAGS: u32 = 1; // BLIT_2BPP
pub const DESERT: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
pub const DRAGON_WIDTH: u32 = 4;
pub const DRAGON_HEIGHT: u32 = 4;
pub const DRAGON_FLAGS: u32 = 1; // BLIT_2BPP
pub const DRAGON: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
pub const FOREST_WIDTH: u32 = 4;
pub const FOREST_HEIGHT: u32 = 4;
pub const FOREST_FLAGS: u32 = 1; // BLIT_2BPP
pub const FOREST: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
pub const PLAYER_WIDTH: u32 = 4;
pub const PLAYER_HEIGHT: u32 = 4;
pub const PLAYER_FLAGS: u32 = 1; // BLIT_2BPP
pub const PLAYER: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
pub const TOWN_WIDTH: u32 = 4;
pub const TOWN_HEIGHT: u32 = 4;
pub const TOWN_FLAGS: u32 = 1; // BLIT_2BPP
pub const TOWN: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
pub const VENDOR_WIDTH: u32 = 4;
pub const VENDOR_HEIGHT: u32 = 4;
pub const VENDOR_FLAGS: u32 = 1; // BLIT_2BPP
pub const VENDOR: [u8; 4] = [0x5a, 0x5a, 0xf0, 0xf0];
}
";
assert_eq!(code, expected);
Ok(())
}
}