mirror of
https://github.com/Xevion/Pac-Man.git
synced 2025-12-15 14:12:29 -06:00
test: add generic tests for coverage
This commit is contained in:
230
src/game.rs
230
src/game.rs
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user