More work on mocking and unit testing
This commit is contained in:
@@ -44,7 +44,7 @@ impl Script for Acrobatics {
|
||||
mod tests {
|
||||
use super::*;
|
||||
use alloc::rc::Rc;
|
||||
use pkmn_lib_interface::app_interface::{Item, MockExecutingMove, MockItem, MockPokemon};
|
||||
use pkmn_lib_interface::app_interface::{MockExecutingMove, MockItem, MockPokemon};
|
||||
|
||||
fn mock_executing_move(has_held_item: bool) -> ExecutingMove {
|
||||
let mut mv = MockExecutingMove::new();
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
use alloc::boxed::Box;
|
||||
use core::any::Any;
|
||||
use core::mem::transmute;
|
||||
use pkmn_lib_interface::app_interface::{ExecutingMove, Pokemon, Statistic};
|
||||
@@ -39,3 +38,68 @@ impl Script for Acupressure {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use alloc::rc::Rc;
|
||||
use pkmn_lib_interface::app_interface::{
|
||||
MockBattle, MockBattleRandom, MockExecutingMove, MockHitData, MockItem, MockPokemon,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn fails_if_target_is_user() {
|
||||
let mut user = MockPokemon::new();
|
||||
user.expect_equals().return_const(true);
|
||||
let user = Rc::new(user);
|
||||
let u = user.clone();
|
||||
|
||||
let mut mv = MockExecutingMove::new();
|
||||
mv.expect_user().returning_st(move || user.clone());
|
||||
|
||||
let mut hit_data = MockHitData::new();
|
||||
hit_data.expect_fail().once();
|
||||
let hit_data = Rc::new(hit_data);
|
||||
mv.expect_get_hit_data()
|
||||
.returning_st(move |_, _| hit_data.clone());
|
||||
|
||||
let script = Acupressure::new();
|
||||
script.on_secondary_effect(Rc::new(mv), u, 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn increases_stat_by_two() {
|
||||
let mut user = MockPokemon::new();
|
||||
user.expect_equals().return_const(false);
|
||||
user.expect_battle().returning_st(move || {
|
||||
let mut battle = MockBattle::new();
|
||||
battle.expect_random().returning_st(move || {
|
||||
let mut random = MockBattleRandom::new();
|
||||
random.expect_get_between().returning_st(|low, high| {
|
||||
assert_eq!(1, low);
|
||||
assert_eq!(6, high);
|
||||
return 1;
|
||||
});
|
||||
Rc::new(random)
|
||||
});
|
||||
Some(Rc::new(battle))
|
||||
});
|
||||
user.expect_change_stat_boost()
|
||||
.once()
|
||||
.returning(|stat, amount, self_inflicted| {
|
||||
assert_eq!(Statistic::Attack, stat);
|
||||
assert_eq!(2, amount);
|
||||
assert_eq!(false, self_inflicted);
|
||||
true
|
||||
});
|
||||
|
||||
let user = Rc::new(user);
|
||||
let u = user.clone();
|
||||
|
||||
let mut mv = MockExecutingMove::new();
|
||||
mv.expect_user().returning_st(move || user.clone());
|
||||
|
||||
let script = Acupressure::new();
|
||||
script.on_secondary_effect(Rc::new(mv), u, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,8 +30,8 @@ impl Script for AuroraVeil {
|
||||
if target.battle().unwrap().has_weather(Hail::get_const_name()) {
|
||||
return mv.get_hit_data(&target, hit).fail();
|
||||
}
|
||||
let script = target
|
||||
.battle_side()
|
||||
let binding = target.battle_side();
|
||||
let script = binding
|
||||
.add_volatile(Box::new(AuroraVeilEffect::new()))
|
||||
.as_any()
|
||||
.downcast_ref::<AuroraVeilEffect>()
|
||||
|
||||
Reference in New Issue
Block a user