Merge branch 'SkipLogicChange' of github.com:rubenpirreram/ing-sw-2026-pirrera-radice-pagani-pellegrino into SkipLogicChange
This commit is contained in:
@@ -943,18 +943,32 @@ class GameTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@Timeout(value = 5, unit = TimeUnit.SECONDS)
|
||||||
void drawBuildingShouldReturnFalseIfPlayerCannotPay() {
|
void drawBuildingShouldReturnFalseIfPlayerCannotPay() {
|
||||||
Game game = new Game(3);
|
Game game = new Game(3);
|
||||||
addPlayers(game, 3, "no_food_building_");
|
|
||||||
|
|
||||||
|
addPlayers(game, 3, "no_food_upper_building_");
|
||||||
|
|
||||||
|
for (int safety = 0; safety < 300; safety++) {
|
||||||
|
|
||||||
|
if (game.getCurrentState().getGameStage() == GameStages.SLOT_CHOICE) {
|
||||||
completeSlotChoice(game);
|
completeSlotChoice(game);
|
||||||
|
}
|
||||||
|
|
||||||
while (game.getCurrentState().getGameStage() == GameStages.RES_ACTIONS) {
|
if (game.getCurrentState().getGameStage() == GameStages.RES_ACTIONS) {
|
||||||
Player current = game.getCurrentState().getCurrentPlayer();
|
Player current = game.getCurrentState().getCurrentPlayer();
|
||||||
|
assertNotNull(current);
|
||||||
|
|
||||||
if (game.getCurrentState().getNUpper() > 0
|
if (game.getCurrentState().getNUpper() > 0
|
||||||
&& !game.getUpperListBuilding().isEmpty()) {
|
&& !game.getUpperListBuilding().isEmpty()) {
|
||||||
|
|
||||||
|
BuildingCard selectedBuilding = game.getUpperListBuilding().get(0);
|
||||||
|
|
||||||
|
if (selectedBuilding.getPrice() <= 0) {
|
||||||
|
resolveOneMandatoryAction(game);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
while (current.getFoodValue() > 0) {
|
while (current.getFoodValue() > 0) {
|
||||||
assertTrue(current.removeFood(1));
|
assertTrue(current.removeFood(1));
|
||||||
}
|
}
|
||||||
@@ -963,14 +977,31 @@ class GameTest {
|
|||||||
|
|
||||||
assertEquals(0, current.getFoodValue());
|
assertEquals(0, current.getFoodValue());
|
||||||
|
|
||||||
|
int buildingsBefore = current.buildingCards.size();
|
||||||
|
int upperBuildingsBefore = game.getUpperListBuilding().size();
|
||||||
|
|
||||||
assertFalse(game.DrawUpperBuildingCardByIndex(current, 0));
|
assertFalse(game.DrawUpperBuildingCardByIndex(current, 0));
|
||||||
|
|
||||||
|
assertEquals(buildingsBefore, current.buildingCards.size());
|
||||||
|
assertEquals(upperBuildingsBefore, game.getUpperListBuilding().size());
|
||||||
|
assertEquals(0, current.getFoodValue());
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
resolveOneMandatoryAction(game);
|
resolveOneMandatoryAction(game);
|
||||||
}
|
}
|
||||||
|
|
||||||
fail("No upper building draw state reached.");
|
if (game.getCurrentState().getGameStage() == GameStages.OPT_CARD_E) {
|
||||||
|
resolveOptionalPhaseIfPresent(game);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (game.getCurrentState().getGameStage() == GameStages.ENDED) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fail("The test never reached a state with NUpper > 0 and at least one payable upper building.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1217,12 +1248,25 @@ class GameTest {
|
|||||||
void cardListsShouldReturnCopiesOfLists() {
|
void cardListsShouldReturnCopiesOfLists() {
|
||||||
Game game = new Game(3);
|
Game game = new Game(3);
|
||||||
|
|
||||||
List<TribeCard> upper = game.getUpperListTribeCards();
|
int upperTribeSize = game.getUpperListTribeCards().size();
|
||||||
int originalSize = upper.size();
|
int lowerTribeSize = game.getLowerListTribeCards().size();
|
||||||
|
int upperBuildingSize = game.getUpperListBuilding().size();
|
||||||
|
int lowerBuildingSize = game.getLowerListBuilding().size();
|
||||||
|
|
||||||
upper.clear();
|
List<TribeCard> upperTribe = game.getUpperListTribeCards();
|
||||||
|
List<TribeCard> lowerTribe = game.getLowerListTribeCards();
|
||||||
|
List<BuildingCard> upperBuilding = game.getUpperListBuilding();
|
||||||
|
List<BuildingCard> lowerBuilding = game.getLowerListBuilding();
|
||||||
|
|
||||||
assertEquals(originalSize, game.getUpperListTribeCards().size());
|
upperTribe.clear();
|
||||||
|
lowerTribe.clear();
|
||||||
|
upperBuilding.clear();
|
||||||
|
lowerBuilding.clear();
|
||||||
|
|
||||||
|
assertEquals(upperTribeSize, game.getUpperListTribeCards().size());
|
||||||
|
assertEquals(lowerTribeSize, game.getLowerListTribeCards().size());
|
||||||
|
assertEquals(upperBuildingSize, game.getUpperListBuilding().size());
|
||||||
|
assertEquals(lowerBuildingSize, game.getLowerListBuilding().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1240,4 +1284,213 @@ class GameTest {
|
|||||||
assertTrue(game.getPlayers().contains(p2));
|
assertTrue(game.getPlayers().contains(p2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void skipDrawingShouldRejectOutsideResolvingActions() {
|
||||||
|
Game game = new Game(3);
|
||||||
|
|
||||||
|
addPlayers(game, 3, "skip_out_");
|
||||||
|
|
||||||
|
Player current = game.getCurrentState().getCurrentPlayer();
|
||||||
|
assertNotNull(current);
|
||||||
|
|
||||||
|
assertEquals(GameStages.SLOT_CHOICE, game.getCurrentState().getGameStage());
|
||||||
|
|
||||||
|
assertFalse(game.SkipLowerDrawing(current));
|
||||||
|
assertFalse(game.SkipUpperDrawing(current));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Timeout(value = 5, unit = TimeUnit.SECONDS)
|
||||||
|
void drawLowerBuildingShouldReturnFalseIfPlayerCannotPay() {
|
||||||
|
Game game = new Game(3);
|
||||||
|
|
||||||
|
addPlayers(game, 3, "no_food_lower_building_");
|
||||||
|
|
||||||
|
for (int safety = 0; safety < 300; safety++) {
|
||||||
|
|
||||||
|
if (game.getCurrentState().getGameStage() == GameStages.SLOT_CHOICE) {
|
||||||
|
completeSlotChoice(game);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (game.getCurrentState().getGameStage() == GameStages.RES_ACTIONS) {
|
||||||
|
Player current = game.getCurrentState().getCurrentPlayer();
|
||||||
|
assertNotNull(current);
|
||||||
|
|
||||||
|
if (game.getCurrentState().getNLower() > 0
|
||||||
|
&& !game.getLowerListBuilding().isEmpty()) {
|
||||||
|
|
||||||
|
BuildingCard selectedBuilding = game.getLowerListBuilding().get(0);
|
||||||
|
|
||||||
|
if (selectedBuilding.getPrice() <= 0) {
|
||||||
|
resolveOneMandatoryAction(game);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (current.getFoodValue() > 0) {
|
||||||
|
assertTrue(current.removeFood(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
current.builders.clear();
|
||||||
|
|
||||||
|
assertEquals(0, current.getFoodValue());
|
||||||
|
|
||||||
|
int buildingsBefore = current.buildingCards.size();
|
||||||
|
int lowerBuildingsBefore = game.getLowerListBuilding().size();
|
||||||
|
|
||||||
|
assertFalse(game.DrawLowerBuildingCardByIndex(current, 0));
|
||||||
|
|
||||||
|
assertEquals(buildingsBefore, current.buildingCards.size());
|
||||||
|
assertEquals(lowerBuildingsBefore, game.getLowerListBuilding().size());
|
||||||
|
assertEquals(0, current.getFoodValue());
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
resolveOneMandatoryAction(game);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (game.getCurrentState().getGameStage() == GameStages.OPT_CARD_E) {
|
||||||
|
resolveOptionalPhaseIfPresent(game);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (game.getCurrentState().getGameStage() == GameStages.ENDED) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fail("The test never reached a state with NLower > 0 and at least one payable lower building.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Timeout(value = 5, unit = TimeUnit.SECONDS)
|
||||||
|
void drawLowerBuildingShouldRejectWrongPlayer() {
|
||||||
|
Game game = new Game(3);
|
||||||
|
|
||||||
|
List<Player> players = addPlayers(game, 3, "wrong_lower_building_");
|
||||||
|
|
||||||
|
for (int safety = 0; safety < 300; safety++) {
|
||||||
|
|
||||||
|
if (game.getCurrentState().getGameStage() == GameStages.SLOT_CHOICE) {
|
||||||
|
completeSlotChoice(game);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (game.getCurrentState().getGameStage() == GameStages.RES_ACTIONS) {
|
||||||
|
Player current = game.getCurrentState().getCurrentPlayer();
|
||||||
|
assertNotNull(current);
|
||||||
|
|
||||||
|
if (game.getCurrentState().getNLower() > 0
|
||||||
|
&& !game.getLowerListBuilding().isEmpty()) {
|
||||||
|
|
||||||
|
Player wrongPlayer = players.stream()
|
||||||
|
.filter(p -> !p.equals(current))
|
||||||
|
.findFirst()
|
||||||
|
.orElseThrow();
|
||||||
|
|
||||||
|
wrongPlayer.addFood(game.getLowerListBuilding().get(0).getPrice());
|
||||||
|
|
||||||
|
assertFalse(game.DrawLowerBuildingCardByIndex(wrongPlayer, 0));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
resolveOneMandatoryAction(game);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (game.getCurrentState().getGameStage() == GameStages.OPT_CARD_E) {
|
||||||
|
resolveOptionalPhaseIfPresent(game);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (game.getCurrentState().getGameStage() == GameStages.ENDED) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fail("The test never reached a lower building draw state.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void cardListsShouldReturnClonedCards() {
|
||||||
|
Game game = new Game(3);
|
||||||
|
|
||||||
|
List<TribeCard> firstUpperTribeCall = game.getUpperListTribeCards();
|
||||||
|
List<TribeCard> secondUpperTribeCall = game.getUpperListTribeCards();
|
||||||
|
|
||||||
|
assertFalse(firstUpperTribeCall.isEmpty());
|
||||||
|
assertFalse(secondUpperTribeCall.isEmpty());
|
||||||
|
|
||||||
|
assertNotSame(firstUpperTribeCall.get(0), secondUpperTribeCall.get(0));
|
||||||
|
|
||||||
|
List<TribeCard> firstLowerTribeCall = game.getLowerListTribeCards();
|
||||||
|
List<TribeCard> secondLowerTribeCall = game.getLowerListTribeCards();
|
||||||
|
|
||||||
|
assertFalse(firstLowerTribeCall.isEmpty());
|
||||||
|
assertFalse(secondLowerTribeCall.isEmpty());
|
||||||
|
|
||||||
|
assertNotSame(firstLowerTribeCall.get(0), secondLowerTribeCall.get(0));
|
||||||
|
|
||||||
|
List<BuildingCard> firstUpperBuildingCall = game.getUpperListBuilding();
|
||||||
|
List<BuildingCard> secondUpperBuildingCall = game.getUpperListBuilding();
|
||||||
|
|
||||||
|
assertFalse(firstUpperBuildingCall.isEmpty());
|
||||||
|
assertFalse(secondUpperBuildingCall.isEmpty());
|
||||||
|
|
||||||
|
assertNotSame(firstUpperBuildingCall.get(0), secondUpperBuildingCall.get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void initShouldAssignInitialFoodAccordingToOrderPosition() {
|
||||||
|
Game game = new Game(5);
|
||||||
|
|
||||||
|
Player p1 = new Player("p1");
|
||||||
|
Player p2 = new Player("p2");
|
||||||
|
Player p3 = new Player("p3");
|
||||||
|
Player p4 = new Player("p4");
|
||||||
|
Player p5 = new Player("p5");
|
||||||
|
|
||||||
|
assertTrue(game.addPlayer(p1));
|
||||||
|
assertTrue(game.addPlayer(p2));
|
||||||
|
assertTrue(game.addPlayer(p3));
|
||||||
|
assertTrue(game.addPlayer(p4));
|
||||||
|
assertTrue(game.addPlayer(p5));
|
||||||
|
|
||||||
|
assertEquals(GameStages.SLOT_CHOICE, game.getCurrentState().getGameStage());
|
||||||
|
|
||||||
|
List<Integer> foodValues = game.getPlayers().stream()
|
||||||
|
.map(Player::getFoodValue)
|
||||||
|
.sorted()
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
assertEquals(List.of(2, 3, 3, 4, 4), foodValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void slotChoiceShouldAddFoodWhenChoosingSlotAInFivePlayerGame() {
|
||||||
|
Game game = new Game(5);
|
||||||
|
|
||||||
|
addPlayers(game, 5, "slot_a_");
|
||||||
|
|
||||||
|
Player current = game.getCurrentState().getCurrentPlayer();
|
||||||
|
assertNotNull(current);
|
||||||
|
|
||||||
|
int foodBefore = current.getFoodValue();
|
||||||
|
|
||||||
|
assertTrue(game.SlotChoiceByIndex(current, 0));
|
||||||
|
|
||||||
|
assertEquals(foodBefore + 3, current.getFoodValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void slotChoiceShouldNotAddFoodWhenChoosingNonASlot() {
|
||||||
|
Game game = new Game(5);
|
||||||
|
|
||||||
|
addPlayers(game, 5, "slot_non_a_");
|
||||||
|
|
||||||
|
Player current = game.getCurrentState().getCurrentPlayer();
|
||||||
|
assertNotNull(current);
|
||||||
|
|
||||||
|
int foodBefore = current.getFoodValue();
|
||||||
|
|
||||||
|
assertTrue(game.SlotChoiceByIndex(current, 1));
|
||||||
|
|
||||||
|
assertEquals(foodBefore, current.getFoodValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user