22#include " gmock/gmock.h"
33#include " state/actor/soldier.h"
44#include " state/actor/villager.h"
5- #include " state/gold_manager/gold_manager .h"
5+ #include " state/mocks/gold_manager_mock .h"
66#include " gtest/gtest.h"
77
88using namespace std ;
@@ -20,13 +20,7 @@ class SoldierTest : public Test {
2020 int64_t element_size = 10 ;
2121 unique_ptr<Map> map;
2222
23- array<int64_t , 2 > player_gold;
24- int64_t soldier_kill_reward_gold;
25- int64_t villager_kill_reward_gold;
26- int64_t factory_kill_reward_gold;
27- int64_t max_gold;
28-
29- unique_ptr<GoldManager> gold_manager;
23+ unique_ptr<GoldManagerMock> gold_manager;
3024 unique_ptr<PathPlanner> path_planner;
3125 unique_ptr<Soldier> soldier;
3226
@@ -41,23 +35,7 @@ class SoldierTest : public Test {
4135 }};
4236
4337 map = make_unique<Map>(map_matrix, map_size, element_size);
44-
45- for (int i = 0 ; i < (int )PlayerId::PLAYER_COUNT; ++i) {
46- player_gold[i] = 5000 ; // Start balance
47- }
48-
49- this ->max_gold = 10000 ;
50- this ->soldier_kill_reward_gold = SOLDIER_KILL_REWARD_AMOUNT;
51- this ->villager_kill_reward_gold = VILLAGER_KILL_REWARD_AMOUNT;
52- this ->factory_kill_reward_gold = FACTORY_KILL_REWARD_AMOUNT;
53-
54- std::vector<std::unique_ptr<GoldMine>> gold_mines;
55-
56- this ->gold_manager = make_unique<GoldManager>(
57- player_gold, max_gold, soldier_kill_reward_gold,
58- villager_kill_reward_gold, factory_kill_reward_gold, VILLAGER_COST,
59- SOLDIER_COST, FACTORY_COST, MINING_REWARD, std::move (gold_mines));
60- this ->path_planner = make_unique<PathPlanner>(map.get ());
38+ gold_manager = make_unique<GoldManagerMock>();
6139
6240 this ->soldier =
6341 make_unique<Soldier>(1 , PlayerId::PLAYER1, ActorType::SOLDIER, 100 ,
@@ -120,8 +98,13 @@ TEST_F(SoldierTest, MoveToDeadState) {
12098 DoubleVec2D (15 , 15 ), gold_manager.get (), path_planner.get (),
12199 10 , 10 , attack_damage);
122100
101+ // Making soldier attack the other soldier
123102 this ->soldier ->Attack (target_soldier);
124103
104+ // Expect calls to GoldManager for killing unit
105+ EXPECT_CALL (*gold_manager, RewardKill (target_soldier));
106+
107+ // Soldier continuously attacking the other soldier until he dies
125108 while (target_soldier->GetHp () != 0 ) {
126109 this ->soldier ->Update ();
127110 target_soldier->Update ();
@@ -135,7 +118,7 @@ TEST_F(SoldierTest, MoveToDeadState) {
135118TEST_F (SoldierTest, SoldierKillReward) {
136119 int64_t initial_hp = 100 ;
137120 int64_t attack_damage = 10 ;
138- int64_t initial_gold = player_gold[ 0 ] ;
121+ int64_t initial_gold = 100 ;
139122
140123 auto *target_soldier =
141124 new Soldier (2 , PlayerId::PLAYER2, ActorType::SOLDIER, initial_hp, 100 ,
@@ -144,28 +127,31 @@ TEST_F(SoldierTest, SoldierKillReward) {
144127
145128 this ->soldier ->Attack (target_soldier);
146129
130+ // Expecting call to gold manager to reward kill of soldier
131+ EXPECT_CALL (*gold_manager, RewardKill (target_soldier));
132+
147133 while (target_soldier->GetHp () != 0 ) {
148134 this ->soldier ->Update ();
149135 target_soldier->Update ();
150136 this ->soldier ->LateUpdate ();
151137 target_soldier->LateUpdate ();
152138 }
153-
154- ASSERT_EQ (gold_manager->GetBalance (PlayerId::PLAYER1),
155- (initial_gold + soldier_kill_reward_gold));
156139}
157140
158141TEST_F (SoldierTest, PursuitAndKill) {
159142 int64_t initial_hp = 100 ;
160143 int64_t attack_damage = 10 ;
161-
162144 auto *target_soldier =
163145 new Soldier (2 , PlayerId::PLAYER2, ActorType::SOLDIER, initial_hp, 100 ,
164- DoubleVec2D (10 , 40 ), gold_manager.get (), path_planner.get (),
146+ DoubleVec2D (15 , 15 ), gold_manager.get (), path_planner.get (),
165147 10 , 10 , attack_damage);
166148
167149 this ->soldier ->SetAttackTarget (target_soldier);
168150
151+ // Expecting call to gold manager to reward the soldier for killing target
152+ // soldier
153+ EXPECT_CALL (*gold_manager, RewardKill (target_soldier));
154+
169155 while (target_soldier->GetHp () != 0 ) {
170156 this ->soldier ->Update ();
171157 target_soldier->Update ();
@@ -177,13 +163,20 @@ TEST_F(SoldierTest, PursuitAndKill) {
177163}
178164
179165TEST_F (SoldierTest, SimultaneousKill) {
180- auto target_soldier = make_unique<Soldier>(
181- 2 , PlayerId::PLAYER2, ActorType::SOLDIER, 100 , 100 , DoubleVec2D (35 , 45 ),
182- gold_manager.get (), path_planner.get (), 10 , 10 , 10 );
166+ auto *target_soldier =
167+ new Soldier (2 , PlayerId::PLAYER2, ActorType::SOLDIER, 100 , 100 ,
168+ DoubleVec2D (15 , 15 ), gold_manager.get (), path_planner.get (),
169+ 10 , 10 , 10 );
183170
184- soldier->Attack (target_soldier.get ());
171+ // Both soldiers attacking each other
172+ soldier->Attack (target_soldier);
185173 target_soldier->Attack (soldier.get ());
186174
175+
176+ // Expecting call to gold manager to reward gold to each soldier for killing the other
177+ EXPECT_CALL (*gold_manager, RewardKill (target_soldier));
178+ EXPECT_CALL (*gold_manager, RewardKill (soldier.get ()));
179+
187180 while (target_soldier->GetHp () != 0 ) {
188181 this ->soldier ->Update ();
189182 target_soldier->Update ();
0 commit comments