Fix: Order2Test.java

This commit is contained in:
MatteoPellegrino05
2026-04-03 11:57:33 +02:00
parent 1b10d9298e
commit a7426f03f7
@@ -1,214 +1,158 @@
package it.polimi.ingsw.gc14.Model.Orders;
import it.polimi.ingsw.gc14.Model.Cards.Building.EffectType;
import it.polimi.ingsw.gc14.Model.Cards.BuildingCard;
import it.polimi.ingsw.gc14.Model.Player;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.NoSuchElementException;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.*;
class Order2Test {
@Test
void effectZero() {
Player p = new Player("p1");
void firstReturnGetsFood() {
Player p1 = new Player("p1");
Player p2 = new Player("p2");
ArrayList<Player> players = new ArrayList<>();
players.add(p);
players.add(p1);
players.add(p2);
Order2 order = new Order2(players);
Order2 order = new Order2(new ArrayList<>());
Player firstToAct = order.pull();
Player secondToAct = order.pull();
int initialFood = p.getFoodValue();
int initialFood = firstToAct.getFoodValue();
order.push(firstToAct);
order.effect(p, 0);
assertEquals(initialFood + 1, p.getFoodValue());
assertEquals(initialFood + 1, firstToAct.getFoodValue());
assertEquals(firstToAct, order.getFirst());
}
@Test
void effectZeroWithBuildingEffedt() {
Player p = new Player("p1");
void secondReturnPaysFood() {
Player p1 = new Player("p1");
Player p2 = new Player("p2");
ArrayList<Player> players = new ArrayList<>();
players.add(p);
players.add(p1);
players.add(p2);
Order2 order = new Order2(players);
Player firstToAct = order.pull();
Player secondToAct = order.pull();
secondToAct.addFood(1);
int initialPrestige = secondToAct.getPrestigeValue();
order.push(firstToAct);
order.push(secondToAct);
assertEquals(0, secondToAct.getFoodValue());
assertEquals(initialPrestige, secondToAct.getPrestigeValue());
}
@Test
void secondReturnLosesPrestige() {
Player p1 = new Player("p1");
Player p2 = new Player("p2");
ArrayList<Player> players = new ArrayList<>();
players.add(p1);
players.add(p2);
Order2 order = new Order2(players);
Player firstToAct = order.pull();
Player secondToAct = order.pull();
secondToAct.addPrestige(3);
order.push(firstToAct);
order.push(secondToAct);
assertEquals(0, secondToAct.getFoodValue());
assertEquals(1, secondToAct.getPrestigeValue());
}
@Test
void firstReturnWithBuilding() {
Player p1 = new Player("p1");
Player p2 = new Player("p2");
ArrayList<Player> players = new ArrayList<>();
players.add(p1);
players.add(p2);
Order2 order = new Order2(players);
Player firstToAct = order.pull();
order.pull();
firstToAct.buildingCards.add(new BuildingCard(3, 1, 1, 2));
order.push(firstToAct);
assertEquals(2, firstToAct.getFoodValue());
}
@Test
void thirdPlayerThrows() {
Player p1 = new Player("p1");
Player p2 = new Player("p2");
Player p3 = new Player("p3");
ArrayList<Player> players = new ArrayList<>();
players.add(p1);
players.add(p2);
Order2 order = new Order2(players);
order.pull();
order.pull();
order.push(p1);
order.push(p2);
assertThrows(IndexOutOfBoundsException.class, () -> order.push(p3));
}
@Test
void constructorLoadsPlayers() {
Player p1 = new Player("p1");
Player p2 = new Player("p2");
ArrayList<Player> players = new ArrayList<>();
players.add(p1);
players.add(p2);
Order2 order = new Order2(players);
int initialFood = p.getFoodValue();
order.effect(p, 0);
assertTrue(p.getFoodValue() >= initialFood + 1);
Player firstOut = order.pull();
Player secondOut = order.pull();
assertTrue((firstOut == p1 && secondOut == p2) || (firstOut == p2 && secondOut == p1));
assertThrows(NoSuchElementException.class, order::pull);
}
@Test
void effectOneWithFood() {
void wrongIndexLow() {
Player p = new Player("p1");
ArrayList<Player> players = new ArrayList<>();
players.add(p);
Order2 order = new Order2(players);
p.addFood(1);
int initialPrestige = p.getPrestigeValue();
order.effect(p, 1);
assertEquals(0, p.getFoodValue());
assertEquals(initialPrestige, p.getPrestigeValue());
}
@Test
void effectOneWithoutFood() {
Player p = new Player("p1");
ArrayList<Player> players = new ArrayList<>();
players.add(p);
Order2 order = new Order2(players);
p.addPrestige(3);
order.effect(p, 1);
assertEquals(0, p.getFoodValue());
assertEquals(1, p.getPrestigeValue());
}
@Test
void effectWrongIndexHigh() {
Player p = new Player("p1");
ArrayList<Player> players = new ArrayList<>();
players.add(p);
Order2 order = new Order2(new ArrayList<>());
assertThrows(IndexOutOfBoundsException.class, () -> order.effect(p, 2));
}
@Test
void effectWrongIndexLow() {
Player p = new Player("p1");
ArrayList<Player> players = new ArrayList<>();
players.add(p);
Order2 order = new Order2(new ArrayList<>());
assertThrows(IndexOutOfBoundsException.class, () -> order.effect(p, -1));
}
@Test
void pullAll() {
Player p1 = new Player("p1");
Player p2 = new Player("p2");
ArrayList<Player> players = new ArrayList<>();
players.add(p1);
players.add(p2);
Order2 order = new Order2(players);
Player first = order.pull();
Player second = order.pull();
Set<Player> extracted = new HashSet<>();
extracted.add(first);
extracted.add(second);
assertEquals(2, extracted.size());
assertTrue(extracted.contains(p1));
assertTrue(extracted.contains(p2));
}
@Test
void pullEmpty() {
void wrongIndexHigh() {
Player p = new Player("p1");
Order2 order = new Order2(new ArrayList<>());
ArrayList<Player> players = new ArrayList<>();
players.add(p);
Order2 order = new Order2(players);
order.pull();
assertThrows(NoSuchElementException.class, order::pull);
assertThrows(IndexOutOfBoundsException.class, () -> order.effect(p, 2));
}
@Test
void firstPlayer() {
void getFirst() {
Player p1 = new Player("p1");
Player p2 = new Player("p2");
Order2 order = new Order2(new ArrayList<>());
ArrayList<Player> players = new ArrayList<>();
players.add(p1);
players.add(p2);
assertNull(order.getFirst());
Order2 order = new Order2(players);
order.push(p1);
Player first = order.getFirst();
assertTrue(first == p1 || first == p2);
assertEquals(p1, order.getFirst());
assertEquals(p1, order.getFirst());
}
@Test
void pushZero() {
ArrayList<Player> players = new ArrayList<>();
Order2 order = new Order2(players);
Player p = new Player("p1");
int initialFood = p.getFoodValue();
order.push(p);
assertEquals(initialFood + 1, p.getFoodValue());
assertEquals(p, order.getFirst());
}
@Test
void pushOneFood() {
Player p1 = new Player("p1");
Player p2 = new Player("p2");
ArrayList<Player> players = new ArrayList<>();
players.add(p1);
Order2 order = new Order2(players);
p2.addFood(1);
int initialPrestige = p2.getPrestigeValue();
order.push(p2);
assertEquals(0, p2.getFoodValue());
assertEquals(initialPrestige, p2.getPrestigeValue());
}
@Test
void pushOneNoFood() {
Player p1 = new Player("p1");
Player p2 = new Player("p2");
ArrayList<Player> players = new ArrayList<>();
players.add(p1);
Order2 order = new Order2(players);
p2.addPrestige(3);
order.push(p2);
assertEquals(1, p2.getPrestigeValue());
}
@Test
void pushFull() {
Player p1 = new Player("p1");
Player p2 = new Player("p2");
Player p3 = new Player("p3");
ArrayList<Player> players = new ArrayList<>();
players.add(p1);
players.add(p2);
Order2 order = new Order2(players);
assertThrows(IndexOutOfBoundsException.class, () -> order.push(p3));
}
}