@@ -139,6 +139,167 @@ TEST(VictoryPointCard){
139139 testVictoryPointCard (test_player, false );
140140}
141141
142+ void testMonopolyCard (Player& test_player, bool correct_result, int resource_type, int expected_gain){
143+ int prevCard = test_player.getMonopolyCards ();int prevReso = -1 ;
144+ try {
145+ prevReso = test_player.getResource (resource_type);
146+ }catch (std::runtime_error & e){
147+ CHECK (resource_type >= 5 );
148+ return ;
149+ }
150+
151+ CHECK (test_player.playMonopoly (resource_type) == correct_result);
152+ if (correct_result){
153+ CHECK (prevCard == test_player.getMonopolyCards ()+1 );
154+ CHECK (prevReso == test_player.getResource (resource_type)-expected_gain);
155+ }else {
156+ CHECK (prevCard == test_player.getMonopolyCards ());
157+ CHECK (prevReso == test_player.getResource (resource_type));
158+ }
159+
160+ }
161+
162+
163+ TEST (MonopolyCard){
164+ GameBoard test_board ({" tester1" , " tester2" , " tester3" });
165+ Player& test_player1 = test_board.getPlayer (0 );
166+ Player& test_player2 = test_board.getPlayer (1 );
167+ Player& test_player3 = test_board.getPlayer (2 );
168+
169+ std::unique_ptr<DevelopmentCard> test_card = std::unique_ptr<DevelopmentCard>(new MonopolyCard ());
170+
171+ test_player1.addOre (3 );
172+ test_player1.addWheat (3 );
173+ test_player1.addWool (3 );
174+ test_player1.buyCard (test_card);
175+ test_player1.buyCard (test_card);
176+ test_player1.buyCard (test_card);
177+
178+ testMonopolyCard (test_player1, true , ORE_INDEX, 0 );
179+
180+ test_player2.addWool (7 );
181+ test_player3.addWool (28 );
182+ testMonopolyCard (test_player1, true , WOOL_INDEX, 35 );
183+
184+ test_player2.addWood (5 );
185+ test_player3.addOre (10 );
186+ testMonopolyCard (test_player1, false , 300 , 0 );
187+ testMonopolyCard (test_player1, true , WOOD_INDEX, 5 );
188+
189+ testMonopolyCard (test_player1, false , WHEAT_INDEX, 0 );
190+ }
191+
192+
193+ void testYearOfPlenty (Player& test_player, bool correct_result, int resource_type){
194+ int prevCard = test_player.getYearOfPlentyCards ();
195+ int prevReso = -1 ;
196+ try {
197+ prevReso = test_player.getResource (resource_type);
198+ }catch (std::runtime_error & e){
199+ CHECK (resource_type >= 5 );
200+ return ;
201+ }
202+
203+ CHECK (test_player.playYearOfPlenty (resource_type) == correct_result);
204+ if (correct_result){
205+ CHECK (prevCard == test_player.getYearOfPlentyCards ()+1 );
206+ CHECK (prevReso == test_player.getResource (resource_type)-2 );
207+ }else {
208+ CHECK (prevCard == test_player.getYearOfPlentyCards ());
209+ CHECK (prevReso == test_player.getResource (resource_type));
210+ }
211+
212+
213+ }
214+
215+ TEST (YearOfPlentyCard){
216+ GameBoard test_board ({" tester1" });
217+ Player& test_player = test_board.getPlayer (0 );
218+
219+ std::unique_ptr<DevelopmentCard> test_card = std::unique_ptr<YearOfPlentyCard>(new YearOfPlentyCard ());
220+
221+ test_player.addOre (2 );
222+ test_player.addWheat (2 );
223+ test_player.addWool (2 );
224+ test_player.buyCard (test_card);
225+ test_player.buyCard (test_card);
226+
227+ testYearOfPlenty (test_player, true , ORE_INDEX);
228+ testYearOfPlenty (test_player, false , 300 );
229+ testYearOfPlenty (test_player, true , WOOD_INDEX);
230+ testYearOfPlenty (test_player, false , WOOL_INDEX);
231+ }
232+
233+
234+ int getResourceSum (Player& player){
235+ int sum = 0 ;
236+ for (int i = 0 ; i < 5 ; i++){
237+ sum += player.getResource (i);
238+ }
239+ return sum;
240+ }
241+
242+ void testKnightCard (Player& test_player, bool correct_result, GameBoard& test_board, Coordinate newLocation, Player& opponent, int gain_expected){
243+ Coordinate prevRobber = test_board.getRobber ();
244+ int prevArmy = test_player.getArmySize ();
245+ int prevCards = test_player.getKnightCards ();
246+ int player_prevResourceSum = getResourceSum (test_player);
247+ int opponent_prevResourceSum = getResourceSum (opponent);
248+
249+ std::cout << test_player.getName () << " | NL:(" << newLocation.first << " , " << newLocation.second << " ) O:" << opponent.getName () << " \n " ;
250+
251+ CHECK (test_player.playKnight (newLocation, opponent) == correct_result);
252+ if (correct_result){
253+ CHECK (newLocation == test_board.getRobber ());
254+ CHECK (prevArmy+1 == test_player.getArmySize ());
255+ CHECK (prevCards-1 == test_player.getKnightCards ());
256+ CHECK (player_prevResourceSum+gain_expected == getResourceSum (test_player));
257+ CHECK (opponent_prevResourceSum-gain_expected == getResourceSum (opponent));
258+ }else {
259+ CHECK (prevRobber == test_board.getRobber ());
260+ CHECK (prevArmy == test_player.getArmySize ());
261+ CHECK (prevCards == test_player.getKnightCards ());
262+ CHECK (player_prevResourceSum == getResourceSum (test_player));
263+ CHECK (opponent_prevResourceSum == getResourceSum (opponent));
264+ }
265+
266+
267+ }
268+
269+ TEST (KnightCard){
270+ GameBoard test_board ({" tester1" , " tester2" , " tester3" });
271+ Player& test_player1 = test_board.getPlayer (0 );
272+ Player& test_player2 = test_board.getPlayer (1 );
273+ Player& test_player3 = test_board.getPlayer (2 );
274+
275+ std::unique_ptr<DevelopmentCard> test_card = std::unique_ptr<DevelopmentCard>(new KnightCard ());
276+
277+ test_player1.addOre (3 );
278+ test_player1.addWheat (3 );
279+ test_player1.addWool (3 );
280+ test_player1.buyCard (test_card);
281+ test_player1.buyCard (test_card);
282+ test_player1.buyCard (test_card);
283+
284+ test_board.moveRobber (Coordinate (0 ,1 ));
285+
286+ testKnightCard (test_player1, false , test_board, Coordinate (0 ,4 ), test_player2, 0 );
287+ /* *DOES NOT WORK BECAUSE getNeighboringCorners() does not work
288+ test_player2.addWood(1);
289+ test_board.PlaceSettlement(Coordinate(0,3), test_player2);
290+ testKnightCard(test_player1, true, test_board, Coordinate(0,4), test_player2, 1);
291+
292+ test_player3.addWood(1);
293+ test_player3.addOre(1);
294+ test_board.PlaceSettlement(Coordinate(0,0), test_player3);
295+ testKnightCard(test_player1, true, test_board, Coordinate(0,1), test_player3, 1);
296+
297+ testKnightCard(test_player1, true, test_board, Coordinate(0,4), test_player2, 0);
298+ **/
299+
300+ testKnightCard (test_player1, false , test_board, Coordinate (0 ,4 ), test_player3, 0 );
301+ }
302+
142303
143304
144305
0 commit comments