Commit 1d00432f authored by Corentin Guillevic's avatar Corentin Guillevic
Browse files

Add some tests in PowerApplicatorTest ; Make some corrections

parent 25316305
......@@ -162,11 +162,70 @@ public class DatabaseStub implements NotAloneDatabase {
List<String> powersDescription = new ArrayList<>();
switch (cardName) {
case ANTRE:
powersDescription = Arrays.asList("Reprenez en main les cartes Lieu de votre défausse (mais pas celui-ci)", "Copiez le pouvoir d’un Lieu où le jeton Créature se trouve", "Reprenez en main une carte Lieu de votre défausse");
powersDescription = Arrays.asList("Reprenez en main les cartes Lieu de votre défausse (mais pas celui-ci)", "Copiez le pouvoir d’un Lieu où le jeton Créature se trouve");
break;
case JUNGLE:
powersDescription = Arrays.asList("Reprenez en main cette carte Lieu et 1 carte Lieu de votre défausse.");
break;
case RIVIERE:
powersDescription = Arrays.asList("Au prochain tour, jouez 2 cartes Lieu. Avant de révéler, choisissez-en une et reprenez l’autre en main.");
break;
case PLAGE:
powersDescription = Arrays.asList("Placer/Retirer le Pion Balise de la Plage. (Max 1 fois/tour). Si plusieurs Traqués explorent la Plage, l’un d’eux peut utiliser le pouvoir de la Plage et les autres peuvent récupérer 1 carte Lieu de leur défausse. Le pouvoir de la Plage est cumulable avec celui de l’Épave. ");
break;
case ROVER:
powersDescription = Arrays.asList("Prenez de la réserve une carte Lieu que vous ne possédez pas et ajoutez-le à votre main.");
break;
case MARAIS:
powersDescription = Arrays.asList("Reprenez en main cette carte Lieu et 2 cartes Lieu de votre défausse. Si le Marais est révélé grâce au Labyrinthe et que vous l’activez directement, ni le Marais ni le Labyrinthe ne sont repris en main.");
break;
case ABRI:
powersDescription = Arrays.asList("Piochez 2 carte Survie, gardez-en une et défaussez l’autre.");
break;
case EPAVE:
powersDescription = Arrays.asList("Avancez le pion Secours d'1 case (1 fois par tour, quel que soit le nombre de Traqués explorant l’Épave). Si plusieurs Traqués explorent l’Épave, l’un d’eux peut utiliser le pouvoir de l’Épave et les autres peuvent récupérer 1 carte Lieu de leur défausse. Le pouvoir de l’Épave est cumulable avec celui de la Plage.");
break;
case SOURCE:
powersDescription = Arrays.asList("Le Traqué de votre choix (vous ou un autre joueur) récupère 1 Volonté", "Piochez 1 carte Survie.");
break;
case ARTEFACT:
//None description list
break;
case NEXUS:
powersDescription = Arrays.asList("Copiez le pouvoir d'1 Lieu 2à 5. Avancez le pion Assimilation d'1 case supplémentaire si le jeton Créature attrape au moins 1 Traqué sur le Nexus.");
break;
case OASIS:
powersDescription = Arrays.asList("Reprenez en main cette carte Lieu plus 1 carte Lieu de votre défausse par Volonté qu’il vous manque, si possible.");
break;
case FJORD:
powersDescription = Arrays.asList("Lors du prochain tour : En Phase 1 : vous pouvez jouer une 2ème carte Lieu, face visible, de votre défausse, s’il n’y en a. En Phase 3 : résolvez 1 de ces Lieux. En Phase 4 : défaussez ces 2 cartes Lieu.");
break;
case DOME:
powersDescription = Arrays.asList("Déplacez le Bouclier d'1 Lieu vers le Dôme. Si le pion Boucler atteint le Dôme : reculer le pion Assimilation d'1 case et replacer le pion Bouclier sur le Lieu 1 (max 1x/tour).");
break;
case LABYRINTHE:
powersDescription = Arrays.asList("Révéler un Lieu : retourner, face visible, une des 5 cartes Lieu 6 à 10 de la planète Artemia et activer son pouvoir ou prendre 1 carte Lieu correspondante.", "Prendre de la réserve 1 carte Lieu déjà révélé.");
break;
case MANGROVE:
powersDescription = Arrays.asList("Échanger les cartes Lieu de sa main contre celles de sa défausse. Reprendre cette carte Lieu en main.");
break;
case ARCHIPEL:
powersDescription = Arrays.asList("Piocher 1 carte Survie. S’il vous reste moins de 3 cartes Lieu en main, le Traqué de votre choix récupère 1 Volonté.");
break;
case POLE:
powersDescription = Arrays.asList("Sacrifiez 1 Volonté (même si c’est le dernier), puis avancez le pion Secours de 2 cases. En Phase 4, replacer le pôle dans la réserve, qu’elle ait pu être activée ou non. Le Pôle ne peut être copié (que ce soit par le pouvoir d’un Lieu ou une carte Survie).");
break;
case FUNGI:
powersDescription = Arrays.asList("Piocher une carte Survie", "Placer jusqu’à 2 pions Volonté (si possible) sur les prochaines cases de la piste Secours. Quand le pion Secours atteint une de ces cases : le Traqué qui a le moins de Pion Volonté récupère le pion Volonté.");
break;
case PORTAIL:
powersDescription = Arrays.asList("Défausser le Portail pour jouer une autre carte Lieu de sa main et la résoudre. Le Portail téléporte le Traqué sur le second lieu joué, ce Traqué est donc susceptible de s’y faire attraper par un jeton Traque et/ou d’y être la cible d’une carte Traque. Le Portail est défaussé en phase 3 et la seconde carte Lieu en phase 4.");
break;
default:
}
return powersDescription;
List<String> powers = new ArrayList<>(Collections.singletonList("Reprenez en main une carte Lieu de votre défausse"));
powers.addAll(powersDescription);
return powers;
}
}
......@@ -120,6 +120,7 @@ public class Game implements GameInterface {
this.gameClientHandler = new GameClientHandler();
this.planet = planet;
this.board = board;
this.board.initializeScore(playerNumber);
this.room = room;
this.database = DatabaseFactory.getDatabase();
this.currentActivatePowers = new ArrayList<>();
......@@ -137,6 +138,7 @@ public class Game implements GameInterface {
this.gameClientHandler = gameClientHandler;
this.planet = planet;
this.board = board;
this.board.initializeScore(playerNumber);
this.room = room;
this.database = DatabaseFactory.getDatabase();
this.currentActivatePowers = new ArrayList<>();
......
......@@ -527,7 +527,10 @@ public class PowerApplicator {
|| game.getGameRoundVariables().getNumberMaxPlaceCardsGetByPlacePower() >= 2){
takeBackCardsFromDefausse(idPlayer, game, 1);
}
takeBackCardFromPlayedCard(idPlayer, game, JUNGLE);
Player player = game.getPlayer(idPlayer);
checkPlayerIsNotCreature(player);
Traque traque = (Traque) player;
takeBackCard(idPlayer, game, JUNGLE);
}
else {
takeBackCardsFromDefausse(idPlayer, game, 1);
......@@ -1536,6 +1539,29 @@ public class PowerApplicator {
traque.takeBackPlaceCard(cardsTakeBack);
}
/**
* Traque take back one card
* @param idPlayer The id of the traque
* @param game The game
* @param cardName The name of the card
*/
public static void takeBackCard(int idPlayer, Game game, CardName cardName) {
Player player = game.getPlayer(idPlayer);
checkPlayerIsNotCreature(player);
Traque traque = (Traque) player;
List<PlaceCard> placeCards = traque.getPlaceCardsPlayed();
placeCards.addAll(traque.getDefausse());
PlaceCard cardToTakeBack = null;
for(PlaceCard placeCard : placeCards) {
if(placeCard.getCardName().equals(cardName)) {
cardToTakeBack = placeCard;
}
}
if(cardToTakeBack != null) {
traque.takeBackPlaceCard(cardToTakeBack);
}
}
/**
* Traque take back one card from his played place card
* @param idPlayer The id of the traque
......
......@@ -61,6 +61,11 @@ public class Board {
}
}
@Override
public String toString() {
return "Score(Traque : " + getScoreTraque() + " ; Creature : " + getScoreCreature() + ")";
}
/***********************************
* Score methods
************************************/
......
......@@ -186,7 +186,7 @@ public class Traque extends Player {
* @return true is the operation is a succeed, else otherwise
*/
public boolean throwAwayPlaceCard(){
return hand.throwAwayPlaceCard(hand.getPlaceCardsPlayed());
return hand.throwAwayPlaceCard();
}
/**
......
......@@ -101,6 +101,14 @@ public class HandTraque {
return placeCards.playedCardIsEmpty();
}
/**
* Put the played cards in the "defausse"
* @return true is the operation is a succeed, else otherwise
*/
public boolean throwAwayPlaceCard(){
return placeCards.throwAway();
}
/**
* Put the card in the "defausse"
* @param card The card
......
......@@ -47,6 +47,16 @@ public class PlaceCardDeck {
this.playedCards = playedCards;
}
/**
* Put the played cards in the "defausse"
* @return true is the operation is a succeed, else otherwise
*/
public boolean throwAway(){
boolean ok = defausse.addAll(playedCards);
playedCards.clear();
return ok;
}
/**
* Put the card in the "defausse"
* @param card The card
......
......@@ -5,11 +5,18 @@ import fr.univnantes.alma.common.NotAloneDatabase;
import fr.univnantes.alma.server.game.Game;
import fr.univnantes.alma.server.game.PowerApplicator;
import fr.univnantes.alma.server.game.Room;
import fr.univnantes.alma.server.game.item.Phase;
import fr.univnantes.alma.server.game.item.action.TPairType;
import fr.univnantes.alma.server.game.item.board.Board;
import fr.univnantes.alma.server.game.item.board.BoardColor;
import fr.univnantes.alma.server.game.item.board.BoardDistribution;
import fr.univnantes.alma.server.game.item.card.Card;
import fr.univnantes.alma.server.game.item.card.PlaceCard;
import fr.univnantes.alma.server.game.item.jeton.JetonSymbol;
import fr.univnantes.alma.server.game.item.jeton.PlacedJeton;
import fr.univnantes.alma.server.game.item.planet.Place;
import fr.univnantes.alma.server.game.item.planet.Planet;
import fr.univnantes.alma.server.game.item.player.Creature;
import fr.univnantes.alma.server.game.item.player.Traque;
import fr.univnantes.alma.server.handler.GameClientHandler;
import fr.univnantes.alma.thrift.TAction;
......@@ -23,6 +30,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static fr.univnantes.alma.server.game.item.action.ActionType.CHOOSE_CARD;
import static fr.univnantes.alma.server.game.item.action.ActionType.CHOOSE_POWER;
import static fr.univnantes.alma.server.game.item.card.CardName.*;
import static org.junit.jupiter.api.Assertions.*;
......@@ -47,10 +55,11 @@ class PowerApplicatorTest {
Planet planet;
Board board;
List<PlaceCard> placeCards;
@BeforeEach
public void setUp() {
List<PlaceCard> placeCards = new ArrayList();
placeCards = new ArrayList();
placeCards.add(database.findPlaceCard(ANTRE.toString()));
placeCards.add(database.findPlaceCard(JUNGLE.toString()));
placeCards.add(database.findPlaceCard(RIVIERE.toString()));
......@@ -67,11 +76,10 @@ class PowerApplicatorTest {
@Test
void testApplyPlayerCard_antreWithoutJetonAndFirstPower() throws TException {
//Initialization
Room room = null;
GameClientHandler gameClientHandler = mock(GameClientHandler.class);
TAction chooseFirstPower = new TAction(CHOOSE_POWER.toString(), Arrays.asList(new TPair("NUMBER","0")));
when(gameClientHandler.askAction(any(TAskAction.class)))
.thenReturn(chooseFirstPower);
......@@ -80,16 +88,266 @@ class PowerApplicatorTest {
Traque traque = (Traque) game.getPlayer(2);
List<PlaceCard> cards = Arrays.asList(jungle, riviere, plage, rover);
List<PlaceCard> cardsInitial = Arrays.asList(jungle, riviere, plage, rover, antre);
//Verify that traque has all the initial cards
assertTrue(traque.getPlaceCards().containsAll(cardsInitial));
traque.throwAwayPlaceCard(cards);
//Verify that traque has only the Antre
assertEquals(Arrays.asList(antre), traque.getPlaceCards());
traque.playPlaceCard(antre);
PowerApplicator.resolvePlace(traque.getInGameId(), antre, game);
//Verify that traque has all the cards except the Antre
assertEquals(cards, traque.getPlaceCards());
}
@Test
void testApplyPlayerCard_antreWithJetonCreatureAndFirstPower() throws TException {
//Initialization
Room room = null;
GameClientHandler gameClientHandler = mock(GameClientHandler.class);
TAction chooseFirstPower = new TAction(CHOOSE_POWER.toString(), Arrays.asList(new TPair("NUMBER","0")));
when(gameClientHandler.askAction(any(TAskAction.class)))
.thenReturn(chooseFirstPower);
Planet planet = planet = new Planet(placeCards);
Game game = new Game(2, 1, planet, board, room, gameClientHandler);
Traque traque = (Traque) game.getPlayer(2);
List<PlaceCard> cards = Arrays.asList(jungle, riviere, plage, rover);
List<PlaceCard> cardsInitial = Arrays.asList(jungle, riviere, plage, rover, antre);
//Verify that traque has all the initial cards
assertTrue(traque.getPlaceCards().containsAll(cardsInitial));
traque.throwAwayPlaceCard(cards);
//Verify that traque has only the Antre
assertEquals(Arrays.asList(antre), traque.getPlaceCards());
traque.playPlaceCard(antre);
PlacedJeton placedJeton = new PlacedJeton(JetonSymbol.CREATURE, Place.PLACE_ONE);
planet.placeJeton(placedJeton);
PowerApplicator.resolvePlace(traque.getInGameId(), antre, game);
//Verify that traque has none cards
assertTrue(traque.getPlaceCards().isEmpty());
//Verify that traque lose 2 Willingness
assertEquals(1, traque.getNumberWillingness());
}
@Test
void testApplyPlayerCard_antreWithoutJetonAndSecondPower() throws TException {
//Initialization
Room room = null;
GameClientHandler gameClientHandler = mock(GameClientHandler.class);
TAction chooseSecondPower = new TAction(CHOOSE_POWER.toString(), Arrays.asList(new TPair("NUMBER","1")));
TAction chooseFirstPower = new TAction(CHOOSE_POWER.toString(), Arrays.asList(new TPair("NUMBER","0")));
TAction chooseADefausseCard = new TAction(CHOOSE_CARD.toString(), Arrays.asList(new TPair(TPairType.CARD.toString(),PLAGE.toString())));
when(gameClientHandler.askAction(any(TAskAction.class)))
.thenReturn(chooseSecondPower)
.thenReturn(chooseFirstPower)
.thenReturn(chooseADefausseCard);
Game game = new Game(2, 1, planet, board, room, gameClientHandler);
Traque traque = (Traque) game.getPlayer(2);
List<PlaceCard> cards = Arrays.asList(jungle, riviere, plage, rover);
List<PlaceCard> cardsInitial = Arrays.asList(jungle, riviere, plage, rover, antre);
//Verify that traque has all the initial cards
assertTrue(traque.getPlaceCards().containsAll(cardsInitial));
traque.throwAwayPlaceCard(cards);
//Verify that traque has only the antre
assertEquals(Arrays.asList(antre), traque.getPlaceCards());
traque.playPlaceCard(antre);
PlacedJeton placedJeton = new PlacedJeton(JetonSymbol.CREATURE, Place.PLACE_TWO);
planet.placeJeton(placedJeton);
PowerApplicator.resolvePlace(traque.getInGameId(), antre, game);
//Verify that traque has Jungle and Plage
assertTrue(traque.getPlaceCards().containsAll(Arrays.asList(jungle, plage)));
}
@Test
void testApplyPlayerCard_antreWithoutJetonAndThirdPower() throws TException {
Room room = null;
GameClientHandler gameClientHandler = mock(GameClientHandler.class);
TAction chooseThirdPower = new TAction(CHOOSE_POWER.toString(), Arrays.asList(new TPair(TPairType.NUMBER.toString(),"2")));
TAction chooseADefausseCard = new TAction(CHOOSE_CARD.toString(), Arrays.asList(new TPair(TPairType.CARD.toString(),JUNGLE.toString())));
when(gameClientHandler.askAction(any(TAskAction.class)))
.thenReturn(chooseThirdPower)
.thenReturn(chooseADefausseCard);
Planet planet = planet = new Planet(placeCards);
Game game = new Game(2, 1, planet, board, room, gameClientHandler);
Traque traque = (Traque) game.getPlayer(2);
List<PlaceCard> cards = Arrays.asList(jungle, riviere, plage, rover);
List<PlaceCard> cardsInitial = Arrays.asList(jungle, riviere, plage, rover, antre);
//Verify that traque has all the initial cards
assertTrue(traque.getPlaceCards().containsAll(cardsInitial));
traque.throwAwayPlaceCard(cards);
//Verify that traque has only the Antre
assertEquals(Arrays.asList(antre), traque.getPlaceCards());
traque.playPlaceCard(antre);
PowerApplicator.resolvePlace(traque.getInGameId(), antre, game);
//Verify that traque has only the Jungle
assertEquals(Arrays.asList(jungle), traque.getPlaceCards());
}
@Test
void testApplyPlayerCard_jungleWithoutJetonAndFirstPower() throws TException {
//Initialization
Room room = null;
GameClientHandler gameClientHandler = mock(GameClientHandler.class);
TAction chooseFirstPower = new TAction(CHOOSE_POWER.toString(), Arrays.asList(new TPair("NUMBER","0")));
TAction chooseADefausseCard = new TAction(CHOOSE_CARD.toString(), Arrays.asList(new TPair(TPairType.CARD.toString(),PLAGE.toString())));
when(gameClientHandler.askAction(any(TAskAction.class)))
.thenReturn(chooseFirstPower)
.thenReturn(chooseADefausseCard);
Game game = new Game(2, 1, planet, board, room, gameClientHandler);
Traque traque = (Traque) game.getPlayer(2);
List<PlaceCard> cards = Arrays.asList(antre, riviere, plage, rover);
List<PlaceCard> cardsInitial = Arrays.asList(jungle, riviere, plage, rover, antre);
//Verify that traque has all the initial cards
assertTrue(traque.getPlaceCards().containsAll(cardsInitial));
traque.throwAwayPlaceCard(cards);
//Verify that traque has only the jungle
assertEquals(Arrays.asList(jungle), traque.getPlaceCards());
traque.playPlaceCard(jungle);
PowerApplicator.resolvePlace(traque.getInGameId(), jungle, game);
//Verify that traque has Jungle and Plage
assertTrue(traque.getPlaceCards().containsAll(Arrays.asList(jungle, plage)));
}
@Test
void testApplyPlayerCard_jungleWithoutJetonAndSecondPower() throws TException {
//Initialization
Room room = null;
GameClientHandler gameClientHandler = mock(GameClientHandler.class);
TAction chooseFirstPower = new TAction(CHOOSE_POWER.toString(), Arrays.asList(new TPair("NUMBER","1")));
TAction chooseADefausseCard = new TAction(CHOOSE_CARD.toString(), Arrays.asList(new TPair(TPairType.CARD.toString(),PLAGE.toString())));
when(gameClientHandler.askAction(any(TAskAction.class)))
.thenReturn(chooseFirstPower)
.thenReturn(chooseADefausseCard);
Game game = new Game(2, 1, planet, board, room, gameClientHandler);
Traque traque = (Traque) game.getPlayer(2);
List<PlaceCard> cards = Arrays.asList(antre, riviere, plage, rover);
List<PlaceCard> cardsInitial = Arrays.asList(jungle, riviere, plage, rover, antre);
//Verify that traque has all the initial cards
assertTrue(traque.getPlaceCards().containsAll(cardsInitial));
traque.throwAwayPlaceCard(cards);
//Verify that traque has only the jungle
assertEquals(Arrays.asList(jungle), traque.getPlaceCards());
traque.playPlaceCard(jungle);
PowerApplicator.resolvePlace(traque.getInGameId(), jungle, game);
//Verify that traque has Plage
assertTrue(traque.getPlaceCards().containsAll(Arrays.asList(plage)));
}
@Test
void testApplyPlayerCard_riviereWithoutJetonAndFirstPower() throws TException {
//Initialization
Room room = null;
GameClientHandler gameClientHandler = mock(GameClientHandler.class);
TAction chooseFirstPower = new TAction(CHOOSE_POWER.toString(), Arrays.asList(new TPair("NUMBER","0")));
TAction chooseAPlaceCard = new TAction(CHOOSE_CARD.toString(), Arrays.asList(new TPair(TPairType.CARD.toString(),ANTRE.toString())));
when(gameClientHandler.askAction(any(TAskAction.class)))
.thenReturn(chooseFirstPower)
.thenReturn(chooseAPlaceCard)
.thenReturn(chooseFirstPower);
Game game = new Game(2, 1, planet, board, room, gameClientHandler);
Traque traque = (Traque) game.getPlayer(2);
List<PlaceCard> cardsInitial = Arrays.asList(jungle, riviere, plage, rover, antre);
//Verify that traque has all the initial cards
assertTrue(traque.getPlaceCards().containsAll(cardsInitial));
traque.playPlaceCard(riviere);
PowerApplicator.resolvePlace(traque.getInGameId(), riviere, game);
//Verify that traque has all cards except riviere
List<PlaceCard> cards = Arrays.asList(antre, jungle, plage, rover);
assertTrue(traque.getPlaceCards().containsAll(cards));
game.managePhase4();
game.nextRound();
//Start phase 1
game.startNextPhase();
traque.setCurrentPhase(Phase.PHASE_1);
List<Card> chosenCards = new ArrayList<>();
chosenCards.addAll(Arrays.asList(antre, jungle));
assertTrue(game.playerPlayCard(2, chosenCards).state);
//Start postphase 1
game.startNextPhase();
//Start prephase 2
game.startNextPhase();
//Start phase 2
game.startNextPhase();
//Start postphase 2
game.startNextPhase();
//Start prephase 3
game.startNextPhase();
//Start phase 3
game.startNextPhase();
assertTrue(traque.getPlaceCards().containsAll(Arrays.asList(jungle, riviere, plage, rover)));
}
@Test
void testApplyPlayerCard_riviereWithoutJetonAndSecondPower() throws TException {
//Initialization
Room room = null;
GameClientHandler gameClientHandler = mock(GameClientHandler.class);
TAction chooseFirstPower = new TAction(CHOOSE_POWER.toString(), Arrays.asList(new TPair("NUMBER","1")));
TAction chooseADefausseCard = new TAction(CHOOSE_CARD.toString(), Arrays.asList(new TPair(TPairType.CARD.toString(),PLAGE.toString())));
when(gameClientHandler.askAction(any(TAskAction.class)))
.thenReturn(chooseFirstPower)
.thenReturn(chooseADefausseCard);
Game game = new Game(2, 1, planet, board, room, gameClientHandler);
Traque traque = (Traque) game.getPlayer(2);
List<PlaceCard> cards = Arrays.asList(antre, jungle, plage, rover);
List<PlaceCard> cardsInitial = Arrays.asList(jungle, riviere, plage, rover, antre);
//Verify that traque has all the initial cards
assertTrue(traque.getPlaceCards().containsAll(cardsInitial));
traque.throwAwayPlaceCard(cards);
//Verify that traque has only the riviere
assertEquals(Arrays.asList(riviere), traque.getPlaceCards());
traque.playPlaceCard(riviere);
PowerApplicator.resolvePlace(traque.getInGameId(), riviere, game);
//Verify that traque has Plage
assertTrue(traque.getPlaceCards().containsAll(Arrays.asList(plage)));
}
@Test
void resolvePlace() {
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment