test: add generic tests for coverage

This commit is contained in:
2025-07-28 19:48:31 -05:00
parent 7e0ca4ff3d
commit 04cf8f217f
5 changed files with 1046 additions and 7 deletions

View File

@@ -152,3 +152,233 @@ impl Game {
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
use sdl2::keyboard::Keycode;
use sdl2::pixels::Color;
fn create_test_game() -> Game {
// Create a minimal test game without SDL dependencies
// This is a simplified version for testing basic logic
let map = Map::new(RAW_BOARD);
let pacman_start_pos = map.find_starting_position(0).unwrap();
let pacman_start_node = *map
.grid_to_node
.get(&glam::IVec2::new(pacman_start_pos.x as i32, pacman_start_pos.y as i32))
.expect("Pac-Man starting position not found in graph");
// Create a dummy atlas for testing
let mut mapper = std::collections::HashMap::new();
mapper.insert(
"pacman/up_a.png".to_string(),
crate::texture::sprite::MapperFrame {
x: 0,
y: 0,
width: 16,
height: 16,
},
);
mapper.insert(
"pacman/up_b.png".to_string(),
crate::texture::sprite::MapperFrame {
x: 16,
y: 0,
width: 16,
height: 16,
},
);
mapper.insert(
"pacman/down_a.png".to_string(),
crate::texture::sprite::MapperFrame {
x: 32,
y: 0,
width: 16,
height: 16,
},
);
mapper.insert(
"pacman/down_b.png".to_string(),
crate::texture::sprite::MapperFrame {
x: 48,
y: 0,
width: 16,
height: 16,
},
);
mapper.insert(
"pacman/left_a.png".to_string(),
crate::texture::sprite::MapperFrame {
x: 64,
y: 0,
width: 16,
height: 16,
},
);
mapper.insert(
"pacman/left_b.png".to_string(),
crate::texture::sprite::MapperFrame {
x: 80,
y: 0,
width: 16,
height: 16,
},
);
mapper.insert(
"pacman/right_a.png".to_string(),
crate::texture::sprite::MapperFrame {
x: 96,
y: 0,
width: 16,
height: 16,
},
);
mapper.insert(
"pacman/right_b.png".to_string(),
crate::texture::sprite::MapperFrame {
x: 112,
y: 0,
width: 16,
height: 16,
},
);
mapper.insert(
"pacman/full.png".to_string(),
crate::texture::sprite::MapperFrame {
x: 128,
y: 0,
width: 16,
height: 16,
},
);
mapper.insert(
"maze/full.png".to_string(),
crate::texture::sprite::MapperFrame {
x: 0,
y: 0,
width: 224,
height: 248,
},
);
let atlas_mapper = crate::texture::sprite::AtlasMapper { frames: mapper };
let dummy_texture = unsafe { std::mem::zeroed() };
let atlas = crate::texture::sprite::SpriteAtlas::new(dummy_texture, atlas_mapper);
let mut map_texture = crate::texture::sprite::SpriteAtlas::get_tile(&atlas, "maze/full.png").unwrap();
map_texture.color = Some(Color::RGB(0x20, 0x20, 0xf9));
let text_texture = TextTexture::new(1.0);
let audio = Audio::new();
let pacman = Pacman::new(&map.graph, pacman_start_node, &atlas);
Game {
score: 0,
map,
pacman,
debug_mode: false,
map_texture,
text_texture,
audio,
atlas,
}
}
#[test]
fn test_game_keyboard_event_direction_keys() {
let mut game = create_test_game();
// Test that direction keys are handled
game.keyboard_event(Keycode::Up);
game.keyboard_event(Keycode::Down);
game.keyboard_event(Keycode::Left);
game.keyboard_event(Keycode::Right);
// Should not panic
assert!(true);
}
#[test]
fn test_game_keyboard_event_mute_toggle() {
let mut game = create_test_game();
let initial_mute_state = game.audio.is_muted();
// Toggle mute
game.keyboard_event(Keycode::M);
// Mute state should have changed
assert_eq!(game.audio.is_muted(), !initial_mute_state);
// Toggle again
game.keyboard_event(Keycode::M);
// Should be back to original state
assert_eq!(game.audio.is_muted(), initial_mute_state);
}
#[test]
fn test_game_tick() {
let mut game = create_test_game();
// Test that tick doesn't panic
game.tick(0.016); // 60 FPS frame time
assert!(true);
}
#[test]
fn test_game_initial_state() {
let game = create_test_game();
assert_eq!(game.score, 0);
assert!(!game.debug_mode);
assert!(game.map.graph.node_count() > 0);
}
#[test]
fn test_game_debug_mode_toggle() {
let mut game = create_test_game();
assert!(!game.debug_mode);
// Toggle debug mode (this would normally be done via Space key in the app)
game.debug_mode = !game.debug_mode;
assert!(game.debug_mode);
}
#[test]
fn test_game_score_increment() {
let mut game = create_test_game();
let initial_score = game.score;
game.score += 10;
assert_eq!(game.score, initial_score + 10);
}
#[test]
fn test_game_pacman_initialization() {
let game = create_test_game();
// Check that Pac-Man was initialized
assert_eq!(game.pacman.traverser.direction, crate::entity::direction::Direction::Left);
// The traverser might start moving immediately, so we just check the direction
assert_eq!(game.pacman.traverser.direction, crate::entity::direction::Direction::Left);
}
#[test]
fn test_game_map_initialization() {
let game = create_test_game();
// Check that map was initialized
assert!(game.map.graph.node_count() > 0);
assert!(!game.map.grid_to_node.is_empty());
// Check that Pac-Man's starting position exists
let pacman_pos = game.map.find_starting_position(0);
assert!(pacman_pos.is_some());
}
}