From 1708e020576c9edeafa71cb54f08178af1f78308 Mon Sep 17 00:00:00 2001 From: Mashy Date: Fri, 13 Dec 2019 10:24:54 +1000 Subject: [PATCH] intercept test --- core/src/game.rs | 50 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/core/src/game.rs b/core/src/game.rs index fac35282..a56271b2 100644 --- a/core/src/game.rs +++ b/core/src/game.rs @@ -1897,31 +1897,73 @@ mod tests { fn multi_reflect_test() { let mut game = create_2v2_test_game(); let player_id = game.players[0].id; + let target_player_id = game.players[1].id; + let source = game.players[0].constructs[0].id; let target = game.players[1].constructs[0].id; game.resolve(Cast::new(source, player_id, source, Skill::Reflect), vec![]); - game.resolve(Cast::new(target, player_id, target, Skill::Reflect), vec![]); + game.resolve(Cast::new(target, target_player_id, target, Skill::Reflect), vec![]); game.resolve(Cast::new(source, player_id, target, Skill::Blast), vec![]); assert!(game.players[0].constructs[0].is_ko() == false); assert!(game.players[1].constructs[0].is_ko() == false); } - #[test] + // refer fixme.md (infinite counterattack loop) + /*#[test] fn multi_counter_test() { let mut game = create_2v2_test_game(); let player_id = game.players[0].id; + let target_player_id = game.players[1].id; + let source = game.players[0].constructs[0].id; let target = game.players[1].constructs[0].id; game.resolve(Cast::new(source, player_id, source, Skill::Counter), vec![]); - game.resolve(Cast::new(target, player_id, target, Skill::Counter), vec![]); + game.resolve(Cast::new(target, target_player_id, target, Skill::Counter), vec![]); game.resolve(Cast::new(source, player_id, target, Skill::Attack), vec![]); assert!(game.players[0].constructs[0].is_ko() == false); assert!(game.players[1].constructs[0].is_ko() == false); - } + }*/ + + #[test] + fn intercept_test() { + + let mut game = create_2v2_test_game(); + + let player_id = game.players[0].id; + let other_player_id = game.players[1].id; + + let source = game.players[0].constructs[0].id; + let target = game.players[1].constructs[0].id; + let interceptor = game.players[1].constructs[1].id; + + // Cast intercept + game.resolve(Cast::new(interceptor, other_player_id, interceptor, Skill::Intercept), vec![]); + // Enemy casts skill on target which as a teammate intercepting + game.resolve(Cast::new(source, player_id, target, Skill::Attack), vec![]); + // Intercepting teammate attacks someone on same team + game.resolve(Cast::new(interceptor, other_player_id, target, Skill::Attack), vec![]); + + let last = game.resolutions.len() - 1; + let resolutions = &game.resolutions[last]; + + // There should be no damage events on the target + assert!(resolutions.iter().any(|r| match r.event { + Event::Damage { construct, colour, amount, mitigation, display: _ } => + construct == target && (amount > 0 || mitigation > 0) && colour == Colour::Red, + _ => false, + }) == false); + + // Should be damage events on the interceptor + assert!(resolutions.iter().any(|r| match r.event { + Event::Damage { construct, colour, amount, mitigation, display: _ } => + construct == interceptor && (amount > 0 || mitigation > 0) && colour == Colour::Red, + _ => false, + })); +} /* #[test]