diff options
author | Joffrey BION <joffrey.bion@gmail.com> | 2018-04-23 21:05:36 +0200 |
---|---|---|
committer | Joffrey BION <joffrey.bion@gmail.com> | 2018-04-23 21:07:15 +0200 |
commit | 8702554846fe3791d4c877fbfe8e868b37fe39af (patch) | |
tree | 181a5de598248b914b79685084e73e161b3b26e9 /backend | |
parent | Upgrade frontend build tools version (diff) | |
download | seven-wonders-8702554846fe3791d4c877fbfe8e868b37fe39af.tar.gz seven-wonders-8702554846fe3791d4c877fbfe8e868b37fe39af.tar.bz2 seven-wonders-8702554846fe3791d4c877fbfe8e868b37fe39af.zip |
Extract game engine as separate artifact
Diffstat (limited to 'backend')
115 files changed, 8 insertions, 10123 deletions
diff --git a/backend/build.gradle b/backend/build.gradle index 5ef36783..dd3f4ffd 100644 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -20,9 +20,9 @@ configurations { } dependencies { + compile project(':game-engine') compile 'org.springframework.boot:spring-boot-starter-websocket' compile 'org.springframework.security:spring-security-core:4.2.0.RELEASE' - compile 'com.google.code.gson:gson:2.8.0' compile 'ch.qos.logback:logback-classic:1.1.8' compile 'org.hildan.livedoc:livedoc-springboot:4.3.2' compile 'org.hildan.livedoc:livedoc-ui-webjar:4.3.2' diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/Game.java b/backend/src/main/java/org/luxons/sevenwonders/game/Game.java deleted file mode 100644 index ed11913b..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/Game.java +++ /dev/null @@ -1,232 +0,0 @@ -package org.luxons.sevenwonders.game; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.luxons.sevenwonders.game.api.Action; -import org.luxons.sevenwonders.game.api.HandCard; -import org.luxons.sevenwonders.game.api.PlayerMove; -import org.luxons.sevenwonders.game.api.PlayerTurnInfo; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.cards.Card; -import org.luxons.sevenwonders.game.cards.CardBack; -import org.luxons.sevenwonders.game.cards.Decks; -import org.luxons.sevenwonders.game.cards.Hands; -import org.luxons.sevenwonders.game.effects.SpecialAbility; -import org.luxons.sevenwonders.game.moves.InvalidMoveException; -import org.luxons.sevenwonders.game.moves.Move; -import org.luxons.sevenwonders.game.scoring.ScoreBoard; - -public class Game { - - private static final int LAST_AGE = 3; - - private final long id; - - private final Settings settings; - - private final int nbPlayers; - - private final Table table; - - private final Decks decks; - - private final List<Card> discardedCards; - - private final Map<Integer, Move> preparedMoves; - - private Map<Integer, PlayerTurnInfo> currentTurnInfo; - - private Hands hands; - - public Game(long id, Settings settings, int nbPlayers, List<Board> boards, Decks decks) { - this.id = id; - this.settings = settings; - this.nbPlayers = nbPlayers; - this.table = new Table(boards); - this.decks = decks; - this.discardedCards = new ArrayList<>(); - this.currentTurnInfo = new HashMap<>(); - this.preparedMoves = new HashMap<>(); - startNewAge(); - } - - public long getId() { - return id; - } - - public Settings getSettings() { - return settings; - } - - private void startNewAge() { - table.increaseCurrentAge(); - hands = decks.deal(table.getCurrentAge(), table.getNbPlayers()); - startNewTurn(); - } - - private void startNewTurn() { - currentTurnInfo.clear(); - for (int i = 0; i < nbPlayers; i++) { - currentTurnInfo.put(i, createPlayerTurnInfo(i)); - } - } - - private PlayerTurnInfo createPlayerTurnInfo(int playerIndex) { - PlayerTurnInfo pti = new PlayerTurnInfo(playerIndex, table); - List<HandCard> hand = hands.createHand(table, playerIndex); - pti.setHand(hand); - Action action = determineAction(hand, table.getBoard(playerIndex)); - pti.setAction(action); - pti.setMessage(action.getMessage()); - if (action == Action.PICK_NEIGHBOR_GUILD) { - pti.setNeighbourGuildCards(table.getNeighbourGuildCards(playerIndex)); - } - return pti; - } - - public Collection<PlayerTurnInfo> getCurrentTurnInfo() { - return currentTurnInfo.values(); - } - - private Action determineAction(List<HandCard> hand, Board board) { - if (endOfGameReached() && board.hasSpecial(SpecialAbility.COPY_GUILD)) { - return Action.PICK_NEIGHBOR_GUILD; - } else if (hand.size() == 1 && board.hasSpecial(SpecialAbility.PLAY_LAST_CARD)) { - return Action.PLAY_LAST; - } else if (hand.size() == 2 && board.hasSpecial(SpecialAbility.PLAY_LAST_CARD)) { - return Action.PLAY_2; - } else if (hand.isEmpty()) { - return Action.WAIT; - } else { - return Action.PLAY; - } - } - - public CardBack prepareMove(int playerIndex, PlayerMove playerMove) throws InvalidMoveException { - Card card = decks.getCard(playerMove.getCardName()); - Move move = playerMove.getType().resolve(playerIndex, card, playerMove); - validate(move); - preparedMoves.put(playerIndex, move); - return card.getBack(); - } - - private void validate(Move move) throws InvalidMoveException { - List<Card> hand = hands.get(move.getPlayerIndex()); - move.validate(table, hand); - } - - public boolean allPlayersPreparedTheirMove() { - long nbExpectedMoves = currentTurnInfo.values().stream().filter(pti -> pti.getAction() != Action.WAIT).count(); - return preparedMoves.size() == nbExpectedMoves; - } - - public Table playTurn() { - makeMoves(); - if (endOfAgeReached()) { - executeEndOfAgeEvents(); - if (!endOfGameReached()) { - startNewAge(); - } - } else { - rotateHandsIfRelevant(); - startNewTurn(); - } - return table; - } - - private void rotateHandsIfRelevant() { - // we don't rotate hands if some player can play his last card (with the special ability) - if (!hands.maxOneCardRemains()) { - hands.rotate(table.getHandRotationDirection()); - } - } - - private void makeMoves() { - List<Move> playedMoves = mapToList(preparedMoves); - - // all cards from this turn need to be placed before executing any effect - // because effects depending on played cards need to take the ones from the current turn into account too - placePreparedCards(playedMoves); - - // same goes for the discarded cards during the last turn, which should be available for special actions - if (hands.maxOneCardRemains()) { - discardLastCardsOfHands(); - } - - activatePlayedCards(playedMoves); - - table.setLastPlayedMoves(playedMoves); - preparedMoves.clear(); - } - - private static List<Move> mapToList(Map<Integer, Move> movesPerPlayer) { - List<Move> moves = new ArrayList<>(movesPerPlayer.size()); - for (int p = 0; p < movesPerPlayer.size(); p++) { - Move move = movesPerPlayer.get(p); - if (move == null) { - throw new MissingPreparedMoveException(p); - } - moves.add(move); - } - return moves; - } - - private void placePreparedCards(List<Move> playedMoves) { - playedMoves.forEach(move -> { - move.place(table, discardedCards, settings); - removeFromHand(move.getPlayerIndex(), move.getCard()); - }); - } - - private void discardLastCardsOfHands() { - for (int i = 0; i < nbPlayers; i++) { - Board board = table.getBoard(i); - if (!board.hasSpecial(SpecialAbility.PLAY_LAST_CARD)) { - discardHand(i); - } - } - } - - private void discardHand(int playerIndex) { - List<Card> hand = hands.get(playerIndex); - discardedCards.addAll(hand); - hand.clear(); - } - - private void removeFromHand(int playerIndex, Card card) { - hands.get(playerIndex).remove(card); - } - - private void activatePlayedCards(List<Move> playedMoves) { - playedMoves.forEach(move -> move.activate(table, discardedCards, settings)); - } - - private boolean endOfAgeReached() { - return hands.isEmpty(); - } - - private void executeEndOfAgeEvents() { - table.resolveMilitaryConflicts(); - } - - private boolean endOfGameReached() { - return endOfAgeReached() && table.getCurrentAge() == LAST_AGE; - } - - public ScoreBoard computeScore() { - ScoreBoard scoreBoard = new ScoreBoard(); - table.getBoards().stream().map(b -> b.computePoints(table)).forEach(scoreBoard::add); - return scoreBoard; - } - - private static class MissingPreparedMoveException extends IllegalStateException { - MissingPreparedMoveException(int playerIndex) { - super("Player " + playerIndex + " is not ready to play"); - } - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/Settings.java b/backend/src/main/java/org/luxons/sevenwonders/game/Settings.java deleted file mode 100644 index f05b0b01..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/Settings.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.luxons.sevenwonders.game; - -import java.util.Map; -import java.util.Random; - -import org.luxons.sevenwonders.game.api.CustomizableSettings; -import org.luxons.sevenwonders.game.data.definitions.WonderSide; -import org.luxons.sevenwonders.game.data.definitions.WonderSidePickMethod; - -public class Settings { - - private final Random random; - - private final int timeLimitInSeconds; - - private final int nbPlayers; - - private final int initialGold; - - private final int discardedCardGold; - - private final int defaultTradingCost; - - private final int pointsPer3Gold; - - private final WonderSidePickMethod wonderSidePickMethod; - - private WonderSide lastPickedSide = null; - - private final int lostPointsPerDefeat; - - private final Map<Integer, Integer> wonPointsPerVictoryPerAge; - - public Settings(int nbPlayers) { - this(nbPlayers, new CustomizableSettings()); - } - - public Settings(int nbPlayers, CustomizableSettings customSettings) { - long seed = customSettings.getRandomSeedForTests(); - this.random = seed > 0 ? new Random(seed) : new Random(); - this.timeLimitInSeconds = customSettings.getTimeLimitInSeconds(); - this.nbPlayers = nbPlayers; - this.initialGold = customSettings.getInitialGold(); - this.discardedCardGold = customSettings.getDiscardedCardGold(); - this.defaultTradingCost = customSettings.getDefaultTradingCost(); - this.pointsPer3Gold = customSettings.getPointsPer3Gold(); - this.wonderSidePickMethod = customSettings.getWonderSidePickMethod(); - this.lostPointsPerDefeat = customSettings.getLostPointsPerDefeat(); - this.wonPointsPerVictoryPerAge = customSettings.getWonPointsPerVictoryPerAge(); - } - - public Random getRandom() { - return random; - } - - public int getTimeLimitInSeconds() { - return timeLimitInSeconds; - } - - public int getNbPlayers() { - return nbPlayers; - } - - public int getInitialGold() { - return initialGold; - } - - public int getDiscardedCardGold() { - return discardedCardGold; - } - - public int getDefaultTradingCost() { - return defaultTradingCost; - } - - public int getPointsPer3Gold() { - return pointsPer3Gold; - } - - public WonderSide pickWonderSide() { - WonderSide newSide = wonderSidePickMethod.pickSide(getRandom(), lastPickedSide); - lastPickedSide = newSide; - return newSide; - } - - public int getLostPointsPerDefeat() { - return lostPointsPerDefeat; - } - - public Map<Integer, Integer> getWonPointsPerVictoryPerAge() { - return wonPointsPerVictoryPerAge; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/api/Action.java b/backend/src/main/java/org/luxons/sevenwonders/game/api/Action.java deleted file mode 100644 index 88e392f9..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/api/Action.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.luxons.sevenwonders.game.api; - -public enum Action { - PLAY("Pick the card you want to play or discard."), - PLAY_2("Pick the first card you want to play or discard. Note that you have the ability to play these 2 last cards." - + " You will choose how to play the last one during your next turn."), - PLAY_LAST("You have the special ability to play your last card. Choose how you want to play it."), - PICK_NEIGHBOR_GUILD("Choose a Guild card (purple) that you want to copy from one of your neighbours."), - WAIT("Please wait for other players to perform extra actions."); - - private final String message; - - Action(String message) { - this.message = message; - } - - public String getMessage() { - return message; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/api/CustomizableSettings.java b/backend/src/main/java/org/luxons/sevenwonders/game/api/CustomizableSettings.java deleted file mode 100644 index 2cbf8727..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/api/CustomizableSettings.java +++ /dev/null @@ -1,128 +0,0 @@ -package org.luxons.sevenwonders.game.api; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import org.luxons.sevenwonders.game.data.definitions.WonderSidePickMethod; - -public class CustomizableSettings { - - private long randomSeedForTests = -1; - - private int timeLimitInSeconds = 45; - - private WonderSidePickMethod wonderSidePickMethod = WonderSidePickMethod.EACH_RANDOM; - - private int initialGold = 3; - - private int discardedCardGold = 3; - - private int defaultTradingCost = 2; - - private int pointsPer3Gold = 1; - - private int lostPointsPerDefeat = 1; - - private Map<Integer, Integer> wonPointsPerVictoryPerAge = new HashMap<>(); - - public CustomizableSettings() { - wonPointsPerVictoryPerAge.put(1, 1); - wonPointsPerVictoryPerAge.put(2, 3); - wonPointsPerVictoryPerAge.put(3, 5); - } - - public long getRandomSeedForTests() { - return randomSeedForTests; - } - - public void setRandomSeedForTests(long randomSeedForTests) { - this.randomSeedForTests = randomSeedForTests; - } - - public int getTimeLimitInSeconds() { - return timeLimitInSeconds; - } - - public void setTimeLimitInSeconds(int timeLimitInSeconds) { - this.timeLimitInSeconds = timeLimitInSeconds; - } - - public int getInitialGold() { - return initialGold; - } - - public void setInitialGold(int initialGold) { - this.initialGold = initialGold; - } - - public int getDiscardedCardGold() { - return discardedCardGold; - } - - public void setDiscardedCardGold(int discardedCardGold) { - this.discardedCardGold = discardedCardGold; - } - - public int getDefaultTradingCost() { - return defaultTradingCost; - } - - public void setDefaultTradingCost(int defaultTradingCost) { - this.defaultTradingCost = defaultTradingCost; - } - - public int getPointsPer3Gold() { - return pointsPer3Gold; - } - - public void setPointsPer3Gold(int pointsPer3Gold) { - this.pointsPer3Gold = pointsPer3Gold; - } - - public WonderSidePickMethod getWonderSidePickMethod() { - return wonderSidePickMethod; - } - - public void setWonderSidePickMethod(WonderSidePickMethod wonderSidePickMethod) { - this.wonderSidePickMethod = wonderSidePickMethod; - } - - public int getLostPointsPerDefeat() { - return lostPointsPerDefeat; - } - - public void setLostPointsPerDefeat(int lostPointsPerDefeat) { - this.lostPointsPerDefeat = lostPointsPerDefeat; - } - - public Map<Integer, Integer> getWonPointsPerVictoryPerAge() { - return wonPointsPerVictoryPerAge; - } - - public void setWonPointsPerVictoryPerAge(Map<Integer, Integer> wonPointsPerVictoryPerAge) { - this.wonPointsPerVictoryPerAge = wonPointsPerVictoryPerAge; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - CustomizableSettings that = (CustomizableSettings) o; - return randomSeedForTests == that.randomSeedForTests && timeLimitInSeconds == that.timeLimitInSeconds - && initialGold == that.initialGold && discardedCardGold == that.discardedCardGold - && defaultTradingCost == that.defaultTradingCost && pointsPer3Gold == that.pointsPer3Gold - && lostPointsPerDefeat == that.lostPointsPerDefeat && wonderSidePickMethod == that.wonderSidePickMethod - && Objects.equals(wonPointsPerVictoryPerAge, that.wonPointsPerVictoryPerAge); - } - - @Override - public int hashCode() { - return Objects.hash(randomSeedForTests, timeLimitInSeconds, wonderSidePickMethod, initialGold, - discardedCardGold, defaultTradingCost, pointsPer3Gold, lostPointsPerDefeat, wonPointsPerVictoryPerAge); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/api/HandCard.java b/backend/src/main/java/org/luxons/sevenwonders/game/api/HandCard.java deleted file mode 100644 index a97679c2..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/api/HandCard.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.luxons.sevenwonders.game.api; - -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.cards.Card; - -/** - * A card with contextual information relative to the hand it is sitting in. The extra information is especially useful - * because it frees the client from a painful business logic implementation. - */ -public class HandCard { - - private final Card card; - - private final boolean chainable; - - private final boolean free; - - private final boolean playable; - - public HandCard(Card card, Table table, int playerIndex) { - Board board = table.getBoard(playerIndex); - this.card = card; - this.chainable = card.isChainableOn(board); - this.free = card.isFreeFor(board); - this.playable = card.isPlayable(table, playerIndex); - } - - public Card getCard() { - return card; - } - - public boolean isChainable() { - return chainable; - } - - public boolean isFree() { - return free; - } - - public boolean isPlayable() { - return playable; - } - - @Override - public String toString() { - return "HandCard{" + "card=" + card + ", chainable=" + chainable + ", free=" + free + ", playable=" + playable - + '}'; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerMove.java deleted file mode 100644 index 179656cb..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerMove.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.luxons.sevenwonders.game.api; - -import java.util.ArrayList; -import java.util.List; -import javax.validation.constraints.NotNull; - -import org.luxons.sevenwonders.game.moves.MoveType; -import org.luxons.sevenwonders.game.resources.BoughtResources; - -public class PlayerMove { - - @NotNull - private MoveType type; - - @NotNull - private String cardName; - - private List<BoughtResources> boughtResources = new ArrayList<>(); - - public MoveType getType() { - return type; - } - - public void setType(MoveType type) { - this.type = type; - } - - public String getCardName() { - return cardName; - } - - public void setCardName(String cardName) { - this.cardName = cardName; - } - - public List<BoughtResources> getBoughtResources() { - return boughtResources; - } - - public void setBoughtResources(List<BoughtResources> boughtResources) { - this.boughtResources = boughtResources; - } - - @Override - public String toString() { - return type + " '" + cardName + '\''; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerTurnInfo.java b/backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerTurnInfo.java deleted file mode 100644 index 3d92d40b..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerTurnInfo.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.luxons.sevenwonders.game.api; - -import java.util.List; - -import org.luxons.sevenwonders.game.cards.Card; - -public class PlayerTurnInfo { - - private final int playerIndex; - - private final Table table; - - private final int currentAge; - - private Action action; - - private List<HandCard> hand; - - private List<Card> neighbourGuildCards; - - private String message; - - public PlayerTurnInfo(int playerIndex, Table table) { - this.playerIndex = playerIndex; - this.table = table; - this.currentAge = table.getCurrentAge(); - } - - public int getPlayerIndex() { - return playerIndex; - } - - public Table getTable() { - return table; - } - - public int getCurrentAge() { - return currentAge; - } - - public List<HandCard> getHand() { - return hand; - } - - public void setHand(List<HandCard> hand) { - this.hand = hand; - } - - public List<Card> getNeighbourGuildCards() { - return neighbourGuildCards; - } - - public void setNeighbourGuildCards(List<Card> neighbourGuildCards) { - this.neighbourGuildCards = neighbourGuildCards; - } - - public Action getAction() { - return action; - } - - public void setAction(Action action) { - this.action = action; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - @Override - public String toString() { - return "PlayerTurnInfo{" + "playerIndex=" + playerIndex + ", action=" + action + ", hand=" + hand + '}'; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/api/Table.java b/backend/src/main/java/org/luxons/sevenwonders/game/api/Table.java deleted file mode 100644 index 82f9055a..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/api/Table.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.luxons.sevenwonders.game.api; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.boards.RelativeBoardPosition; -import org.luxons.sevenwonders.game.cards.Card; -import org.luxons.sevenwonders.game.cards.Color; -import org.luxons.sevenwonders.game.cards.HandRotationDirection; -import org.luxons.sevenwonders.game.moves.Move; -import org.luxons.sevenwonders.game.resources.Provider; - -/** - * The table contains what is visible by all the players in the game: the boards and their played cards, and the - * players' information. - */ -public class Table { - - private final int nbPlayers; - - private final List<Board> boards; - - private int currentAge = 0; - - private List<Move> lastPlayedMoves; - - public Table(List<Board> boards) { - this.nbPlayers = boards.size(); - this.boards = boards; - } - - public int getNbPlayers() { - return nbPlayers; - } - - public List<Board> getBoards() { - return boards; - } - - public Board getBoard(int playerIndex) { - return boards.get(playerIndex); - } - - public Board getBoard(int playerIndex, RelativeBoardPosition position) { - return boards.get(position.getIndexFrom(playerIndex, nbPlayers)); - } - - public List<Move> getLastPlayedMoves() { - return lastPlayedMoves; - } - - public void setLastPlayedMoves(List<Move> lastPlayedMoves) { - this.lastPlayedMoves = lastPlayedMoves; - } - - public int getCurrentAge() { - return currentAge; - } - - public void increaseCurrentAge() { - this.currentAge++; - } - - public HandRotationDirection getHandRotationDirection() { - return HandRotationDirection.forAge(currentAge); - } - - public void resolveMilitaryConflicts() { - for (int i = 0; i < nbPlayers; i++) { - Board board1 = getBoard(i); - Board board2 = getBoard((i + 1) % nbPlayers); - resolveConflict(board1, board2, currentAge); - } - } - - private static void resolveConflict(Board board1, Board board2, int age) { - int shields1 = board1.getMilitary().getNbShields(); - int shields2 = board2.getMilitary().getNbShields(); - if (shields1 < shields2) { - board2.getMilitary().victory(age); - board1.getMilitary().defeat(); - } else if (shields1 > shields2) { - board1.getMilitary().victory(age); - board2.getMilitary().defeat(); - } - } - - public List<Card> getNeighbourGuildCards(int playerIndex) { - return getNeighbourBoards(playerIndex).stream() - .map(Board::getPlayedCards) - .flatMap(List::stream) - .filter(c -> c.getColor() == Color.PURPLE) - .collect(Collectors.toList()); - } - - private List<Board> getNeighbourBoards(int playerIndex) { - Provider[] providers = Provider.values(); - List<Board> boards = new ArrayList<>(providers.length); - for (Provider provider : providers) { - boards.add(getBoard(playerIndex, provider.getBoardPosition())); - } - return boards; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/boards/Board.java b/backend/src/main/java/org/luxons/sevenwonders/game/boards/Board.java deleted file mode 100644 index a59bbfae..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/boards/Board.java +++ /dev/null @@ -1,175 +0,0 @@ -package org.luxons.sevenwonders.game.boards; - -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.cards.Card; -import org.luxons.sevenwonders.game.cards.Color; -import org.luxons.sevenwonders.game.effects.SpecialAbility; -import org.luxons.sevenwonders.game.resources.Production; -import org.luxons.sevenwonders.game.resources.TradingRules; -import org.luxons.sevenwonders.game.scoring.PlayerScore; -import org.luxons.sevenwonders.game.scoring.ScoreCategory; -import org.luxons.sevenwonders.game.wonders.Wonder; - -public class Board { - - private final Wonder wonder; - - private final int playerIndex; - - private final List<Card> playedCards = new ArrayList<>(); - - private final Production production = new Production(); - - private final Production publicProduction = new Production(); - - private final Science science = new Science(); - - private final TradingRules tradingRules; - - private final Military military; - - private final Set<SpecialAbility> specialAbilities = EnumSet.noneOf(SpecialAbility.class); - - private Map<Integer, Boolean> consumedFreeCards = new HashMap<>(); - - private Card copiedGuild; - - private int gold; - - private int pointsPer3Gold; - - public Board(Wonder wonder, int playerIndex, Settings settings) { - this.wonder = wonder; - this.playerIndex = playerIndex; - this.gold = settings.getInitialGold(); - this.tradingRules = new TradingRules(settings.getDefaultTradingCost()); - this.military = new Military(settings.getLostPointsPerDefeat(), settings.getWonPointsPerVictoryPerAge()); - this.pointsPer3Gold = settings.getPointsPer3Gold(); - this.production.addFixedResource(wonder.getInitialResource(), 1); - this.publicProduction.addFixedResource(wonder.getInitialResource(), 1); - } - - public Wonder getWonder() { - return wonder; - } - - public List<Card> getPlayedCards() { - return playedCards; - } - - public void addCard(Card card) { - playedCards.add(card); - } - - int getNbCardsOfColor(List<Color> colorFilter) { - return (int) playedCards.stream().filter(c -> colorFilter.contains(c.getColor())).count(); - } - - public boolean isPlayed(String cardName) { - return getPlayedCards().stream().map(Card::getName).filter(name -> name.equals(cardName)).count() > 0; - } - - public Production getProduction() { - return production; - } - - public Production getPublicProduction() { - return publicProduction; - } - - public TradingRules getTradingRules() { - return tradingRules; - } - - public Science getScience() { - return science; - } - - public int getGold() { - return gold; - } - - public void setGold(int amount) { - this.gold = amount; - } - - public void addGold(int amount) { - this.gold += amount; - } - - public void removeGold(int amount) { - if (gold < amount) { - throw new InsufficientFundsException(gold, amount); - } - this.gold -= amount; - } - - public Military getMilitary() { - return military; - } - - public void addSpecial(SpecialAbility specialAbility) { - specialAbilities.add(specialAbility); - } - - public boolean hasSpecial(SpecialAbility specialAbility) { - return specialAbilities.contains(specialAbility); - } - - public boolean canPlayFreeCard(int age) { - return hasSpecial(SpecialAbility.ONE_FREE_PER_AGE) && !consumedFreeCards.getOrDefault(age, false); - } - - public void consumeFreeCard(int age) { - consumedFreeCards.put(age, true); - } - - public void setCopiedGuild(Card copiedGuild) { - if (copiedGuild.getColor() != Color.PURPLE) { - throw new IllegalArgumentException("The given card '" + copiedGuild + "' is not a Guild card"); - } - this.copiedGuild = copiedGuild; - } - - public Card getCopiedGuild() { - return copiedGuild; - } - - public PlayerScore computePoints(Table table) { - PlayerScore score = new PlayerScore(gold); - score.put(ScoreCategory.CIVIL, computePointsForCards(table, Color.BLUE)); - score.put(ScoreCategory.MILITARY, military.getTotalPoints()); - score.put(ScoreCategory.SCIENCE, science.computePoints()); - score.put(ScoreCategory.TRADE, computePointsForCards(table, Color.YELLOW)); - score.put(ScoreCategory.GUILD, computePointsForCards(table, Color.PURPLE)); - score.put(ScoreCategory.WONDER, wonder.computePoints(table, playerIndex)); - score.put(ScoreCategory.GOLD, computeGoldPoints()); - return score; - } - - private int computePointsForCards(Table table, Color color) { - return playedCards.stream() - .filter(c -> c.getColor() == color) - .flatMap(c -> c.getEffects().stream()) - .mapToInt(e -> e.computePoints(table, playerIndex)) - .sum(); - } - - private int computeGoldPoints() { - return gold / 3 * pointsPer3Gold; - } - - static class InsufficientFundsException extends RuntimeException { - InsufficientFundsException(int current, int required) { - super(String.format("Current balance is %d gold, but %d are required", current, required)); - } - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/boards/BoardElementType.java b/backend/src/main/java/org/luxons/sevenwonders/game/boards/BoardElementType.java deleted file mode 100644 index e50f4ea0..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/boards/BoardElementType.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.luxons.sevenwonders.game.boards; - -import java.util.List; - -import org.luxons.sevenwonders.game.cards.Color; - -public enum BoardElementType { - CARD { - @Override - public int getElementCount(Board board, List<Color> colors) { - return board.getNbCardsOfColor(colors); - } - }, - BUILT_WONDER_STAGES { - @Override - public int getElementCount(Board board, List<Color> colors) { - return board.getWonder().getNbBuiltStages(); - } - }, - DEFEAT_TOKEN { - @Override - public int getElementCount(Board board, List<Color> colors) { - return board.getMilitary().getNbDefeatTokens(); - } - }; - - public abstract int getElementCount(Board board, List<Color> colors); -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/boards/Military.java b/backend/src/main/java/org/luxons/sevenwonders/game/boards/Military.java deleted file mode 100644 index e5cc7033..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/boards/Military.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.luxons.sevenwonders.game.boards; - -import java.util.Map; - -public class Military { - - private final int lostPointsPerDefeat; - - private final Map<Integer, Integer> wonPointsPerVictoryPerAge; - - private int nbShields = 0; - - private int totalPoints = 0; - - private int nbDefeatTokens = 0; - - Military(int lostPointsPerDefeat, Map<Integer, Integer> wonPointsPerVictoryPerAge) { - this.lostPointsPerDefeat = lostPointsPerDefeat; - this.wonPointsPerVictoryPerAge = wonPointsPerVictoryPerAge; - } - - public int getNbShields() { - return nbShields; - } - - public void addShields(int nbShields) { - this.nbShields += nbShields; - } - - public int getTotalPoints() { - return totalPoints; - } - - public int getNbDefeatTokens() { - return nbDefeatTokens; - } - - public void victory(int age) { - Integer wonPoints = wonPointsPerVictoryPerAge.get(age); - if (wonPoints == null) { - throw new UnknownAgeException(age); - } - totalPoints += wonPoints; - } - - public void defeat() { - totalPoints -= lostPointsPerDefeat; - nbDefeatTokens++; - } - - static final class UnknownAgeException extends IllegalArgumentException { - UnknownAgeException(int unknownAge) { - super(String.valueOf(unknownAge)); - } - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.java b/backend/src/main/java/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.java deleted file mode 100644 index 16b2f3a9..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.luxons.sevenwonders.game.boards; - -public enum RelativeBoardPosition { - LEFT { - @Override - public int getIndexFrom(int playerIndex, int nbPlayers) { - return wrapIndex(playerIndex - 1, nbPlayers); - } - }, - SELF { - @Override - public int getIndexFrom(int playerIndex, int nbPlayers) { - return playerIndex; - } - }, - RIGHT { - @Override - public int getIndexFrom(int playerIndex, int nbPlayers) { - return wrapIndex(playerIndex + 1, nbPlayers); - } - }; - - public abstract int getIndexFrom(int playerIndex, int nbPlayers); - - int wrapIndex(int index, int nbPlayers) { - return Math.floorMod(index, nbPlayers); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/boards/Science.java b/backend/src/main/java/org/luxons/sevenwonders/game/boards/Science.java deleted file mode 100644 index 34928bcc..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/boards/Science.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.luxons.sevenwonders.game.boards; - -import java.util.Arrays; -import java.util.EnumMap; -import java.util.Map; - -public class Science { - - private Map<ScienceType, Integer> quantities = new EnumMap<>(ScienceType.class); - - private int jokers; - - public void add(ScienceType type, int quantity) { - quantities.merge(type, quantity, (x, y) -> x + y); - } - - public void addJoker(int quantity) { - jokers += quantity; - } - - public int getJokers() { - return jokers; - } - - public void addAll(Science science) { - science.quantities.forEach(this::add); - jokers += science.jokers; - } - - public int getQuantity(ScienceType type) { - return quantities.getOrDefault(type, 0); - } - - public int size() { - return quantities.values().stream().mapToInt(q -> q).sum() + jokers; - } - - public int computePoints() { - ScienceType[] types = ScienceType.values(); - Integer[] values = new Integer[types.length]; - for (int i = 0; i < types.length; i++) { - values[i] = quantities.getOrDefault(types[i], 0); - } - return computePoints(values, jokers); - } - - private static int computePoints(Integer[] values, int jokers) { - if (jokers == 0) { - return computePointsNoJoker(values); - } - int maxPoints = 0; - for (int i = 0; i < values.length; i++) { - values[i]++; - maxPoints = Math.max(maxPoints, computePoints(values, jokers - 1)); - values[i]--; - } - return maxPoints; - } - - private static int computePointsNoJoker(Integer[] values) { - int independentSquaresSum = Arrays.stream(values).mapToInt(i -> i * i).sum(); - int nbGroupsOfAll = Arrays.stream(values).mapToInt(i -> i).min().orElse(0); - return independentSquaresSum + nbGroupsOfAll * 7; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/boards/ScienceType.java b/backend/src/main/java/org/luxons/sevenwonders/game/boards/ScienceType.java deleted file mode 100644 index f1b14c6d..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/boards/ScienceType.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.luxons.sevenwonders.game.boards; - -public enum ScienceType { - COMPASS, - WHEEL, - TABLET -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Card.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/Card.java deleted file mode 100644 index 084d19a5..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Card.java +++ /dev/null @@ -1,128 +0,0 @@ -package org.luxons.sevenwonders.game.cards; - -import java.util.List; -import java.util.Objects; - -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.effects.Effect; -import org.luxons.sevenwonders.game.resources.BoughtResources; - -public class Card { - - private final String name; - - private final Color color; - - private final Requirements requirements; - - private final List<Effect> effects; - - private final String chainParent; - - private final List<String> chainChildren; - - private final String image; - - private CardBack back; - - public Card(String name, Color color, Requirements requirements, List<Effect> effects, String chainParent, - List<String> chainChildren, String image) { - this.name = name; - this.color = color; - this.requirements = requirements; - this.chainParent = chainParent; - this.effects = effects; - this.chainChildren = chainChildren; - this.image = image; - } - - public String getName() { - return name; - } - - public Color getColor() { - return color; - } - - public String getChainParent() { - return chainParent; - } - - public Requirements getRequirements() { - return requirements; - } - - public List<Effect> getEffects() { - return effects; - } - - public List<String> getChainChildren() { - return chainChildren; - } - - public String getImage() { - return image; - } - - public CardBack getBack() { - return back; - } - - public void setBack(CardBack back) { - this.back = back; - } - - private boolean isAllowedOnBoard(Board board) { - return !board.isPlayed(name); // cannot play twice the same card - } - - public boolean isChainableOn(Board board) { - return isAllowedOnBoard(board) && board.isPlayed(chainParent); - } - - public boolean isFreeFor(Board board) { - if (!isAllowedOnBoard(board)) { - return false; - } - return isChainableOn(board) || (requirements.areMetWithoutNeighboursBy(board) && requirements.getGold() == 0); - } - - public boolean isPlayable(Table table, int playerIndex) { - Board board = table.getBoard(playerIndex); - if (!isAllowedOnBoard(board)) { - return false; - } - return isChainableOn(board) || requirements.couldBeMetBy(table, playerIndex); - } - - public void applyTo(Table table, int playerIndex, List<BoughtResources> boughtResources) { - Board playerBoard = table.getBoard(playerIndex); - if (!isChainableOn(playerBoard)) { - requirements.pay(table, playerIndex, boughtResources); - } - effects.forEach(e -> e.apply(table, playerIndex)); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Card card = (Card) o; - return Objects.equals(name, card.name); - } - - @Override - public int hashCode() { - return Objects.hash(name); - } - - @Override - public String toString() { - return "Card{" + name + '}'; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/CardBack.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/CardBack.java deleted file mode 100644 index f925b6c4..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/CardBack.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.luxons.sevenwonders.game.cards; - -public class CardBack { - - private final String image; - - public CardBack(String image) { - this.image = image; - } - - public String getImage() { - return image; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Color.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/Color.java deleted file mode 100644 index 80d06c55..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Color.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.luxons.sevenwonders.game.cards; - -public enum Color { - BROWN, - GREY, - YELLOW, - BLUE, - GREEN, - RED, - PURPLE -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Decks.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/Decks.java deleted file mode 100644 index aa2b00bf..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Decks.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.luxons.sevenwonders.game.cards; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class Decks { - - private Map<Integer, List<Card>> cardsPerAge = new HashMap<>(); - - public Decks(Map<Integer, List<Card>> cardsPerAge) { - this.cardsPerAge = cardsPerAge; - } - - public Card getCard(String cardName) throws CardNotFoundException { - return cardsPerAge.values() - .stream() - .flatMap(List::stream) - .filter(c -> c.getName().equals(cardName)) - .findAny() - .orElseThrow(() -> new CardNotFoundException(cardName)); - } - - public Hands deal(int age, int nbPlayers) { - List<Card> deck = getDeck(age); - validateNbCards(deck, nbPlayers); - return deal(deck, nbPlayers); - } - - private List<Card> getDeck(int age) { - List<Card> deck = cardsPerAge.get(age); - if (deck == null) { - throw new IllegalArgumentException("No deck found for age " + age); - } - return deck; - } - - private void validateNbCards(List<Card> deck, int nbPlayers) { - if (nbPlayers == 0) { - throw new IllegalArgumentException("Cannot deal cards between 0 players"); - } - if (deck.size() % nbPlayers != 0) { - throw new IllegalArgumentException( - String.format("Cannot deal %d cards evenly between %d players", deck.size(), nbPlayers)); - } - } - - private Hands deal(List<Card> deck, int nbPlayers) { - Map<Integer, List<Card>> hands = new HashMap<>(nbPlayers); - for (int i = 0; i < nbPlayers; i++) { - hands.put(i, new ArrayList<>()); - } - for (int i = 0; i < deck.size(); i++) { - hands.get(i % nbPlayers).add(deck.get(i)); - } - return new Hands(hands, nbPlayers); - } - - class CardNotFoundException extends RuntimeException { - CardNotFoundException(String message) { - super(message); - } - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/HandRotationDirection.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/HandRotationDirection.java deleted file mode 100644 index f3902fb5..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/HandRotationDirection.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.luxons.sevenwonders.game.cards; - -public enum HandRotationDirection { - LEFT(-1), - RIGHT(1); - - private final int indexOffset; - - HandRotationDirection(int i) { - this.indexOffset = i; - } - - public int getIndexOffset() { - return indexOffset; - } - - public static HandRotationDirection forAge(int age) { - // clockwise (pass to the left) at age 1, and alternating - return age % 2 == 0 ? HandRotationDirection.RIGHT : HandRotationDirection.LEFT; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Hands.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/Hands.java deleted file mode 100644 index 4a8bc143..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Hands.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.luxons.sevenwonders.game.cards; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.luxons.sevenwonders.game.api.HandCard; -import org.luxons.sevenwonders.game.api.Table; - -public class Hands { - - private final int nbPlayers; - - private Map<Integer, List<Card>> hands; - - Hands(Map<Integer, List<Card>> hands, int nbPlayers) { - this.hands = hands; - this.nbPlayers = nbPlayers; - } - - public List<Card> get(int playerIndex) { - if (!hands.containsKey(playerIndex)) { - throw new PlayerIndexOutOfBoundsException(playerIndex); - } - return hands.get(playerIndex); - } - - public List<HandCard> createHand(Table table, int playerIndex) { - return hands.get(playerIndex) - .stream() - .map(c -> new HandCard(c, table, playerIndex)) - .collect(Collectors.toList()); - } - - public Hands rotate(HandRotationDirection direction) { - Map<Integer, List<Card>> newHands = new HashMap<>(hands.size()); - for (int i = 0; i < nbPlayers; i++) { - int newIndex = Math.floorMod(i + direction.getIndexOffset(), nbPlayers); - newHands.put(newIndex, hands.get(i)); - } - return new Hands(newHands, nbPlayers); - } - - public boolean isEmpty() { - return hands.values().stream().allMatch(List::isEmpty); - } - - public boolean maxOneCardRemains() { - return hands.values().stream().mapToInt(List::size).max().orElse(0) <= 1; - } - - public List<Card> gatherAndClear() { - List<Card> remainingCards = hands.values().stream().flatMap(List::stream).collect(Collectors.toList()); - hands.clear(); - return remainingCards; - } - - class PlayerIndexOutOfBoundsException extends ArrayIndexOutOfBoundsException { - PlayerIndexOutOfBoundsException(int index) { - super(index); - } - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java deleted file mode 100644 index 93683ff8..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.luxons.sevenwonders.game.cards; - -import java.util.List; - -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.boards.RelativeBoardPosition; -import org.luxons.sevenwonders.game.resources.BestPriceCalculator; -import org.luxons.sevenwonders.game.resources.BoughtResources; -import org.luxons.sevenwonders.game.resources.Resources; - -public class Requirements { - - private int gold; - - private Resources resources = new Resources(); - - public int getGold() { - return gold; - } - - public void setGold(int gold) { - this.gold = gold; - } - - public Resources getResources() { - return resources; - } - - public void setResources(Resources resources) { - this.resources = resources; - } - - /** - * Returns whether the given board meets these requirements on its own. - * - * @param board - * the board to check - * - * @return true if the given board meets these requirements without any transaction with its neighbours - */ - boolean areMetWithoutNeighboursBy(Board board) { - return hasRequiredGold(board) && producesRequiredResources(board); - } - - /** - * Returns whether the given board meets these requirements, if the specified resources are bought from neighbours. - * - * @param board - * the board to check - * @param boughtResources - * the resources the player intends to buy - * - * @return true if the given board meets these requirements - */ - public boolean areMetWithHelpBy(Board board, List<BoughtResources> boughtResources) { - if (!hasRequiredGold(board, boughtResources)) { - return false; - } - if (producesRequiredResources(board)) { - return true; - } - return producesRequiredResourcesWithHelp(board, boughtResources); - } - - /** - * Returns whether the given player's board could meet these requirements, on its own or by buying resources to - * neighbours. - * - * @param table - * the current game table - * @param playerIndex - * the index of the player to check - * - * @return true if the given player's board could meet these requirements - */ - boolean couldBeMetBy(Table table, int playerIndex) { - Board board = table.getBoard(playerIndex); - if (!hasRequiredGold(board)) { - return false; - } - if (producesRequiredResources(board)) { - return true; - } - return BestPriceCalculator.bestPrice(resources, table, playerIndex) <= board.getGold() - gold; - } - - private boolean hasRequiredGold(Board board) { - return board.getGold() >= gold; - } - - private boolean hasRequiredGold(Board board, List<BoughtResources> boughtResources) { - int resourcesPrice = board.getTradingRules().computeCost(boughtResources); - return board.getGold() >= gold + resourcesPrice; - } - - private boolean producesRequiredResources(Board board) { - return board.getProduction().contains(resources); - } - - private boolean producesRequiredResourcesWithHelp(Board board, List<BoughtResources> boughtResources) { - Resources totalBoughtResources = getTotalResources(boughtResources); - Resources remainingResources = this.resources.minus(totalBoughtResources); - return board.getProduction().contains(remainingResources); - } - - private static Resources getTotalResources(List<BoughtResources> boughtResources) { - return boughtResources.stream().map(BoughtResources::getResources).reduce(new Resources(), (r1, r2) -> { - r1.addAll(r2); - return r1; - }); - } - - void pay(Table table, int playerIndex, List<BoughtResources> boughtResources) { - table.getBoard(playerIndex).removeGold(gold); - payBoughtResources(table, playerIndex, boughtResources); - } - - private void payBoughtResources(Table table, int playerIndex, List<BoughtResources> boughtResourcesList) { - boughtResourcesList.forEach(res -> payBoughtResources(table, playerIndex, res)); - } - - private void payBoughtResources(Table table, int playerIndex, BoughtResources boughtResources) { - Board board = table.getBoard(playerIndex); - int price = board.getTradingRules().computeCost(boughtResources); - board.removeGold(price); - RelativeBoardPosition providerPosition = boughtResources.getProvider().getBoardPosition(); - Board providerBoard = table.getBoard(playerIndex, providerPosition); - providerBoard.addGold(price); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java deleted file mode 100644 index 7604ca6a..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.luxons.sevenwonders.game.data; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import org.luxons.sevenwonders.game.Game; -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.api.CustomizableSettings; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.cards.Decks; -import org.luxons.sevenwonders.game.data.definitions.DecksDefinition; -import org.luxons.sevenwonders.game.data.definitions.WonderDefinition; -import org.luxons.sevenwonders.game.wonders.Wonder; - -public class GameDefinition { - - /** - * This value is heavily dependent on the JSON data. Any change must be carefully thought through. - */ - private static final int MIN_PLAYERS = 3; - - /** - * This value is heavily dependent on the JSON data. Any change must be carefully thought through. - */ - private static final int MAX_PLAYERS = 7; - - private WonderDefinition[] wonders; - - private DecksDefinition decksDefinition; - - GameDefinition(WonderDefinition[] wonders, DecksDefinition decksDefinition) { - this.wonders = wonders; - this.decksDefinition = decksDefinition; - } - - public int getMinPlayers() { - return MIN_PLAYERS; - } - - public int getMaxPlayers() { - return MAX_PLAYERS; - } - - public Game initGame(long id, CustomizableSettings customSettings, int nbPlayers) { - Settings settings = new Settings(nbPlayers, customSettings); - List<Board> boards = assignBoards(settings, nbPlayers); - Decks decks = decksDefinition.create(settings); - return new Game(id, settings, nbPlayers, boards, decks); - } - - private List<Board> assignBoards(Settings settings, int nbPlayers) { - List<WonderDefinition> randomizedWonders = Arrays.asList(wonders); - Collections.shuffle(randomizedWonders, settings.getRandom()); - - List<Board> boards = new ArrayList<>(nbPlayers); - for (int i = 0; i < nbPlayers; i++) { - WonderDefinition def = randomizedWonders.get(i); - Wonder w = def.create(settings); - Board b = new Board(w, i, settings); - boards.add(b); - } - return boards; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java deleted file mode 100644 index f0da6d63..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.luxons.sevenwonders.game.data; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.lang.reflect.Type; -import java.util.List; - -import org.luxons.sevenwonders.game.data.definitions.DecksDefinition; -import org.luxons.sevenwonders.game.data.definitions.WonderDefinition; -import org.luxons.sevenwonders.game.data.serializers.NumericEffectSerializer; -import org.luxons.sevenwonders.game.data.serializers.ProductionIncreaseSerializer; -import org.luxons.sevenwonders.game.data.serializers.ProductionSerializer; -import org.luxons.sevenwonders.game.data.serializers.ResourceTypeSerializer; -import org.luxons.sevenwonders.game.data.serializers.ResourceTypesSerializer; -import org.luxons.sevenwonders.game.data.serializers.ResourcesSerializer; -import org.luxons.sevenwonders.game.data.serializers.ScienceProgressSerializer; -import org.luxons.sevenwonders.game.effects.GoldIncrease; -import org.luxons.sevenwonders.game.effects.MilitaryReinforcements; -import org.luxons.sevenwonders.game.effects.ProductionIncrease; -import org.luxons.sevenwonders.game.effects.RawPointsIncrease; -import org.luxons.sevenwonders.game.effects.ScienceProgress; -import org.luxons.sevenwonders.game.resources.Production; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.resources.Resources; -import org.springframework.stereotype.Component; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; - -@Component -public class GameDefinitionLoader { - - private static final String BASE_PACKAGE = GameDefinitionLoader.class.getPackage().getName(); - - private static final String BASE_PACKAGE_PATH = '/' + BASE_PACKAGE.replace('.', '/'); - - private static final String CARDS_FILE = "cards.json"; - - private static final String WONDERS_FILE = "wonders.json"; - - private final GameDefinition gameDefinition; - - public GameDefinitionLoader() { - gameDefinition = load(); - } - - public GameDefinition getGameDefinition() { - return gameDefinition; - } - - private static GameDefinition load() { - return new GameDefinition(loadWonders(), loadDecks()); - } - - private static WonderDefinition[] loadWonders() { - return readJsonFile(WONDERS_FILE, WonderDefinition[].class); - } - - private static DecksDefinition loadDecks() { - return readJsonFile(CARDS_FILE, DecksDefinition.class); - } - - private static <T> T readJsonFile(String filename, Class<T> clazz) { - InputStream in = GameDefinitionLoader.class.getResourceAsStream(BASE_PACKAGE_PATH + '/' + filename); - Reader reader = new BufferedReader(new InputStreamReader(in)); - Gson gson = createGson(); - return gson.fromJson(reader, clazz); - } - - private static Gson createGson() { - Type resourceTypeList = new TypeToken<List<ResourceType>>() {}.getType(); - return new GsonBuilder().disableHtmlEscaping() - .registerTypeAdapter(Resources.class, new ResourcesSerializer()) - .registerTypeAdapter(ResourceType.class, new ResourceTypeSerializer()) - .registerTypeAdapter(resourceTypeList, new ResourceTypesSerializer()) - .registerTypeAdapter(Production.class, new ProductionSerializer()) - .registerTypeAdapter(ProductionIncrease.class, new ProductionIncreaseSerializer()) - .registerTypeAdapter(MilitaryReinforcements.class, new NumericEffectSerializer()) - .registerTypeAdapter(RawPointsIncrease.class, new NumericEffectSerializer()) - .registerTypeAdapter(GoldIncrease.class, new NumericEffectSerializer()) - .registerTypeAdapter(ScienceProgress.class, new ScienceProgressSerializer()) - .create(); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java deleted file mode 100644 index 621bed2c..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.luxons.sevenwonders.game.data.definitions; - -import java.util.List; -import java.util.Map; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.cards.Card; -import org.luxons.sevenwonders.game.cards.Color; -import org.luxons.sevenwonders.game.cards.Requirements; - -@SuppressWarnings("unused") // the fields are injected by Gson -public class CardDefinition implements Definition<Card> { - - private String name; - - private Color color; - - private Requirements requirements; - - private EffectsDefinition effect; - - private String chainParent; - - private List<String> chainChildren; - - private Map<Integer, Integer> countPerNbPlayer; - - private String image; - - @Override - public Card create(Settings settings) { - return new Card(name, color, requirements, effect.create(settings), chainParent, chainChildren, image); - } - - Map<Integer, Integer> getCountPerNbPlayer() { - return countPerNbPlayer; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java deleted file mode 100644 index 6f97e55f..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.luxons.sevenwonders.game.data.definitions; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.cards.Card; -import org.luxons.sevenwonders.game.cards.CardBack; -import org.luxons.sevenwonders.game.cards.Decks; - -@SuppressWarnings("unused,MismatchedQueryAndUpdateOfCollection") // the fields are injected by Gson -public class DecksDefinition implements Definition<Decks> { - - private List<CardDefinition> age1; - - private List<CardDefinition> age2; - - private List<CardDefinition> age3; - - private String age1Back; - - private String age2Back; - - private String age3Back; - - private List<CardDefinition> guildCards; - - @Override - public Decks create(Settings settings) { - Map<Integer, List<Card>> cardsPerAge = new HashMap<>(); - cardsPerAge.put(1, prepareStandardDeck(age1, settings, age1Back)); - cardsPerAge.put(2, prepareStandardDeck(age2, settings, age2Back)); - cardsPerAge.put(3, prepareAge3Deck(settings)); - return new Decks(cardsPerAge); - } - - private static List<Card> prepareStandardDeck(List<CardDefinition> defs, Settings settings, String backImage) { - CardBack back = new CardBack(backImage); - List<Card> cards = createDeck(defs, settings, back); - Collections.shuffle(cards, settings.getRandom()); - return cards; - } - - private List<Card> prepareAge3Deck(Settings settings) { - CardBack back = new CardBack(age3Back); - List<Card> age3deck = createDeck(age3, settings, back); - age3deck.addAll(createGuildCards(settings, back)); - Collections.shuffle(age3deck, settings.getRandom()); - return age3deck; - } - - private static List<Card> createDeck(List<CardDefinition> defs, Settings settings, CardBack back) { - List<Card> cards = new ArrayList<>(); - for (CardDefinition def : defs) { - for (int i = 0; i < def.getCountPerNbPlayer().get(settings.getNbPlayers()); i++) { - Card card = def.create(settings); - card.setBack(back); - cards.add(card); - } - } - return cards; - } - - private List<Card> createGuildCards(Settings settings, CardBack back) { - List<Card> guild = guildCards.stream() - .map((def) -> def.create(settings)) - .peek(c -> c.setBack(back)) - .collect(Collectors.toList()); - Collections.shuffle(guild, settings.getRandom()); - return guild.subList(0, settings.getNbPlayers() + 2); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java deleted file mode 100644 index 6c6b4b19..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.luxons.sevenwonders.game.data.definitions; - -import org.luxons.sevenwonders.game.Settings; - -/** - * Represents a deserialized JSON definition of some data about the game. It is settings-agnostic. An instance of - * in-game data can be generated from this, given specific game settings. - * - * @param <T> - * the type of in-game object that can be generated from this definition - */ -public interface Definition<T> { - - /** - * Creates a T object from the given settings. This method mustn't mutate this Definition as it may be called - * multiple times with different settings. - * - * @param settings - * the game settings to use to generate a game-specific object from this definition - * - * @return the new game-specific object created from this definition - */ - T create(Settings settings); -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java deleted file mode 100644 index e35463d4..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.luxons.sevenwonders.game.data.definitions; - -import java.util.ArrayList; -import java.util.List; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.effects.BonusPerBoardElement; -import org.luxons.sevenwonders.game.effects.Discount; -import org.luxons.sevenwonders.game.effects.Effect; -import org.luxons.sevenwonders.game.effects.GoldIncrease; -import org.luxons.sevenwonders.game.effects.MilitaryReinforcements; -import org.luxons.sevenwonders.game.effects.ProductionIncrease; -import org.luxons.sevenwonders.game.effects.RawPointsIncrease; -import org.luxons.sevenwonders.game.effects.ScienceProgress; -import org.luxons.sevenwonders.game.effects.SpecialAbility; -import org.luxons.sevenwonders.game.effects.SpecialAbilityActivation; - -@SuppressWarnings("unused") // the fields are injected by Gson -public class EffectsDefinition implements Definition<List<Effect>> { - - private GoldIncrease gold; - - private MilitaryReinforcements military; - - private ScienceProgress science; - - private Discount discount; - - private BonusPerBoardElement perBoardElement; - - private ProductionIncrease production; - - private RawPointsIncrease points; - - private SpecialAbility action; - - @Override - public List<Effect> create(Settings settings) { - List<Effect> effects = new ArrayList<>(); - if (gold != null) { - effects.add(gold); - } - if (military != null) { - effects.add(military); - } - if (science != null) { - effects.add(science); - } - if (discount != null) { - effects.add(discount); - } - if (perBoardElement != null) { - effects.add(perBoardElement); - } - if (production != null) { - effects.add(production); - } - if (points != null) { - effects.add(points); - } - if (action != null) { - effects.add(new SpecialAbilityActivation(action)); - } - return effects; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java deleted file mode 100644 index a972a517..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.luxons.sevenwonders.game.data.definitions; - -import java.util.Map; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.wonders.Wonder; - -@SuppressWarnings("unused,MismatchedQueryAndUpdateOfCollection") // the fields are injected by Gson -public class WonderDefinition implements Definition<Wonder> { - - private String name; - - private Map<WonderSide, WonderSideDefinition> sides; - - @Override - public Wonder create(Settings settings) { - Wonder wonder = new Wonder(); - wonder.setName(name); - - WonderSideDefinition wonderSideDef = sides.get(settings.pickWonderSide()); - wonder.setInitialResource(wonderSideDef.getInitialResource()); - wonder.setStages(wonderSideDef.createStages(settings)); - wonder.setImage(wonderSideDef.getImage()); - return wonder; - } - -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java deleted file mode 100644 index 34091350..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.luxons.sevenwonders.game.data.definitions; - -public enum WonderSide { - A, - B -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java deleted file mode 100644 index c84bba4e..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.luxons.sevenwonders.game.data.definitions; - -import java.util.List; -import java.util.stream.Collectors; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.wonders.WonderStage; - -// the fields are injected by Gson -@SuppressWarnings("unused,MismatchedQueryAndUpdateOfCollection") -class WonderSideDefinition { - - private ResourceType initialResource; - - private List<WonderStageDefinition> stages; - - private String image; - - ResourceType getInitialResource() { - return initialResource; - } - - List<WonderStage> createStages(Settings settings) { - return stages.stream().map(def -> def.create(settings)).collect(Collectors.toList()); - } - - String getImage() { - return image; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java deleted file mode 100644 index 08aaad14..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.luxons.sevenwonders.game.data.definitions; - -import java.util.Random; - -public enum WonderSidePickMethod { - ALL_A { - @Override - public WonderSide pickSide(Random random, WonderSide lastPickedSide) { - return WonderSide.A; - } - }, - ALL_B { - @Override - public WonderSide pickSide(Random random, WonderSide lastPickedSide) { - return WonderSide.B; - } - }, - EACH_RANDOM { - @Override - public WonderSide pickSide(Random random, WonderSide lastPickedSide) { - return random.nextBoolean() ? WonderSide.A : WonderSide.B; - } - }, - SAME_RANDOM_FOR_ALL { - @Override - public WonderSide pickSide(Random random, WonderSide lastPickedSide) { - if (lastPickedSide == null) { - return random.nextBoolean() ? WonderSide.A : WonderSide.B; - } else { - return lastPickedSide; - } - } - }; - - public abstract WonderSide pickSide(Random random, WonderSide lastPickedSide); -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java deleted file mode 100644 index 887b414a..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.luxons.sevenwonders.game.data.definitions; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.cards.Requirements; -import org.luxons.sevenwonders.game.wonders.WonderStage; - -@SuppressWarnings("unused") // the fields are injected by Gson -public class WonderStageDefinition implements Definition<WonderStage> { - - private Requirements requirements; - - private EffectsDefinition effects; - - @Override - public WonderStage create(Settings settings) { - WonderStage stage = new WonderStage(); - stage.setRequirements(requirements); - stage.setEffects(effects.create(settings)); - return stage; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java deleted file mode 100644 index c0a75d80..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import java.lang.reflect.Type; - -import org.luxons.sevenwonders.game.effects.Effect; -import org.luxons.sevenwonders.game.effects.GoldIncrease; -import org.luxons.sevenwonders.game.effects.MilitaryReinforcements; -import org.luxons.sevenwonders.game.effects.RawPointsIncrease; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -public class NumericEffectSerializer implements JsonSerializer<Effect>, JsonDeserializer<Effect> { - - @Override - public JsonElement serialize(Effect effect, Type typeOfSrc, JsonSerializationContext context) { - int value; - if (MilitaryReinforcements.class.equals(typeOfSrc)) { - value = ((MilitaryReinforcements) effect).getCount(); - } else if (GoldIncrease.class.equals(typeOfSrc)) { - value = ((GoldIncrease) effect).getAmount(); - } else if (RawPointsIncrease.class.equals(typeOfSrc)) { - value = ((RawPointsIncrease) effect).getPoints(); - } else { - throw new IllegalArgumentException("Unknown numeric effect " + typeOfSrc.getTypeName()); - } - return new JsonPrimitive(value); - } - - @Override - public Effect deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - int value = json.getAsInt(); - if (MilitaryReinforcements.class.equals(typeOfT)) { - return new MilitaryReinforcements(value); - } else if (GoldIncrease.class.equals(typeOfT)) { - return new GoldIncrease(value); - } else if (RawPointsIncrease.class.equals(typeOfT)) { - return new RawPointsIncrease(value); - } - throw new IllegalArgumentException("Unknown numeric effet " + typeOfT.getTypeName()); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java deleted file mode 100644 index c3eb1386..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import java.lang.reflect.Type; - -import org.luxons.sevenwonders.game.effects.ProductionIncrease; -import org.luxons.sevenwonders.game.resources.Production; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -public class ProductionIncreaseSerializer implements JsonSerializer<ProductionIncrease>, - JsonDeserializer<ProductionIncrease> { - - @Override - public JsonElement serialize(ProductionIncrease productionIncrease, Type typeOfSrc, - JsonSerializationContext context) { - Production production = productionIncrease.getProduction(); - JsonElement json = context.serialize(production); - if (!json.isJsonNull() && !productionIncrease.isSellable()) { - return new JsonPrimitive(wrapInBrackets(json.getAsString())); - } - return json; - } - - private String wrapInBrackets(String str) { - return '(' + str + ')'; - } - - @Override - public ProductionIncrease deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - ProductionIncrease productionIncrease = new ProductionIncrease(); - - String resourcesStr = json.getAsString(); - boolean isSellable = !resourcesStr.startsWith("("); - if (!isSellable) { - resourcesStr = unwrapBrackets(resourcesStr); - json = new JsonPrimitive(resourcesStr); - } - productionIncrease.setSellable(isSellable); - - Production production = context.deserialize(json, Production.class); - productionIncrease.setProduction(production); - return productionIncrease; - } - - private static String unwrapBrackets(String str) { - return str.substring(1, str.length() - 1); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializer.java deleted file mode 100644 index 178134bb..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializer.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import java.lang.reflect.Type; -import java.util.Set; -import java.util.stream.Collectors; - -import org.luxons.sevenwonders.game.resources.Production; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.resources.Resources; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonNull; -import com.google.gson.JsonParseException; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -public class ProductionSerializer implements JsonSerializer<Production>, JsonDeserializer<Production> { - - @Override - public JsonElement serialize(Production production, Type typeOfSrc, JsonSerializationContext context) { - Resources fixedResources = production.getFixedResources(); - Set<Set<ResourceType>> choices = production.getAlternativeResources(); - if (fixedResources.isEmpty()) { - return serializeAsChoice(choices, context); - } else if (choices.isEmpty()) { - return serializeAsResources(fixedResources, context); - } else { - throw new IllegalArgumentException("Cannot serialize a production with mixed fixed resources and choices"); - } - } - - private static JsonElement serializeAsChoice(Set<Set<ResourceType>> choices, JsonSerializationContext context) { - if (choices.isEmpty()) { - return JsonNull.INSTANCE; - } - if (choices.size() > 1) { - throw new IllegalArgumentException("Cannot serialize a production with more than one choice"); - } - String str = choices.stream() - .flatMap(Set::stream) - .map(ResourceType::getSymbol) - .map(Object::toString) - .collect(Collectors.joining("/")); - return context.serialize(str); - } - - private static JsonElement serializeAsResources(Resources fixedResources, JsonSerializationContext context) { - return context.serialize(fixedResources); - } - - @Override - public Production deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - String resourcesStr = json.getAsString(); - Production production = new Production(); - if (resourcesStr.contains("/")) { - production.addChoice(createChoice(resourcesStr)); - } else { - Resources fixedResources = context.deserialize(json, Resources.class); - production.addAll(fixedResources); - } - return production; - } - - private ResourceType[] createChoice(String choiceStr) { - String[] symbols = choiceStr.split("/"); - ResourceType[] choice = new ResourceType[symbols.length]; - for (int i = 0; i < symbols.length; i++) { - if (symbols[i].length() != 1) { - throw new IllegalArgumentException("Choice elements must be resource types, got " + symbols[i]); - } - choice[i] = ResourceType.fromSymbol(symbols[i].charAt(0)); - } - return choice; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java deleted file mode 100644 index d2a49180..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import java.lang.reflect.Type; - -import org.luxons.sevenwonders.game.resources.ResourceType; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -public class ResourceTypeSerializer implements JsonSerializer<ResourceType>, JsonDeserializer<ResourceType> { - - @Override - public JsonElement serialize(ResourceType type, Type typeOfSrc, JsonSerializationContext context) { - return new JsonPrimitive(type.getSymbol()); - } - - @Override - public ResourceType deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - String str = json.getAsString(); - if (str.isEmpty()) { - throw new IllegalArgumentException("Empty string is not a valid resource type"); - } - return ResourceType.fromSymbol(str.charAt(0)); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java deleted file mode 100644 index 89d3e723..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -import org.luxons.sevenwonders.game.resources.ResourceType; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -public class ResourceTypesSerializer implements JsonSerializer<List<ResourceType>>, - JsonDeserializer<List<ResourceType>> { - - @Override - public JsonElement serialize(List<ResourceType> resources, Type typeOfSrc, JsonSerializationContext context) { - String s = resources.stream().map(ResourceType::getSymbol).map(Object::toString).collect(Collectors.joining()); - return new JsonPrimitive(s); - } - - @Override - public List<ResourceType> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - String s = json.getAsString(); - List<ResourceType> resources = new ArrayList<>(); - for (char c : s.toCharArray()) { - resources.add(ResourceType.fromSymbol(c)); - } - return resources; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java deleted file mode 100644 index 9c27b2a1..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import java.lang.reflect.Type; -import java.util.stream.Collectors; - -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.resources.Resources; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonNull; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -public class ResourcesSerializer implements JsonSerializer<Resources>, JsonDeserializer<Resources> { - - @Override - public JsonElement serialize(Resources resources, Type typeOfSrc, JsonSerializationContext context) { - String s = resources.asList() - .stream() - .map(ResourceType::getSymbol) - .map(Object::toString) - .collect(Collectors.joining()); - return s.isEmpty() ? JsonNull.INSTANCE : new JsonPrimitive(s); - } - - @Override - public Resources deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - String s = json.getAsString(); - Resources resources = new Resources(); - for (char c : s.toCharArray()) { - resources.add(ResourceType.fromSymbol(c), 1); - } - return resources; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java deleted file mode 100644 index cecad405..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import java.lang.reflect.Type; - -import org.luxons.sevenwonders.game.boards.Science; -import org.luxons.sevenwonders.game.boards.ScienceType; -import org.luxons.sevenwonders.game.effects.ScienceProgress; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonNull; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -public class ScienceProgressSerializer implements JsonSerializer<ScienceProgress>, JsonDeserializer<ScienceProgress> { - - @Override - public JsonElement serialize(ScienceProgress scienceProgress, Type typeOfSrc, JsonSerializationContext context) { - Science science = scienceProgress.getScience(); - - if (science.size() > 1) { - throw new UnsupportedOperationException("Cannot serialize science containing more than one element"); - } - - for (ScienceType type : ScienceType.values()) { - int quantity = science.getQuantity(type); - if (quantity == 1) { - return context.serialize(type); - } - } - - if (science.getJokers() == 1) { - return new JsonPrimitive("any"); - } - - return JsonNull.INSTANCE; - } - - @Override - public ScienceProgress deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - String s = json.getAsString(); - ScienceProgress scienceProgress = new ScienceProgress(); - Science science = new Science(); - if ("any".equals(s)) { - science.addJoker(1); - } else { - science.add(deserializeScienceType(json, context), 1); - } - scienceProgress.setScience(science); - return scienceProgress; - } - - private ScienceType deserializeScienceType(JsonElement json, JsonDeserializationContext context) { - ScienceType type = context.deserialize(json, ScienceType.class); - if (type == null) { - throw new IllegalArgumentException("Invalid science type " + json.getAsString()); - } - return type; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElement.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElement.java deleted file mode 100644 index e9f9fe5f..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElement.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import java.util.List; - -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.boards.BoardElementType; -import org.luxons.sevenwonders.game.boards.RelativeBoardPosition; -import org.luxons.sevenwonders.game.cards.Color; - -public class BonusPerBoardElement implements Effect { - - private List<RelativeBoardPosition> boards; - - private int gold; - - private int points; - - private BoardElementType type; - - // only relevant if type=CARD - private List<Color> colors; - - public List<RelativeBoardPosition> getBoards() { - return boards; - } - - public void setBoards(List<RelativeBoardPosition> boards) { - this.boards = boards; - } - - public int getGold() { - return gold; - } - - public void setGold(int gold) { - this.gold = gold; - } - - public int getPoints() { - return points; - } - - public void setPoints(int points) { - this.points = points; - } - - public BoardElementType getType() { - return type; - } - - public void setType(BoardElementType type) { - this.type = type; - } - - public List<Color> getColors() { - return colors; - } - - public void setColors(List<Color> colors) { - this.colors = colors; - } - - @Override - public void apply(Table table, int playerIndex) { - int goldGain = gold * computeNbOfMatchingElementsIn(table, playerIndex); - Board board = table.getBoard(playerIndex); - board.addGold(goldGain); - } - - @Override - public int computePoints(Table table, int playerIndex) { - return points * computeNbOfMatchingElementsIn(table, playerIndex); - } - - private int computeNbOfMatchingElementsIn(Table table, int playerIndex) { - return boards.stream() - .map(pos -> table.getBoard(playerIndex, pos)) - .mapToInt(this::computeNbOfMatchingElementsIn) - .sum(); - } - - private int computeNbOfMatchingElementsIn(Board board) { - return type.getElementCount(board, colors); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/Discount.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/Discount.java deleted file mode 100644 index 976ebf35..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/Discount.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import java.util.ArrayList; -import java.util.List; - -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.resources.Provider; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.resources.TradingRules; - -public class Discount extends InstantOwnBoardEffect { - - private final List<ResourceType> resourceTypes = new ArrayList<>(); - - private final List<Provider> providers = new ArrayList<>(); - - private int discountedPrice = 1; - - public List<ResourceType> getResourceTypes() { - return resourceTypes; - } - - public List<Provider> getProviders() { - return providers; - } - - public int getDiscountedPrice() { - return discountedPrice; - } - - public void setDiscountedPrice(int discountedPrice) { - this.discountedPrice = discountedPrice; - } - - @Override - public void apply(Board board) { - TradingRules rules = board.getTradingRules(); - for (ResourceType type : resourceTypes) { - for (Provider provider : providers) { - rules.setCost(type, provider, discountedPrice); - } - } - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/Effect.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/Effect.java deleted file mode 100644 index 692eaea0..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/Effect.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import org.luxons.sevenwonders.game.api.Table; - -/** - * Represents an effect than can be applied to a player's board when playing a card or building his wonder. The effect - * may affect (or depend on) the adjacent boards. It can have an instantaneous effect on the board, or be postponed to - * the end of game where point calculations take place. - */ -public interface Effect { - - void apply(Table table, int playerIndex); - - int computePoints(Table table, int playerIndex); -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/EndGameEffect.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/EndGameEffect.java deleted file mode 100644 index 1bae16a6..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/EndGameEffect.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import org.luxons.sevenwonders.game.api.Table; - -public abstract class EndGameEffect implements Effect { - - @Override - public void apply(Table table, int playerIndex) { - // EndGameEffects don't do anything when applied to the board, they simply give more points in the end - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java deleted file mode 100644 index 4c1215d4..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import java.util.Objects; - -import org.luxons.sevenwonders.game.boards.Board; - -public class GoldIncrease extends InstantOwnBoardEffect { - - private final int amount; - - public GoldIncrease(int amount) { - this.amount = amount; - } - - public int getAmount() { - return amount; - } - - @Override - public void apply(Board board) { - board.addGold(amount); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - GoldIncrease that = (GoldIncrease) o; - return amount == that.amount; - } - - @Override - public int hashCode() { - return Objects.hash(amount); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/InstantOwnBoardEffect.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/InstantOwnBoardEffect.java deleted file mode 100644 index 8f4340cf..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/InstantOwnBoardEffect.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; - -public abstract class InstantOwnBoardEffect implements Effect { - - @Override - public void apply(Table table, int playerIndex) { - apply(table.getBoard(playerIndex)); - } - - protected abstract void apply(Board board); - - @Override - public int computePoints(Table table, int playerIndex) { - // InstantEffects are only important when applied to the board, they don't give extra points in the end - return 0; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java deleted file mode 100644 index 7da112f5..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import java.util.Objects; - -import org.luxons.sevenwonders.game.boards.Board; - -public class MilitaryReinforcements extends InstantOwnBoardEffect { - - private final int count; - - public MilitaryReinforcements(int count) { - this.count = count; - } - - public int getCount() { - return count; - } - - @Override - public void apply(Board board) { - board.getMilitary().addShields(count); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - MilitaryReinforcements that = (MilitaryReinforcements) o; - return count == that.count; - } - - @Override - public int hashCode() { - return Objects.hash(count); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/ProductionIncrease.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/ProductionIncrease.java deleted file mode 100644 index 514c65db..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/ProductionIncrease.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import java.util.Objects; - -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.resources.Production; - -public class ProductionIncrease extends InstantOwnBoardEffect { - - private Production production = new Production(); - - private boolean sellable = true; - - public Production getProduction() { - return production; - } - - public void setProduction(Production production) { - this.production = production; - } - - public boolean isSellable() { - return sellable; - } - - public void setSellable(boolean sellable) { - this.sellable = sellable; - } - - @Override - public void apply(Board board) { - board.getProduction().addAll(production); - if (sellable) { - board.getPublicProduction().addAll(production); - } - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ProductionIncrease that = (ProductionIncrease) o; - return Objects.equals(production, that.production); - } - - @Override - public int hashCode() { - return Objects.hash(production); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java deleted file mode 100644 index 9a5d66ed..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import java.util.Objects; - -import org.luxons.sevenwonders.game.api.Table; - -public class RawPointsIncrease extends EndGameEffect { - - private final int points; - - public RawPointsIncrease(int points) { - this.points = points; - } - - public int getPoints() { - return points; - } - - @Override - public int computePoints(Table table, int playerIndex) { - return points; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - RawPointsIncrease that = (RawPointsIncrease) o; - return points == that.points; - } - - @Override - public int hashCode() { - return Objects.hash(points); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/ScienceProgress.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/ScienceProgress.java deleted file mode 100644 index 4e6764ee..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/ScienceProgress.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.boards.Science; - -public class ScienceProgress extends InstantOwnBoardEffect { - - private Science science; - - public Science getScience() { - return science; - } - - public void setScience(Science science) { - this.science = science; - } - - @Override - public void apply(Board board) { - board.getScience().addAll(science); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbility.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbility.java deleted file mode 100644 index cdf67f20..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbility.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.cards.Card; - -public enum SpecialAbility { - - /** - * The player can play the last card of each age instead of discarding it. This card can be played by paying its - * cost, discarded to gain 3 coins or used in the construction of his or her Wonder. - */ - PLAY_LAST_CARD, - - /** - * Once per age, a player can construct a building from his or her hand for free. - */ - ONE_FREE_PER_AGE, - - /** - * The player can look at all cards discarded since the beginning of the game, pick one and build it for free. - */ - PLAY_DISCARDED, - - /** - * The player can, at the end of the game, "copy" a Guild of his or her choice (purple card), built by one of his or - * her two neighboring cities. - */ - COPY_GUILD { - @Override - public int computePoints(Table table, int playerIndex) { - Card copiedGuild = table.getBoard(playerIndex).getCopiedGuild(); - if (copiedGuild == null) { - throw new IllegalStateException("The copied Guild has not been chosen, cannot compute points"); - } - return copiedGuild.getEffects().stream().mapToInt(e -> e.computePoints(table, playerIndex)).sum(); - } - }; - - protected void apply(Board board) { - board.addSpecial(this); - } - - public int computePoints(Table table, int playerIndex) { - return 0; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivation.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivation.java deleted file mode 100644 index a5953c2f..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivation.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import org.luxons.sevenwonders.game.api.Table; - -public class SpecialAbilityActivation implements Effect { - - private final SpecialAbility specialAbility; - - public SpecialAbilityActivation(SpecialAbility specialAbility) { - this.specialAbility = specialAbility; - } - - public SpecialAbility getSpecialAbility() { - return specialAbility; - } - - @Override - public void apply(Table table, int playerIndex) { - specialAbility.apply(table.getBoard(playerIndex)); - } - - @Override - public int computePoints(Table table, int playerIndex) { - return specialAbility.computePoints(table, playerIndex); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/BuildWonderMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/BuildWonderMove.java deleted file mode 100644 index f1cb50b3..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/BuildWonderMove.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.luxons.sevenwonders.game.moves; - -import java.util.List; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.api.PlayerMove; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.cards.Card; - -public class BuildWonderMove extends CardFromHandMove { - - BuildWonderMove(int playerIndex, Card card, PlayerMove move) { - super(playerIndex, card, move); - } - - @Override - public void validate(Table table, List<Card> playerHand) throws InvalidMoveException { - super.validate(table, playerHand); - Board board = table.getBoard(getPlayerIndex()); - if (!board.getWonder().isNextStageBuildable(table, getPlayerIndex(), getBoughtResources())) { - throw new InvalidMoveException( - String.format("Player %d cannot upgrade his wonder with the given resources", getPlayerIndex())); - } - } - - @Override - public void place(Table table, List<Card> discardedCards, Settings settings) { - Board board = table.getBoard(getPlayerIndex()); - board.getWonder().buildLevel(getCard().getBack()); - } - - @Override - public void activate(Table table, List<Card> discardedCards, Settings settings) { - int playerIndex = getPlayerIndex(); - Board board = table.getBoard(playerIndex); - board.getWonder().activateLastBuiltStage(table, playerIndex, getBoughtResources()); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/CardFromHandMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/CardFromHandMove.java deleted file mode 100644 index 1794966d..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/CardFromHandMove.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.luxons.sevenwonders.game.moves; - -import java.util.List; - -import org.luxons.sevenwonders.game.api.PlayerMove; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.cards.Card; - -public abstract class CardFromHandMove extends Move { - - CardFromHandMove(int playerIndex, Card card, PlayerMove move) { - super(playerIndex, card, move); - } - - @Override - public void validate(Table table, List<Card> playerHand) throws InvalidMoveException { - if (!playerHand.contains(getCard())) { - throw new InvalidMoveException( - String.format("Player %d does not have the card '%s' in his hand", getPlayerIndex(), - getCard().getName())); - } - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/CopyGuildMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/CopyGuildMove.java deleted file mode 100644 index a93670c5..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/CopyGuildMove.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.luxons.sevenwonders.game.moves; - -import java.util.List; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.api.PlayerMove; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.boards.RelativeBoardPosition; -import org.luxons.sevenwonders.game.cards.Card; -import org.luxons.sevenwonders.game.cards.Color; -import org.luxons.sevenwonders.game.effects.SpecialAbility; - -public class CopyGuildMove extends Move { - - CopyGuildMove(int playerIndex, Card card, PlayerMove move) { - super(playerIndex, card, move); - } - - @Override - public void validate(Table table, List<Card> playerHand) throws InvalidMoveException { - Board board = table.getBoard(getPlayerIndex()); - if (!board.hasSpecial(SpecialAbility.COPY_GUILD)) { - throw new InvalidMoveException( - String.format("Player %d does not have the ability to copy guild cards", getPlayerIndex())); - } - if (getCard().getColor() != Color.PURPLE) { - throw new InvalidMoveException( - String.format("Player %d cannot copy card %s because it is not a guild card", getPlayerIndex(), - getCard().getName())); - } - boolean leftNeighbourHasIt = neighbourHasTheCard(table, RelativeBoardPosition.LEFT); - boolean rightNeighbourHasIt = neighbourHasTheCard(table, RelativeBoardPosition.RIGHT); - if (!leftNeighbourHasIt && !rightNeighbourHasIt) { - throw new InvalidMoveException( - String.format("Player %d cannot copy card %s because none of his neighbour has it", - getPlayerIndex(), getCard().getName())); - } - } - - private boolean neighbourHasTheCard(Table table, RelativeBoardPosition position) { - Board neighbourBoard = table.getBoard(getPlayerIndex(), position); - return neighbourBoard.getPlayedCards().contains(getCard()); - } - - @Override - public void place(Table table, List<Card> discardedCards, Settings settings) { - // nothing special to do here - } - - @Override - public void activate(Table table, List<Card> discardedCards, Settings settings) { - Board board = table.getBoard(getPlayerIndex()); - board.setCopiedGuild(getCard()); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/DiscardMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/DiscardMove.java deleted file mode 100644 index 076a593c..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/DiscardMove.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.luxons.sevenwonders.game.moves; - -import java.util.List; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.api.PlayerMove; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.cards.Card; - -public class DiscardMove extends CardFromHandMove { - - DiscardMove(int playerIndex, Card card, PlayerMove move) { - super(playerIndex, card, move); - } - - @Override - public void place(Table table, List<Card> discardedCards, Settings settings) { - discardedCards.add(getCard()); - } - - @Override - public void activate(Table table, List<Card> discardedCards, Settings settings) { - Board board = table.getBoard(getPlayerIndex()); - board.addGold(settings.getDiscardedCardGold()); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/InvalidMoveException.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/InvalidMoveException.java deleted file mode 100644 index 58190274..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/InvalidMoveException.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.luxons.sevenwonders.game.moves; - -public class InvalidMoveException extends IllegalArgumentException { - - public InvalidMoveException(String message) { - super(message); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/Move.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/Move.java deleted file mode 100644 index 40c61eea..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/Move.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.luxons.sevenwonders.game.moves; - -import java.util.ArrayList; -import java.util.List; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.api.PlayerMove; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.cards.Card; -import org.luxons.sevenwonders.game.resources.BoughtResources; - -public abstract class Move { - - private int playerIndex; - - private Card card; - - private MoveType type; - - private List<BoughtResources> boughtResources = new ArrayList<>(); - - Move(int playerIndex, Card card, PlayerMove move) { - this.playerIndex = playerIndex; - this.card = card; - this.type = move.getType(); - this.boughtResources = move.getBoughtResources(); - } - - public int getPlayerIndex() { - return playerIndex; - } - - public Card getCard() { - return card; - } - - public MoveType getType() { - return type; - } - - public List<BoughtResources> getBoughtResources() { - return boughtResources; - } - - public abstract void validate(Table table, List<Card> playerHand) throws InvalidMoveException; - - public abstract void place(Table table, List<Card> discardedCards, Settings settings); - - public abstract void activate(Table table, List<Card> discardedCards, Settings settings); -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/MoveType.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/MoveType.java deleted file mode 100644 index bf64344d..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/MoveType.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.luxons.sevenwonders.game.moves; - -import org.luxons.sevenwonders.game.api.PlayerMove; -import org.luxons.sevenwonders.game.cards.Card; - -public enum MoveType { - PLAY { - @Override - public Move resolve(int playerIndex, Card card, PlayerMove move) { - return new PlayCardMove(playerIndex, card, move); - } - }, - PLAY_FREE { - @Override - public Move resolve(int playerIndex, Card card, PlayerMove move) { - return new PlayFreeCardMove(playerIndex, card, move); - } - }, - UPGRADE_WONDER { - @Override - public Move resolve(int playerIndex, Card card, PlayerMove move) { - return new BuildWonderMove(playerIndex, card, move); - } - }, - DISCARD { - @Override - public Move resolve(int playerIndex, Card card, PlayerMove move) { - return new DiscardMove(playerIndex, card, move); - } - }, - COPY_GUILD { - @Override - public Move resolve(int playerIndex, Card card, PlayerMove move) { - return new CopyGuildMove(playerIndex, card, move); - } - }; - - public abstract Move resolve(int playerIndex, Card card, PlayerMove move); -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayCardMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayCardMove.java deleted file mode 100644 index 82052981..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayCardMove.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.luxons.sevenwonders.game.moves; - -import java.util.List; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.api.PlayerMove; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.cards.Card; - -public class PlayCardMove extends CardFromHandMove { - - PlayCardMove(int playerIndex, Card card, PlayerMove move) { - super(playerIndex, card, move); - } - - @Override - public void validate(Table table, List<Card> playerHand) throws InvalidMoveException { - super.validate(table, playerHand); - Board board = table.getBoard(getPlayerIndex()); - if (!getCard().isChainableOn(board) && !getCard().getRequirements() - .areMetWithHelpBy(board, getBoughtResources())) { - throw new InvalidMoveException( - String.format("Player %d cannot play the card %s with the given resources", getPlayerIndex(), - getCard().getName())); - } - } - - @Override - public void place(Table table, List<Card> discardedCards, Settings settings) { - Board board = table.getBoard(getPlayerIndex()); - board.addCard(getCard()); - } - - @Override - public void activate(Table table, List<Card> discardedCards, Settings settings) { - getCard().applyTo(table, getPlayerIndex(), getBoughtResources()); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayFreeCardMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayFreeCardMove.java deleted file mode 100644 index 4e8eefa5..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayFreeCardMove.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.luxons.sevenwonders.game.moves; - -import java.util.List; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.api.PlayerMove; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.cards.Card; - -public class PlayFreeCardMove extends CardFromHandMove { - - PlayFreeCardMove(int playerIndex, Card card, PlayerMove move) { - super(playerIndex, card, move); - } - - @Override - public void validate(Table table, List<Card> playerHand) throws InvalidMoveException { - super.validate(table, playerHand); - Board board = table.getBoard(getPlayerIndex()); - if (!board.canPlayFreeCard(table.getCurrentAge())) { - throw new InvalidMoveException( - String.format("Player %d cannot play the card %s for free", getPlayerIndex(), getCard().getName())); - } - } - - @Override - public void place(Table table, List<Card> discardedCards, Settings settings) { - Board board = table.getBoard(getPlayerIndex()); - board.addCard(getCard()); - } - - @Override - public void activate(Table table, List<Card> discardedCards, Settings settings) { - // only apply effects, without paying the cost - getCard().getEffects().forEach(e -> e.apply(table, getPlayerIndex())); - Board board = table.getBoard(getPlayerIndex()); - board.consumeFreeCard(table.getCurrentAge()); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/BestPriceCalculator.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/BestPriceCalculator.java deleted file mode 100644 index 8fed41d1..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/BestPriceCalculator.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.luxons.sevenwonders.game.resources; - -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.List; -import java.util.Set; - -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; - -public class BestPriceCalculator { - - private final Resources resources; - - private final List<ResourcePool> pools; - - private BestPriceCalculator(Resources resources, Table table, int playerIndex) { - this.resources = resources; - this.pools = createResourcePools(table, playerIndex); - } - - private static List<ResourcePool> createResourcePools(Table table, int playerIndex) { - Provider[] providers = Provider.values(); - List<ResourcePool> pools = new ArrayList<>(providers.length + 1); - - Board board = table.getBoard(playerIndex); - TradingRules rules = board.getTradingRules(); - pools.add(new ResourcePool(board.getProduction(), null, rules)); - - for (Provider provider : providers) { - Board providerBoard = table.getBoard(playerIndex, provider.getBoardPosition()); - ResourcePool pool = new ResourcePool(providerBoard.getPublicProduction(), provider, rules); - pools.add(pool); - } - return pools; - } - - public static int bestPrice(Resources resources, Table table, int playerIndex) { - Board board = table.getBoard(playerIndex); - Resources leftToPay = resources.minus(board.getProduction().getFixedResources()); - return new BestPriceCalculator(leftToPay, table, playerIndex).bestPrice(); - } - - private int bestPrice() { - if (resources.isEmpty()) { - return 0; - } - int currentMinPrice = Integer.MAX_VALUE; - for (ResourceType type : ResourceType.values()) { - if (resources.getQuantity(type) > 0) { - int minPriceUsingOwnResource = bestPriceWithout(type); - currentMinPrice = Math.min(currentMinPrice, minPriceUsingOwnResource); - } - } - return currentMinPrice; - } - - private int bestPriceWithout(ResourceType type) { - resources.remove(type, 1); - int currentMinPrice = Integer.MAX_VALUE; - for (ResourcePool pool : pools) { - int resCostInPool = pool.getCost(type); - for (Set<ResourceType> choice : pool.getChoices()) { - if (choice.contains(type)) { - Set<ResourceType> temp = EnumSet.copyOf(choice); - choice.clear(); - currentMinPrice = Math.min(currentMinPrice, bestPrice() + resCostInPool); - choice.addAll(temp); - } - } - } - resources.add(type, 1); - return currentMinPrice; - } - - private static class ResourcePool { - - private final Set<Set<ResourceType>> choices; - - private final Provider provider; - - private final TradingRules rules; - - private ResourcePool(Production production, Provider provider, TradingRules rules) { - this.choices = production.asChoices(); - this.provider = provider; - this.rules = rules; - } - - Set<Set<ResourceType>> getChoices() { - return choices; - } - - int getCost(ResourceType type) { - if (provider == null) { - return 0; - } - return rules.getCost(type, provider); - } - } -} - diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/BoughtResources.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/BoughtResources.java deleted file mode 100644 index ec261c8c..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/BoughtResources.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.luxons.sevenwonders.game.resources; - -public class BoughtResources { - - private Provider provider; - - private Resources resources; - - public Provider getProvider() { - return provider; - } - - public void setProvider(Provider provider) { - this.provider = provider; - } - - public Resources getResources() { - return resources; - } - - public void setResources(Resources resources) { - this.resources = resources; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/Production.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/Production.java deleted file mode 100644 index 7fa83e51..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/Production.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.luxons.sevenwonders.game.resources; - -import java.util.Arrays; -import java.util.EnumSet; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - -public class Production { - - private final Resources fixedResources = new Resources(); - - private final Set<Set<ResourceType>> alternativeResources = new HashSet<>(); - - public void addFixedResource(ResourceType type, int quantity) { - fixedResources.add(type, quantity); - } - - public void addChoice(ResourceType... options) { - EnumSet<ResourceType> optionSet = EnumSet.copyOf(Arrays.asList(options)); - alternativeResources.add(optionSet); - } - - public void addAll(Resources resources) { - fixedResources.addAll(resources); - } - - public void addAll(Production production) { - fixedResources.addAll(production.getFixedResources()); - alternativeResources.addAll(production.getAlternativeResources()); - } - - public Resources getFixedResources() { - return fixedResources; - } - - public Set<Set<ResourceType>> getAlternativeResources() { - return alternativeResources; - } - - Set<Set<ResourceType>> asChoices() { - Set<Set<ResourceType>> result = new HashSet<>(fixedResources.size() + alternativeResources.size()); - fixedResources.asList().stream().map(EnumSet::of).forEach(result::add); - result.addAll(alternativeResources); - return result; - } - - public boolean contains(Resources resources) { - if (fixedResources.contains(resources)) { - return true; - } - Resources remaining = resources.minus(fixedResources); - return containedInAlternatives(remaining); - } - - private boolean containedInAlternatives(Resources resources) { - return containedInAlternatives(resources, alternativeResources); - } - - private static boolean containedInAlternatives(Resources resources, Set<Set<ResourceType>> alternatives) { - if (resources.isEmpty()) { - return true; - } - for (ResourceType type : ResourceType.values()) { - if (resources.getQuantity(type) <= 0) { - continue; - } - Set<ResourceType> candidate = findFirstAlternativeContaining(alternatives, type); - if (candidate == null) { - return false; // no alternative produces the resource of this entry - } - resources.remove(type, 1); - alternatives.remove(candidate); - boolean remainingAreContainedToo = containedInAlternatives(resources, alternatives); - resources.add(type, 1); - alternatives.add(candidate); - if (remainingAreContainedToo) { - return true; - } - } - return false; - } - - private static Set<ResourceType> findFirstAlternativeContaining(Set<Set<ResourceType>> alternatives, - ResourceType type) { - return alternatives.stream().filter(a -> a.contains(type)).findAny().orElse(null); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Production that = (Production) o; - return Objects.equals(fixedResources, that.fixedResources) && Objects.equals(alternativeResources, - that.alternativeResources); - } - - @Override - public int hashCode() { - return Objects.hash(fixedResources, alternativeResources); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/Provider.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/Provider.java deleted file mode 100644 index 9c4aa3f9..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/Provider.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.luxons.sevenwonders.game.resources; - -import org.luxons.sevenwonders.game.boards.RelativeBoardPosition; - -public enum Provider { - LEFT_PLAYER(RelativeBoardPosition.LEFT), - RIGHT_PLAYER(RelativeBoardPosition.RIGHT); - - private final RelativeBoardPosition boardPosition; - - Provider(RelativeBoardPosition boardPosition) { - this.boardPosition = boardPosition; - } - - public RelativeBoardPosition getBoardPosition() { - return boardPosition; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java deleted file mode 100644 index baad8451..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.luxons.sevenwonders.game.resources; - -import java.util.HashMap; -import java.util.Map; - -public enum ResourceType { - WOOD('W'), - STONE('S'), - ORE('O'), - CLAY('C'), - GLASS('G'), - PAPYRUS('P'), - LOOM('L'); - - private static final Map<Character, ResourceType> typesPerSymbol = new HashMap<>(7); - - static { - for (ResourceType type : values()) { - typesPerSymbol.put(type.symbol, type); - } - } - - private final Character symbol; - - ResourceType(Character symbol) { - this.symbol = symbol; - } - - public static ResourceType fromSymbol(Character symbol) { - ResourceType type = typesPerSymbol.get(symbol); - if (type == null) { - throw new IllegalArgumentException(String.format("Unknown resource type symbol '%s'", symbol)); - } - return type; - } - - public Character getSymbol() { - return symbol; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/Resources.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/Resources.java deleted file mode 100644 index 04278fea..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/Resources.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.luxons.sevenwonders.game.resources; - -import java.util.EnumMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.NoSuchElementException; -import java.util.Objects; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class Resources { - - private final Map<ResourceType, Integer> quantities = new EnumMap<>(ResourceType.class); - - public void add(ResourceType type, int quantity) { - quantities.merge(type, quantity, (x, y) -> x + y); - } - - public void remove(ResourceType type, int quantity) { - if (getQuantity(type) < quantity) { - throw new NoSuchElementException(String.format("Can't remove %d resources of type %s", quantity, type)); - } - quantities.computeIfPresent(type, (t, oldQty) -> oldQty - quantity); - } - - public void addAll(Resources resources) { - resources.quantities.forEach(this::add); - } - - public int getQuantity(ResourceType type) { - return quantities.getOrDefault(type, 0); - } - - public List<ResourceType> asList() { - return quantities.entrySet() - .stream() - .flatMap(e -> Stream.generate(e::getKey).limit(e.getValue())) - .collect(Collectors.toList()); - } - - public boolean contains(Resources resources) { - return resources.quantities.entrySet().stream().allMatch(this::hasAtLeast); - } - - private boolean hasAtLeast(Entry<ResourceType, Integer> quantity) { - return quantity.getValue() <= getQuantity(quantity.getKey()); - } - - /** - * Creates new {@link Resources} object containing these resources minus the given resources. - * - * @param resources - * the resources to subtract from these resources - * - * @return a new {@link Resources} object containing these resources minus the given resources. - */ - public Resources minus(Resources resources) { - Resources diff = new Resources(); - quantities.forEach((type, count) -> { - int remainder = count - resources.getQuantity(type); - diff.quantities.put(type, Math.max(0, remainder)); - }); - return diff; - } - - public boolean isEmpty() { - return size() == 0; - } - - public int size() { - return quantities.values().stream().reduce(0, Integer::sum); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Resources resources = (Resources) o; - return Objects.equals(quantities, resources.quantities); - } - - @Override - public int hashCode() { - return Objects.hash(quantities); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/TradingRules.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/TradingRules.java deleted file mode 100644 index 8cd1d9bc..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/TradingRules.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.luxons.sevenwonders.game.resources; - -import java.util.EnumMap; -import java.util.List; -import java.util.Map; - -public class TradingRules { - - private final Map<ResourceType, Map<Provider, Integer>> costs = new EnumMap<>(ResourceType.class); - - private final int defaultCost; - - public TradingRules(int defaultCost) { - this.defaultCost = defaultCost; - } - - public Map<ResourceType, Map<Provider, Integer>> getCosts() { - return costs; - } - - int getCost(ResourceType type, Provider provider) { - return costs.computeIfAbsent(type, t -> new EnumMap<>(Provider.class)).getOrDefault(provider, defaultCost); - } - - public void setCost(ResourceType type, Provider provider, int cost) { - costs.computeIfAbsent(type, t -> new EnumMap<>(Provider.class)).put(provider, cost); - } - - public int computeCost(List<BoughtResources> boughtResources) { - return boughtResources.stream().mapToInt(this::computeCost).sum(); - } - - public int computeCost(BoughtResources boughtResources) { - Resources resources = boughtResources.getResources(); - Provider provider = boughtResources.getProvider(); - int total = 0; - for (ResourceType type : ResourceType.values()) { - int count = resources.getQuantity(type); - total += getCost(type, provider) * count; - } - return total; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/scoring/PlayerScore.java b/backend/src/main/java/org/luxons/sevenwonders/game/scoring/PlayerScore.java deleted file mode 100644 index f4a0d832..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/scoring/PlayerScore.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.luxons.sevenwonders.game.scoring; - -import java.util.HashMap; -import java.util.Map; - -public class PlayerScore { - - private final int boardGold; - - private final Map<ScoreCategory, Integer> scoresByCategory = new HashMap<>(); - - private int totalPoints = 0; - - public PlayerScore(int boardGold) { - this.boardGold = boardGold; - } - - public Integer put(ScoreCategory category, Integer points) { - totalPoints += points; - return scoresByCategory.put(category, points); - } - - public int getPoints(ScoreCategory category) { - return scoresByCategory.get(category); - } - - public Map<ScoreCategory, Integer> getPointsPerCategory() { - return scoresByCategory; - } - - public int getTotalPoints() { - return totalPoints; - } - - public int getBoardGold() { - return boardGold; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreBoard.java b/backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreBoard.java deleted file mode 100644 index e7cdaedd..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreBoard.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.luxons.sevenwonders.game.scoring; - -import java.util.Comparator; -import java.util.PriorityQueue; - -public class ScoreBoard { - - private static final Comparator<PlayerScore> comparator = Comparator.comparing(PlayerScore::getTotalPoints) - .thenComparing(PlayerScore::getBoardGold); - - private PriorityQueue<PlayerScore> scores; - - public ScoreBoard() { - scores = new PriorityQueue<>(comparator); - } - - public void add(PlayerScore score) { - scores.add(score); - } - - public PriorityQueue<PlayerScore> getScores() { - return scores; - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreCategory.java b/backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreCategory.java deleted file mode 100644 index a6a9537d..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreCategory.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.luxons.sevenwonders.game.scoring; - -public enum ScoreCategory { - CIVIL, - SCIENCE, - MILITARY, - TRADE, - GUILD, - WONDER, - GOLD -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java b/backend/src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java deleted file mode 100644 index 73fff305..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.luxons.sevenwonders.game.wonders; - -import java.util.Arrays; -import java.util.List; - -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.cards.CardBack; -import org.luxons.sevenwonders.game.resources.BoughtResources; -import org.luxons.sevenwonders.game.resources.ResourceType; - -public class Wonder { - - private String name; - - private ResourceType initialResource; - - private List<WonderStage> stages; - - private String image; - - public Wonder() { - } - - public Wonder(String name, ResourceType initialResource, WonderStage... stages) { - this.name = name; - this.initialResource = initialResource; - this.stages = Arrays.asList(stages); - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public ResourceType getInitialResource() { - return initialResource; - } - - public void setInitialResource(ResourceType initialResource) { - this.initialResource = initialResource; - } - - public List<WonderStage> getStages() { - return stages; - } - - public void setStages(List<WonderStage> stages) { - this.stages = stages; - } - - public int getNbBuiltStages() { - return (int) stages.stream().filter(WonderStage::isBuilt).count(); - } - - public String getImage() { - return image; - } - - public void setImage(String image) { - this.image = image; - } - - public boolean isNextStageBuildable(Table table, int playerIndex, List<BoughtResources> boughtResources) { - int nextLevel = getNbBuiltStages(); - if (nextLevel == stages.size()) { - return false; - } - return getNextStage().isBuildable(table, playerIndex, boughtResources); - } - - public void buildLevel(CardBack cardBack) { - getNextStage().build(cardBack); - } - - private WonderStage getNextStage() { - int nextLevel = getNbBuiltStages(); - if (nextLevel == stages.size()) { - throw new IllegalStateException("This wonder has already reached its maximum level"); - } - return stages.get(nextLevel); - } - - public void activateLastBuiltStage(Table table, int playerIndex, List<BoughtResources> boughtResources) { - getLastBuiltStage().activate(table, playerIndex, boughtResources); - } - - private WonderStage getLastBuiltStage() { - int lastLevel = getNbBuiltStages() - 1; - return stages.get(lastLevel); - } - - public int computePoints(Table table, int playerIndex) { - return stages.stream() - .filter(WonderStage::isBuilt) - .flatMap(c -> c.getEffects().stream()) - .mapToInt(e -> e.computePoints(table, playerIndex)) - .sum(); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java b/backend/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java deleted file mode 100644 index 5f6765ee..00000000 --- a/backend/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.luxons.sevenwonders.game.wonders; - -import java.util.List; - -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.cards.CardBack; -import org.luxons.sevenwonders.game.cards.Requirements; -import org.luxons.sevenwonders.game.effects.Effect; -import org.luxons.sevenwonders.game.resources.BoughtResources; - -public class WonderStage { - - private Requirements requirements; - - private List<Effect> effects; - - private CardBack cardBack; - - public Requirements getRequirements() { - return requirements; - } - - public void setRequirements(Requirements requirements) { - this.requirements = requirements; - } - - public List<Effect> getEffects() { - return effects; - } - - public void setEffects(List<Effect> effects) { - this.effects = effects; - } - - public CardBack getCardBack() { - return cardBack; - } - - public boolean isBuilt() { - return cardBack != null; - } - - public boolean isBuildable(Table table, int playerIndex, List<BoughtResources> boughtResources) { - Board board = table.getBoard(playerIndex); - return requirements.areMetWithHelpBy(board, boughtResources); - } - - void build(CardBack cardBack) { - this.cardBack = cardBack; - } - - void activate(Table table, int playerIndex, List<BoughtResources> boughtResources) { - effects.forEach(e -> e.apply(table, playerIndex)); - } -} diff --git a/backend/src/main/java/org/luxons/sevenwonders/repositories/LobbyRepository.java b/backend/src/main/java/org/luxons/sevenwonders/repositories/LobbyRepository.java index eb573479..b1b11c82 100644 --- a/backend/src/main/java/org/luxons/sevenwonders/repositories/LobbyRepository.java +++ b/backend/src/main/java/org/luxons/sevenwonders/repositories/LobbyRepository.java @@ -20,8 +20,8 @@ public class LobbyRepository { private long lastGameId = 0; @Autowired - public LobbyRepository(GameDefinitionLoader gameDefinitionLoader) { - this.gameDefinitionLoader = gameDefinitionLoader; + public LobbyRepository() { + this.gameDefinitionLoader = new GameDefinitionLoader(); } public Collection<Lobby> list() { diff --git a/backend/src/main/resources/org/luxons/sevenwonders/game/data/cards.json b/backend/src/main/resources/org/luxons/sevenwonders/game/data/cards.json deleted file mode 100644 index 83777d9e..00000000 --- a/backend/src/main/resources/org/luxons/sevenwonders/game/data/cards.json +++ /dev/null @@ -1,1719 +0,0 @@ -{ - "age1Back": "age1.png", - "age2Back": "age2.png", - "age3Back": "age3.png", - "age1": [ - { - "name": "Clay Pit", - "color": "BROWN", - "effect": { - "production": "O/C" - }, - "requirements": { - "gold": 1 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 1 - }, - "image": "claypit.png" - }, - { - "name": "Clay Pool", - "color": "BROWN", - "effect": { - "production": "C" - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "claypool.png" - }, - { - "name": "Excavation", - "color": "BROWN", - "effect": { - "production": "S/C" - }, - "requirements": { - "gold": 1 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 0, - "4": 1, - "5": 1, - "6": 1, - "7": 1 - }, - "image": "excavation.png" - }, - { - "name": "Forest Cave", - "color": "BROWN", - "effect": { - "production": "W/O" - }, - "requirements": { - "gold": 1 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 0, - "4": 0, - "5": 1, - "6": 1, - "7": 1 - }, - "image": "forestcave.png" - }, - { - "name": "Lumber Yard", - "color": "BROWN", - "effect": { - "production": "W" - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 2, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "lumberyard.png" - }, - { - "name": "Mine", - "color": "BROWN", - "effect": { - "production": "S/O" - }, - "requirements": { - "gold": 1 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 0, - "4": 0, - "5": 0, - "6": 1, - "7": 1 - }, - "image": "mine.png" - }, - { - "name": "Ore Vein", - "color": "BROWN", - "effect": { - "production": "O" - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 2, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "orevein.png" - }, - { - "name": "Stone Pit", - "color": "BROWN", - "effect": { - "production": "S" - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "stonepit.png" - }, - { - "name": "Timber Yard", - "color": "BROWN", - "effect": { - "production": "W/S" - }, - "requirements": { - "gold": 1 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 1 - }, - "image": "timberyard.png" - }, - { - "name": "Tree Farm", - "color": "BROWN", - "effect": { - "production": "W/C" - }, - "requirements": { - "gold": 1 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 0, - "4": 0, - "5": 0, - "6": 1, - "7": 1 - }, - "image": "treefarm.png" - }, - { - "name": "Glassworks", - "color": "GREY", - "effect": { - "production": "G" - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 2, - "7": 2 - }, - "image": "glassworks.png" - }, - { - "name": "Loom", - "color": "GREY", - "effect": { - "production": "L" - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 2, - "7": 2 - }, - "image": "loom.png" - }, - { - "name": "Press", - "color": "GREY", - "effect": { - "production": "P" - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 2, - "7": 2 - }, - "image": "press.png" - }, - { - "name": "East Trading Post", - "color": "YELLOW", - "effect": { - "discount": { - "resourceTypes": "CSOW", - "providers": [ - "RIGHT_PLAYER" - ], - "discountedPrice": 1 - } - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [ - "Forum" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "easttradingpost.png" - }, - { - "name": "Marketplace", - "color": "YELLOW", - "effect": { - "discount": { - "resourceTypes": "LGP", - "providers": [ - "LEFT_PLAYER", - "RIGHT_PLAYER" - ], - "discountedPrice": 1 - } - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [ - "Caravansery" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 2, - "7": 2 - }, - "image": "marketplace.png" - }, - { - "name": "Tavern", - "color": "YELLOW", - "effect": { - "gold": 5 - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 0, - "4": 1, - "5": 2, - "6": 2, - "7": 3 - }, - "image": "tavern.png" - }, - { - "name": "West Trading Post", - "color": "YELLOW", - "effect": { - "discount": { - "resourceTypes": "CSOW", - "providers": [ - "LEFT_PLAYER" - ], - "discountedPrice": 1 - } - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [ - "Forum" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "westtradingpost.png" - }, - { - "name": "Altar", - "color": "BLUE", - "effect": { - "points": 2 - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [ - "Temple" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "altar.png" - }, - { - "name": "Baths", - "color": "BLUE", - "effect": { - "points": 3 - }, - "requirements": { - "gold": 0, - "resources": "S" - }, - "chainChildren": [ - "Aquaduct" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "baths.png" - }, - { - "name": "Pawnshop", - "color": "BLUE", - "effect": { - "points": 3 - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 0, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "pawnshop.png" - }, - { - "name": "Theater", - "color": "BLUE", - "effect": { - "points": 2 - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [ - "Statue" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 2, - "7": 2 - }, - "image": "theater.png" - }, - { - "name": "Apothecary", - "color": "GREEN", - "effect": { - "science": "COMPASS" - }, - "requirements": { - "gold": 0, - "resources": "L" - }, - "chainChildren": [ - "Stables", - "Dispensary" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "apothecary.png" - }, - { - "name": "Scriptorium", - "color": "GREEN", - "effect": { - "science": "TABLET" - }, - "requirements": { - "gold": 0, - "resources": "P" - }, - "chainChildren": [ - "Courthouse", - "Library" - ], - "countPerNbPlayer": { - "3": 1, - "4": 2, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "scriptorium.png" - }, - { - "name": "Workshop", - "color": "GREEN", - "effect": { - "science": "WHEEL" - }, - "requirements": { - "gold": 0, - "resources": "G" - }, - "chainChildren": [ - "Archery Range", - "Laboratory" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "workshop.png" - }, - { - "name": "Barracks", - "color": "RED", - "effect": { - "military": 1 - }, - "requirements": { - "gold": 0, - "resources": "O" - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "barracks.png" - }, - { - "name": "Guard Tower", - "color": "RED", - "effect": { - "military": 1 - }, - "requirements": { - "gold": 0, - "resources": "C" - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 2, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "guardtower.png" - }, - { - "name": "Stockade", - "color": "RED", - "effect": { - "military": 1 - }, - "requirements": { - "gold": 0, - "resources": "W" - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "stockade.png" - } - ], - "age2": [ - { - "name": "Brickyard", - "color": "BROWN", - "effect": { - "production": "CC" - }, - "requirements": { - "gold": 1 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 2, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "brickyard.png" - }, - { - "name": "Foundry", - "color": "BROWN", - "effect": { - "production": "OO" - }, - "requirements": { - "gold": 1 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 2, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "foundry.png" - }, - { - "name": "Quarry", - "color": "BROWN", - "effect": { - "production": "SS" - }, - "requirements": { - "gold": 1 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 2, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "quarry.png" - }, - { - "name": "Sawmill", - "color": "BROWN", - "effect": { - "production": "WW" - }, - "requirements": { - "gold": 1 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 2, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "sawmill.png" - }, - { - "name": "Glassworks", - "color": "GREY", - "effect": { - "production": "G" - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "glassworks.png" - }, - { - "name": "Loom", - "color": "GREY", - "effect": { - "production": "L" - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "loom.png" - }, - { - "name": "Press", - "color": "GREY", - "effect": { - "production": "P" - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "press.png" - }, - { - "name": "Bazar", - "color": "YELLOW", - "effect": { - "perBoardElement": { - "boards": [ - "SELF", - "LEFT", - "RIGHT" - ], - "gold": 0, - "points": 2, - "type": "CARD", - "colors": [ - "GREY" - ] - } - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 0, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "bazar.png" - }, - { - "name": "Caravansery", - "color": "YELLOW", - "effect": { - "production": "(W/S/O/C)" - }, - "requirements": { - "gold": 0, - "resources": "WW" - }, - "chainParent": "Marketplace", - "chainChildren": [ - "Lighthouse" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 3, - "7": 3 - }, - "image": "caravansery.png" - }, - { - "name": "Forum", - "color": "YELLOW", - "effect": { - "production": "(G/P/L)" - }, - "requirements": { - "gold": 0, - "resources": "CC" - }, - "chainParent": "East Trading Post", - "chainChildren": [ - "Haven" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 2, - "7": 3 - }, - "image": "forum.png" - }, - { - "name": "Vineyard", - "color": "YELLOW", - "effect": { - "perBoardElement": { - "boards": [ - "SELF", - "LEFT", - "RIGHT" - ], - "gold": 0, - "points": 1, - "type": "CARD", - "colors": [ - "BROWN" - ] - } - }, - "requirements": { - "gold": 0 - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 2, - "7": 2 - }, - "image": "vineyard.png" - }, - { - "name": "Aqueduct", - "color": "BLUE", - "effect": { - "points": 5 - }, - "requirements": { - "gold": 0, - "resources": "SSS" - }, - "chainParent": "Baths", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "aqueduct.png" - }, - { - "name": "Courthouse", - "color": "BLUE", - "effect": { - "points": 4 - }, - "requirements": { - "gold": 0, - "resources": "CCL" - }, - "chainParent": "Scriptorium", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "courthouse.png" - }, - { - "name": "Statue", - "color": "BLUE", - "effect": { - "points": 4 - }, - "requirements": { - "gold": 0, - "resources": "WOO" - }, - "chainParent": "Theater", - "chainChildren": [ - "Gardens" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "statue.png" - }, - { - "name": "Temple", - "color": "BLUE", - "effect": { - "points": 3 - }, - "requirements": { - "gold": 0, - "resources": "WCG" - }, - "chainParent": "Altar", - "chainChildren": [ - "Pantheon" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 2, - "7": 2 - }, - "image": "temple.png" - }, - { - "name": "Dispensary", - "color": "GREEN", - "effect": { - "science": "COMPASS" - }, - "requirements": { - "gold": 0, - "resources": "OOG" - }, - "chainParent": "Apothecary", - "chainChildren": [ - "Arena", - "Lodge" - ], - "countPerNbPlayer": { - "3": 1, - "4": 2, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "dispensary.png" - }, - { - "name": "Laboratory", - "color": "GREEN", - "effect": { - "science": "WHEEL" - }, - "requirements": { - "gold": 0, - "resources": "CCP" - }, - "chainParent": "Workshop", - "chainChildren": [ - "Siege Workshop", - "Observatory" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "laboratory.png" - }, - { - "name": "Library", - "color": "GREEN", - "effect": { - "science": "TABLET" - }, - "requirements": { - "gold": 0, - "resources": "SSL" - }, - "chainParent": "Scriptorium", - "chainChildren": [ - "Senate", - "University" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 2, - "7": 2 - }, - "image": "library.png" - }, - { - "name": "School", - "color": "GREEN", - "effect": { - "science": "TABLET" - }, - "requirements": { - "gold": 0, - "resources": "WP" - }, - "chainChildren": [ - "Academy", - "Study" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "school.png" - }, - { - "name": "Archery Range", - "color": "RED", - "effect": { - "military": 2 - }, - "requirements": { - "gold": 0, - "resources": "WWO" - }, - "chainParent": "Workshop", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 2, - "7": 2 - }, - "image": "archeryrange.png" - }, - { - "name": "Stables", - "color": "RED", - "effect": { - "military": 2 - }, - "requirements": { - "gold": 0, - "resources": "WOC" - }, - "chainParent": "Apothecary", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "stables.png" - }, - { - "name": "Training Ground", - "color": "RED", - "effect": { - "military": 2 - }, - "requirements": { - "gold": 0, - "resources": "WOO" - }, - "chainChildren": [ - "Circus" - ], - "countPerNbPlayer": { - "3": 0, - "4": 1, - "5": 1, - "6": 2, - "7": 3 - }, - "image": "trainingground.png" - }, - { - "name": "Walls", - "color": "RED", - "effect": { - "military": 2 - }, - "requirements": { - "gold": 0, - "resources": "SSS" - }, - "chainChildren": [ - "Fortifications" - ], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "walls.png" - } - ], - "age3": [ - { - "name": "Arena", - "color": "YELLOW", - "effect": { - "perBoardElement": { - "boards": [ - "SELF" - ], - "gold": 3, - "points": 1, - "type": "WONDER_LEVEL" - } - }, - "requirements": { - "gold": 0, - "resources": "SSO" - }, - "chainParent": "Dispensary", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 3 - }, - "image": "arena.png" - }, - { - "name": "Chamber of Commerce", - "color": "YELLOW", - "effect": { - "perBoardElement": { - "boards": [ - "SELF" - ], - "gold": 2, - "points": 2, - "type": "CARD", - "colors": [ - "GREY" - ] - } - }, - "requirements": { - "gold": 0, - "resources": "CCP" - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 0, - "4": 1, - "5": 1, - "6": 2, - "7": 2 - }, - "image": "chamberofcommerce.png" - }, - { - "name": "Haven", - "color": "YELLOW", - "effect": { - "perBoardElement": { - "boards": [ - "SELF" - ], - "gold": 1, - "points": 1, - "type": "CARD", - "colors": [ - "BROWN" - ] - } - }, - "requirements": { - "gold": 0, - "resources": "WOL" - }, - "chainParent": "Forum", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 2, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "haven.png" - }, - { - "name": "Lighthouse", - "color": "YELLOW", - "effect": { - "perBoardElement": { - "boards": [ - "SELF" - ], - "gold": 1, - "points": 1, - "type": "CARD", - "colors": [ - "GREY" - ] - } - }, - "requirements": { - "gold": 0, - "resources": "SG" - }, - "chainParent": "Caravansery", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 2, - "7": 2 - }, - "image": "lighthouse.png" - }, - { - "name": "Gardens", - "color": "BLUE", - "effect": { - "points": 5 - }, - "requirements": { - "gold": 0, - "resources": "WCC" - }, - "chainParent": "Statue", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 2, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "gardens.png" - }, - { - "name": "Palace", - "color": "BLUE", - "effect": { - "points": 8 - }, - "requirements": { - "gold": 0, - "resources": "WSOCGPL" - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "palace.png" - }, - { - "name": "Pantheon", - "color": "BLUE", - "effect": { - "points": 7 - }, - "requirements": { - "gold": 0, - "resources": "OCCGPL" - }, - "chainParent": "Temple", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 2, - "7": 2 - }, - "image": "pantheon.png" - }, - { - "name": "Senate", - "color": "BLUE", - "effect": { - "points": 6 - }, - "requirements": { - "gold": 0, - "resources": "WWSO" - }, - "chainParent": "Library", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "senate.png" - }, - { - "name": "Town Hall", - "color": "BLUE", - "effect": { - "points": 6 - }, - "requirements": { - "gold": 0, - "resources": "SSOG" - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 3, - "7": 3 - }, - "image": "townhall.png" - }, - { - "name": "Academy", - "color": "GREEN", - "effect": { - "science": "COMPASS" - }, - "requirements": { - "gold": 0, - "resources": "SSSG" - }, - "chainParent": "School", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "academy.png" - }, - { - "name": "Lodge", - "color": "GREEN", - "effect": { - "science": "COMPASS" - }, - "requirements": { - "gold": 0, - "resources": "CCPL" - }, - "chainParent": "Dispensary", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 2, - "7": 2 - }, - "image": "lodge.png" - }, - { - "name": "Observatory", - "color": "GREEN", - "effect": { - "science": "WHEEL" - }, - "requirements": { - "gold": 0, - "resources": "OOGL" - }, - "chainParent": "Laboratory", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "observatory.png" - }, - { - "name": "Study", - "color": "GREEN", - "effect": { - "science": "WHEEL" - }, - "requirements": { - "gold": 0, - "resources": "WPL" - }, - "chainParent": "School", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "study.png" - }, - { - "name": "University", - "color": "GREEN", - "effect": { - "science": "TABLET" - }, - "requirements": { - "gold": 0, - "resources": "WWGP" - }, - "chainParent": "Library", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 2, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "university.png" - }, - { - "name": "Arsenal", - "color": "RED", - "effect": { - "military": 3 - }, - "requirements": { - "gold": 0, - "resources": "WWOL" - }, - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 2, - "5": 2, - "6": 2, - "7": 3 - }, - "image": "arsenal.png" - }, - { - "name": "Circus", - "color": "RED", - "effect": { - "military": 3 - }, - "requirements": { - "gold": 0, - "resources": "SSSO" - }, - "chainParent": "Training Ground", - "chainChildren": [], - "countPerNbPlayer": { - "3": 0, - "4": 1, - "5": 2, - "6": 3, - "7": 3 - }, - "image": "circus.png" - }, - { - "name": "Fortifications", - "color": "RED", - "effect": { - "military": 3 - }, - "requirements": { - "gold": 0, - "resources": "SOOO" - }, - "chainParent": "Walls", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 1, - "6": 1, - "7": 2 - }, - "image": "fortifications.png" - }, - { - "name": "Siege Workshop", - "color": "RED", - "effect": { - "military": 3 - }, - "requirements": { - "gold": 0, - "resources": "WCCC" - }, - "chainParent": "Laboratory", - "chainChildren": [], - "countPerNbPlayer": { - "3": 1, - "4": 1, - "5": 2, - "6": 2, - "7": 2 - }, - "image": "siegeworkshop.png" - } - ], - "guildCards": [ - { - "name": "Builders Guild", - "color": "PURPLE", - "effect": { - "perBoardElement": { - "boards": [ - "LEFT", - "SELF", - "RIGHT" - ], - "gold": 0, - "points": 1, - "type": "WONDER_LEVEL" - } - }, - "requirements": { - "gold": 0, - "resources": "SSCCG" - }, - "chainChildren": [], - "image": "buildersguild.png" - }, - { - "name": "Craftsmens Guild", - "color": "PURPLE", - "effect": { - "perBoardElement": { - "boards": [ - "LEFT", - "RIGHT" - ], - "gold": 0, - "points": 2, - "type": "CARD", - "colors": [ - "GREY" - ] - } - }, - "requirements": { - "gold": 0, - "resources": "SSOO" - }, - "chainChildren": [], - "image": "craftsmensguild.png" - }, - { - "name": "Magistrates Guild", - "color": "PURPLE", - "effect": { - "perBoardElement": { - "boards": [ - "LEFT", - "RIGHT" - ], - "gold": 0, - "points": 1, - "type": "CARD", - "colors": [ - "BLUE" - ] - } - }, - "requirements": { - "gold": 0, - "resources": "WWWSL" - }, - "chainChildren": [], - "image": "magistratesguild.png" - }, - { - "name": "Philosophers Guild", - "color": "PURPLE", - "effect": { - "perBoardElement": { - "boards": [ - "LEFT", - "RIGHT" - ], - "gold": 0, - "points": 1, - "type": "CARD", - "colors": [ - "GREEN" - ] - } - }, - "requirements": { - "gold": 0, - "resources": "CCCPL" - }, - "chainChildren": [], - "image": "philosophersguild.png" - }, - { - "name": "Scientists Guild", - "color": "PURPLE", - "effect": { - "science": "any" - }, - "requirements": { - "gold": 0, - "resources": "WWOOP" - }, - "chainChildren": [], - "image": "scientistsguild.png" - }, - { - "name": "Shipowners Guild", - "color": "PURPLE", - "effect": { - "perBoardElement": { - "boards": [ - "SELF" - ], - "gold": 0, - "points": 1, - "type": "CARD", - "colors": [ - "BROWN", - "GREY", - "PURPLE" - ] - } - }, - "requirements": { - "gold": 0, - "resources": "WWWGP" - }, - "chainChildren": [], - "image": "shipownersguild.png" - }, - { - "name": "Spies Guild", - "color": "PURPLE", - "effect": { - "perBoardElement": { - "boards": [ - "LEFT", - "RIGHT" - ], - "gold": 0, - "points": 1, - "type": "CARD", - "colors": [ - "RED" - ] - } - }, - "requirements": { - "gold": 0, - "resources": "CCCG" - }, - "chainChildren": [], - "image": "spiesguild.png" - }, - { - "name": "Strategists Guild", - "color": "PURPLE", - "effect": { - "perBoardElement": { - "boards": [ - "LEFT", - "RIGHT" - ], - "gold": 0, - "points": 1, - "type": "DEFEAT_TOKEN" - } - }, - "requirements": { - "gold": 0, - "resources": "SOOL" - }, - "chainChildren": [], - "image": "strategistsguild.png" - }, - { - "name": "Traders Guild", - "color": "PURPLE", - "effect": { - "perBoardElement": { - "boards": [ - "LEFT", - "RIGHT" - ], - "gold": 0, - "points": 1, - "type": "CARD", - "colors": [ - "YELLOW" - ] - } - }, - "requirements": { - "gold": 0, - "resources": "GPL" - }, - "chainChildren": [], - "image": "tradersguild.png" - }, - { - "name": "Workers Guild", - "color": "PURPLE", - "effect": { - "perBoardElement": { - "boards": [ - "LEFT", - "RIGHT" - ], - "gold": 0, - "points": 1, - "type": "CARD", - "colors": [ - "BROWN" - ] - } - }, - "requirements": { - "gold": 0, - "resources": "WSOOC" - }, - "chainChildren": [], - "image": "workersguild.png" - } - ] -}
\ No newline at end of file diff --git a/backend/src/main/resources/org/luxons/sevenwonders/game/data/wonders.json b/backend/src/main/resources/org/luxons/sevenwonders/game/data/wonders.json deleted file mode 100644 index 5beceadd..00000000 --- a/backend/src/main/resources/org/luxons/sevenwonders/game/data/wonders.json +++ /dev/null @@ -1,515 +0,0 @@ -[ - { - "name": "alexandria", - "sides": { - "A": { - "initialResource": "G", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "SS" - }, - "effects": { - "points": 3 - } - }, - { - "requirements": { - "gold": 0, - "resources": "OO" - }, - "effects": { - "production": "(W/S/O/C)" - } - }, - { - "requirements": { - "gold": 0, - "resources": "GG" - }, - "effects": { - "points": 7 - } - } - ], - "image": "alexandriaA.png" - }, - "B": { - "initialResource": "G", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "CC" - }, - "effects": { - "production": "(W/S/O/C)" - } - }, - { - "requirements": { - "gold": 0, - "resources": "WW" - }, - "effects": { - "production": "(G/P/L)" - } - }, - { - "requirements": { - "gold": 0, - "resources": "SSS" - }, - "effects": { - "points": 7 - } - } - ], - "image": "alexandriaB.png" - } - } - }, - { - "name": "babylon", - "sides": { - "A": { - "initialResource": "C", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "CC" - }, - "effects": { - "points": 3 - } - }, - { - "requirements": { - "gold": 0, - "resources": "WWW" - }, - "effects": { - "science": "any" - } - }, - { - "requirements": { - "gold": 0, - "resources": "CCCC" - }, - "effects": { - "points": 7 - } - } - ], - "image": "babylonA.png" - }, - "B": { - "initialResource": "C", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "CL" - }, - "effects": { - "points": 3 - } - }, - { - "requirements": { - "gold": 0, - "resources": "WWG" - }, - "effects": { - "action": "PLAY_LAST_CARD" - } - }, - { - "requirements": { - "gold": 0, - "resources": "CCCP" - }, - "effects": { - "science": "any" - } - } - ], - "image": "babylonB.png" - } - } - }, - { - "name": "ephesos", - "sides": { - "A": { - "initialResource": "P", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "SS" - }, - "effects": { - "points": 3 - } - }, - { - "requirements": { - "gold": 0, - "resources": "WW" - }, - "effects": { - "gold": 9 - } - }, - { - "requirements": { - "gold": 0, - "resources": "PP" - }, - "effects": { - "points": 7 - } - } - ], - "image": "ephesosA.png" - }, - "B": { - "initialResource": "P", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "SS" - }, - "effects": { - "gold": 4, - "points": 2 - } - }, - { - "requirements": { - "gold": 0, - "resources": "WW" - }, - "effects": { - "gold": 4, - "points": 3 - } - }, - { - "requirements": { - "gold": 0, - "resources": "GPL" - }, - "effects": { - "gold": 4, - "points": 5 - } - } - ], - "image": "ephesosB.png" - } - } - }, - { - "name": "gizah", - "sides": { - "A": { - "initialResource": "S", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "SS" - }, - "effects": { - "points": 3 - } - }, - { - "requirements": { - "gold": 0, - "resources": "WWW" - }, - "effects": { - "points": 5 - } - }, - { - "requirements": { - "gold": 0, - "resources": "SSSS" - }, - "effects": { - "points": 7 - } - } - ], - "image": "gizahA.png" - }, - "B": { - "initialResource": "S", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "WW" - }, - "effects": { - "points": 3 - } - }, - { - "requirements": { - "gold": 0, - "resources": "SSS" - }, - "effects": { - "points": 5 - } - }, - { - "requirements": { - "gold": 0, - "resources": "CCC" - }, - "effects": { - "points": 5 - } - }, - { - "requirements": { - "gold": 0, - "resources": "SSSSP" - }, - "effects": { - "points": 7 - } - } - ], - "image": "gizahB.png" - } - } - }, - { - "name": "halikarnassus", - "sides": { - "A": { - "initialResource": "L", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "CC" - }, - "effects": { - "points": 3 - } - }, - { - "requirements": { - "gold": 0, - "resources": "OOO" - }, - "effects": { - "action": "PLAY_DISCARDED" - } - }, - { - "requirements": { - "gold": 0, - "resources": "LL" - }, - "effects": { - "points": 7 - } - } - ], - "image": "halikarnassusA.png" - }, - "B": { - "initialResource": "L", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "OO" - }, - "effects": { - "points": 2, - "action": "PLAY_DISCARDED" - } - }, - { - "requirements": { - "gold": 0, - "resources": "CCC" - }, - "effects": { - "points": 1, - "action": "PLAY_DISCARDED" - } - }, - { - "requirements": { - "gold": 0, - "resources": "GPL" - }, - "effects": { - "action": "PLAY_DISCARDED" - } - } - ], - "image": "halikarnassusB.png" - } - } - }, - { - "name": "olympia", - "sides": { - "A": { - "initialResource": "W", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "WW" - }, - "effects": { - "points": 3 - } - }, - { - "requirements": { - "gold": 0, - "resources": "SS" - }, - "effects": { - "action": "ONE_FREE" - } - }, - { - "requirements": { - "gold": 0, - "resources": "OO" - }, - "effects": { - "points": 7 - } - } - ], - "image": "olympiaA.png" - }, - "B": { - "initialResource": "W", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "WW" - }, - "effects": { - "discount": { - "resourceTypes": "WSOC", - "providers": [ - "LEFT_PLAYER", - "RIGHT_PLAYER" - ], - "discountedPrice": 1 - } - } - }, - { - "requirements": { - "gold": 0, - "resources": "SS" - }, - "effects": { - "points": 5 - } - }, - { - "requirements": { - "gold": 0, - "resources": "OOL" - }, - "effects": { - "action": "COPY_GUILD" - } - } - ], - "image": "olympiaB.png" - } - } - }, - { - "name": "rhodos", - "sides": { - "A": { - "initialResource": "O", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "WW" - }, - "effects": { - "points": 3 - } - }, - { - "requirements": { - "gold": 0, - "resources": "CCC" - }, - "effects": { - "military": 2 - } - }, - { - "requirements": { - "gold": 0, - "resources": "OOOO" - }, - "effects": { - "points": 7 - } - } - ], - "image": "rhodosA.png" - }, - "B": { - "initialResource": "O", - "stages": [ - { - "requirements": { - "gold": 0, - "resources": "SSS" - }, - "effects": { - "gold": 3, - "military": 1, - "points": 3 - } - }, - { - "requirements": { - "gold": 0, - "resources": "OOOO" - }, - "effects": { - "gold": 4, - "military": 1, - "points": 4 - } - } - ], - "image": "rhodosB.png" - } - } - } -]
\ No newline at end of file diff --git a/backend/src/test/java/org/luxons/sevenwonders/controllers/GameBrowserControllerTest.java b/backend/src/test/java/org/luxons/sevenwonders/controllers/GameBrowserControllerTest.java index 6c971517..65d2aa04 100644 --- a/backend/src/test/java/org/luxons/sevenwonders/controllers/GameBrowserControllerTest.java +++ b/backend/src/test/java/org/luxons/sevenwonders/controllers/GameBrowserControllerTest.java @@ -8,13 +8,12 @@ import org.junit.Test; import org.luxons.sevenwonders.actions.CreateGameAction; import org.luxons.sevenwonders.actions.JoinGameAction; import org.luxons.sevenwonders.controllers.GameBrowserController.UserAlreadyInGameException; -import org.luxons.sevenwonders.test.TestUtils; -import org.luxons.sevenwonders.game.data.GameDefinitionLoader; import org.luxons.sevenwonders.lobby.Lobby; import org.luxons.sevenwonders.lobby.Player; import org.luxons.sevenwonders.repositories.LobbyRepository; import org.luxons.sevenwonders.repositories.PlayerRepository; import org.luxons.sevenwonders.repositories.PlayerRepository.PlayerNotFoundException; +import org.luxons.sevenwonders.test.TestUtils; import org.springframework.messaging.simp.SimpMessagingTemplate; import static org.junit.Assert.assertEquals; @@ -31,7 +30,7 @@ public class GameBrowserControllerTest { @Before public void setUp() { playerRepository = new PlayerRepository(); - LobbyRepository lobbyRepository = new LobbyRepository(new GameDefinitionLoader()); + LobbyRepository lobbyRepository = new LobbyRepository(); SimpMessagingTemplate template = TestUtils.createSimpMessagingTemplate(); LobbyController lobbyController = new LobbyController(playerRepository, template); gameBrowserController = new GameBrowserController(lobbyController, lobbyRepository, playerRepository, template); diff --git a/backend/src/test/java/org/luxons/sevenwonders/controllers/LobbyControllerTest.java b/backend/src/test/java/org/luxons/sevenwonders/controllers/LobbyControllerTest.java index 6958ad8b..db165e83 100644 --- a/backend/src/test/java/org/luxons/sevenwonders/controllers/LobbyControllerTest.java +++ b/backend/src/test/java/org/luxons/sevenwonders/controllers/LobbyControllerTest.java @@ -13,7 +13,6 @@ import org.luxons.sevenwonders.actions.UpdateSettingsAction; import org.luxons.sevenwonders.controllers.LobbyController.PlayerIsNotOwnerException; import org.luxons.sevenwonders.controllers.LobbyController.PlayerNotInLobbyException; import org.luxons.sevenwonders.game.api.CustomizableSettings; -import org.luxons.sevenwonders.game.data.GameDefinitionLoader; import org.luxons.sevenwonders.game.data.definitions.WonderSidePickMethod; import org.luxons.sevenwonders.lobby.Lobby; import org.luxons.sevenwonders.lobby.Player; @@ -41,7 +40,7 @@ public class LobbyControllerTest { @Before public void setUp() { playerRepository = new PlayerRepository(); - lobbyRepository = new LobbyRepository(new GameDefinitionLoader()); + lobbyRepository = new LobbyRepository(); SimpMessagingTemplate template = TestUtils.createSimpMessagingTemplate(); lobbyController = new LobbyController(playerRepository, template); } diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/GameTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/GameTest.java deleted file mode 100644 index e504126d..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/GameTest.java +++ /dev/null @@ -1,116 +0,0 @@ -package org.luxons.sevenwonders.game; - -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.Test; -import org.luxons.sevenwonders.game.api.CustomizableSettings; -import org.luxons.sevenwonders.game.api.HandCard; -import org.luxons.sevenwonders.game.api.PlayerMove; -import org.luxons.sevenwonders.game.api.PlayerTurnInfo; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.cards.Card; -import org.luxons.sevenwonders.game.data.GameDefinitionLoader; -import org.luxons.sevenwonders.game.moves.Move; -import org.luxons.sevenwonders.game.moves.MoveType; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; - -public class GameTest { - - @Test - public void testFullGame() { - int nbPlayers = 5; - Game game = createGame(nbPlayers); - - for (int age = 1; age <= 3; age++) { - playAge(nbPlayers, game, age); - } - } - - private void playAge(int nbPlayers, Game game, int age) { - for (int i = 0; i < 6; i++) { - playTurn(nbPlayers, game, age, 7 - i); - } - } - - private static Game createGame(int nbPlayers) { - CustomizableSettings settings = TestUtils.createCustomizableSettings(); - return new GameDefinitionLoader().getGameDefinition().initGame(0, settings, nbPlayers); - } - - private static void playTurn(int nbPlayers, Game game, int ageToCheck, int handSize) { - Collection<PlayerTurnInfo> turnInfos = game.getCurrentTurnInfo(); - assertEquals(nbPlayers, turnInfos.size()); - - Map<Integer, PlayerMove> sentMoves = new HashMap<>(turnInfos.size()); - for (PlayerTurnInfo turnInfo : turnInfos) { - assertEquals(ageToCheck, turnInfo.getCurrentAge()); - assertEquals(handSize, turnInfo.getHand().size()); - PlayerMove move = getFirstAvailableMove(turnInfo); - if (move != null) { - game.prepareMove(turnInfo.getPlayerIndex(), move); - sentMoves.put(turnInfo.getPlayerIndex(), move); - } - } - assertTrue(game.allPlayersPreparedTheirMove()); - Table table = game.playTurn(); - checkLastPlayedMoves(sentMoves, table); - } - - private static void checkLastPlayedMoves(Map<Integer, PlayerMove> sentMoves, Table table) { - for (Move move : table.getLastPlayedMoves()) { - PlayerMove sentMove = sentMoves.get(move.getPlayerIndex()); - assertNotNull(sentMove); - assertNotNull(move.getCard()); - assertEquals(sentMove.getCardName(), move.getCard().getName()); - assertSame(sentMove.getType(), move.getType()); - } - } - - private static PlayerMove getFirstAvailableMove(PlayerTurnInfo turnInfo) { - switch (turnInfo.getAction()) { - case PLAY: - case PLAY_2: - case PLAY_LAST: - return createPlayCardMove(turnInfo); - case PICK_NEIGHBOR_GUILD: - return createPickGuildMove(turnInfo); - case WAIT: - default: - return null; - } - } - - private static PlayerMove createPlayCardMove(PlayerTurnInfo turnInfo) { - for (HandCard handCard : turnInfo.getHand()) { - if (handCard.isFree()) { - return createMove(handCard, MoveType.PLAY); - } - } - return createMove(turnInfo.getHand().get(0), MoveType.DISCARD); - } - - private static PlayerMove createPickGuildMove(PlayerTurnInfo turnInfo) { - List<Card> neighbourGuilds = turnInfo.getNeighbourGuildCards(); - assertNotNull(neighbourGuilds); - String cardName = neighbourGuilds.isEmpty() ? null : neighbourGuilds.get(0).getName(); - PlayerMove move = new PlayerMove(); - move.setCardName(cardName); - move.setType(MoveType.COPY_GUILD); - return move; - } - - private static PlayerMove createMove(HandCard handCard, MoveType type) { - PlayerMove move = new PlayerMove(); - move.setCardName(handCard.getCard().getName()); - move.setType(type); - return move; - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/api/TableTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/api/TableTest.java deleted file mode 100644 index 71dbeb89..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/api/TableTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.luxons.sevenwonders.game.api; - -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.boards.RelativeBoardPosition; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assume.assumeTrue; - -@RunWith(Theories.class) -public class TableTest { - - @DataPoints - public static int[] nbPlayers() { - return new int[] {2, 3, 4, 5, 6, 7, 8}; - } - - @Theory - public void getBoard_wrapLeft(int nbPlayers) { - assumeTrue(nbPlayers >= 2); - Table table = TestUtils.createTable(nbPlayers); - int last = nbPlayers - 1; - assertEquals(table.getBoard(last), table.getBoard(0, RelativeBoardPosition.LEFT)); - assertEquals(table.getBoard(0), table.getBoard(0, RelativeBoardPosition.SELF)); - assertEquals(table.getBoard(1), table.getBoard(0, RelativeBoardPosition.RIGHT)); - } - - @Theory - public void getBoard_wrapRight(int nbPlayers) { - assumeTrue(nbPlayers >= 2); - Table table = TestUtils.createTable(nbPlayers); - int last = nbPlayers - 1; - assertEquals(table.getBoard(last - 1), table.getBoard(last, RelativeBoardPosition.LEFT)); - assertEquals(table.getBoard(last), table.getBoard(last, RelativeBoardPosition.SELF)); - assertEquals(table.getBoard(0), table.getBoard(last, RelativeBoardPosition.RIGHT)); - } - - @Theory - public void getBoard_noWrap(int nbPlayers) { - assumeTrue(nbPlayers >= 3); - Table table = TestUtils.createTable(nbPlayers); - assertEquals(table.getBoard(0), table.getBoard(1, RelativeBoardPosition.LEFT)); - assertEquals(table.getBoard(1), table.getBoard(1, RelativeBoardPosition.SELF)); - assertEquals(table.getBoard(2), table.getBoard(1, RelativeBoardPosition.RIGHT)); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/boards/BoardTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/boards/BoardTest.java deleted file mode 100644 index c54ff0b2..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/boards/BoardTest.java +++ /dev/null @@ -1,214 +0,0 @@ -package org.luxons.sevenwonders.game.boards; - -import java.util.Arrays; -import java.util.Collections; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.FromDataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.api.CustomizableSettings; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board.InsufficientFundsException; -import org.luxons.sevenwonders.game.cards.Card; -import org.luxons.sevenwonders.game.cards.Color; -import org.luxons.sevenwonders.game.effects.Effect; -import org.luxons.sevenwonders.game.effects.RawPointsIncrease; -import org.luxons.sevenwonders.game.effects.SpecialAbility; -import org.luxons.sevenwonders.game.effects.SpecialAbilityActivation; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.resources.Resources; -import org.luxons.sevenwonders.game.scoring.PlayerScore; -import org.luxons.sevenwonders.game.scoring.ScoreCategory; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static junit.framework.TestCase.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeTrue; - -@RunWith(Theories.class) -public class BoardTest { - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - @DataPoints("gold") - public static int[] goldAmounts() { - return new int[]{-3, -1, 0, 1, 2, 3}; - } - - @DataPoints("nbCards") - public static int[] nbCards() { - return new int[]{0, 1, 2}; - } - - @DataPoints - public static ResourceType[] resourceTypes() { - return ResourceType.values(); - } - - @DataPoints - public static Color[] colors() { - return Color.values(); - } - - @DataPoints - public static SpecialAbility[] specialAbilities() { - return SpecialAbility.values(); - } - - @Theory - public void initialGold_respectsSettings(@FromDataPoints("gold") int goldAmountInSettings) { - CustomizableSettings customSettings = TestUtils.createCustomizableSettings(); - customSettings.setInitialGold(goldAmountInSettings); - Settings settings = new Settings(5, customSettings); - Board board = new Board(TestUtils.createWonder(), 0, settings); - assertEquals(goldAmountInSettings, board.getGold()); - } - - @Theory - public void initialProduction_containsInitialResource(ResourceType type) { - Board board = new Board(TestUtils.createWonder(type), 0, new Settings(5)); - Resources resources = TestUtils.createResources(type); - assertTrue(board.getProduction().contains(resources)); - assertTrue(board.getPublicProduction().contains(resources)); - } - - @Theory - public void removeGold_successfulWhenNotTooMuch(@FromDataPoints("gold") int initialGold, - @FromDataPoints("gold") int goldRemoved) { - assumeTrue(goldRemoved >= 0); - assumeTrue(initialGold >= goldRemoved); - Board board = new Board(TestUtils.createWonder(), 0, new Settings(5)); - board.setGold(initialGold); - board.removeGold(goldRemoved); - assertEquals(initialGold - goldRemoved, board.getGold()); - } - - @Theory - public void removeGold_failsWhenTooMuch(@FromDataPoints("gold") int initialGold, - @FromDataPoints("gold") int goldRemoved) { - assumeTrue(goldRemoved >= 0); - assumeTrue(initialGold < goldRemoved); - thrown.expect(InsufficientFundsException.class); - Board board = new Board(TestUtils.createWonder(), 0, new Settings(5)); - board.setGold(initialGold); - board.removeGold(goldRemoved); - } - - @Theory - public void getNbCardsOfColor_properCount_singleColor(ResourceType type, @FromDataPoints("nbCards") int nbCards, - @FromDataPoints("nbCards") int nbOtherCards, Color color) { - Board board = TestUtils.createBoard(type); - TestUtils.addCards(board, nbCards, nbOtherCards, color); - assertEquals(nbCards, board.getNbCardsOfColor(Collections.singletonList(color))); - } - - @Theory - public void getNbCardsOfColor_properCount_multiColors(ResourceType type, @FromDataPoints("nbCards") int nbCards1, - @FromDataPoints("nbCards") int nbCards2, - @FromDataPoints("nbCards") int nbOtherCards, Color color1, - Color color2) { - Board board = TestUtils.createBoard(type); - TestUtils.addCards(board, nbCards1, color1); - TestUtils.addCards(board, nbCards2, color2); - TestUtils.addCards(board, nbOtherCards, TestUtils.getDifferentColorFrom(color1, color2)); - assertEquals(nbCards1 + nbCards2, board.getNbCardsOfColor(Arrays.asList(color1, color2))); - } - - @Test - public void setCopiedGuild_succeedsOnPurpleCard() { - Board board = TestUtils.createBoard(ResourceType.CLAY); - Card card = TestUtils.createCard(Color.PURPLE); - - board.setCopiedGuild(card); - assertSame(card, board.getCopiedGuild()); - } - - @Theory - public void setCopiedGuild_failsOnNonPurpleCard(Color color) { - assumeTrue(color != Color.PURPLE); - Board board = TestUtils.createBoard(ResourceType.CLAY); - Card card = TestUtils.createCard(color); - - thrown.expect(IllegalArgumentException.class); - board.setCopiedGuild(card); - } - - @Theory - public void hasSpecial(SpecialAbility applied, SpecialAbility tested) { - Board board = TestUtils.createBoard(ResourceType.CLAY); - Table table = new Table(Collections.singletonList(board)); - SpecialAbilityActivation special = new SpecialAbilityActivation(applied); - - special.apply(table, 0); - - assertEquals(applied == tested, board.hasSpecial(tested)); - } - - @Test - public void canPlayFreeCard() { - Board board = TestUtils.createBoard(ResourceType.CLAY); - Table table = new Table(Collections.singletonList(board)); - SpecialAbilityActivation special = new SpecialAbilityActivation(SpecialAbility.ONE_FREE_PER_AGE); - - special.apply(table, 0); - - assertTrue(board.canPlayFreeCard(0)); - assertTrue(board.canPlayFreeCard(1)); - assertTrue(board.canPlayFreeCard(2)); - - board.consumeFreeCard(0); - - assertFalse(board.canPlayFreeCard(0)); - assertTrue(board.canPlayFreeCard(1)); - assertTrue(board.canPlayFreeCard(2)); - - board.consumeFreeCard(1); - - assertFalse(board.canPlayFreeCard(0)); - assertFalse(board.canPlayFreeCard(1)); - assertTrue(board.canPlayFreeCard(2)); - - board.consumeFreeCard(2); - - assertFalse(board.canPlayFreeCard(0)); - assertFalse(board.canPlayFreeCard(1)); - assertFalse(board.canPlayFreeCard(2)); - } - - @Theory - public void computePoints_gold(@FromDataPoints("gold") int gold) { - assumeTrue(gold >= 0); - Board board = TestUtils.createBoard(ResourceType.WOOD); - Table table = new Table(Collections.singletonList(board)); - board.setGold(gold); - - PlayerScore score = board.computePoints(table); - assertEquals(gold / 3, (int) score.getPoints(ScoreCategory.GOLD)); - assertEquals(gold / 3, score.getTotalPoints()); - } - - @Theory - public void computePoints_(@FromDataPoints("gold") int gold) { - assumeTrue(gold >= 0); - Board board = TestUtils.createBoard(ResourceType.WOOD); - Table table = new Table(Collections.singletonList(board)); - board.setGold(gold); - - Effect effect = new RawPointsIncrease(5); - TestUtils.playCardWithEffect(table, 0, Color.BLUE, effect); - - PlayerScore score = board.computePoints(table); - assertEquals(gold / 3, (int) score.getPoints(ScoreCategory.GOLD)); - assertEquals(5, (int) score.getPoints(ScoreCategory.CIVIL)); - assertEquals(5 + gold / 3, score.getTotalPoints()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/boards/MilitaryTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/boards/MilitaryTest.java deleted file mode 100644 index b391c6b0..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/boards/MilitaryTest.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.luxons.sevenwonders.game.boards; - -import java.util.HashMap; -import java.util.Map; - -import org.junit.Rule; -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.FromDataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.boards.Military.UnknownAgeException; - -import static org.junit.Assert.assertEquals; - -@RunWith(Theories.class) -public class MilitaryTest { - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - @DataPoints("points") - public static int[] points() { - return new int[] {0, 1, 3, 5}; - } - - @DataPoints("ages") - public static int[] ages() { - return new int[] {1, 2, 3}; - } - - private static Military createMilitary(int age, int nbPointsPerVictory, int nbPointsPerDefeat) { - Map<Integer, Integer> wonPointsPerAge = new HashMap<>(); - wonPointsPerAge.put(age, nbPointsPerVictory); - return new Military(nbPointsPerDefeat, wonPointsPerAge); - } - - @Theory - public void victory_addsCorrectPoints(@FromDataPoints("ages") int age, - @FromDataPoints("points") int nbPointsPerVictory) { - Military military = createMilitary(age, nbPointsPerVictory, 0); - int initialPoints = military.getTotalPoints(); - - military.victory(age); - assertEquals(initialPoints + nbPointsPerVictory, military.getTotalPoints()); - } - - @Theory - public void victory_failsIfUnknownAge(@FromDataPoints("points") int nbPointsPerVictory) { - Military military = createMilitary(0, nbPointsPerVictory, 0); - thrown.expect(UnknownAgeException.class); - military.victory(1); - } - - @Theory - public void defeat_removesCorrectPoints(@FromDataPoints("points") int nbPointsLostPerDefeat) { - Military military = createMilitary(0, 0, nbPointsLostPerDefeat); - int initialPoints = military.getTotalPoints(); - - military.defeat(); - assertEquals(initialPoints - nbPointsLostPerDefeat, military.getTotalPoints()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/boards/RelativeBoardPositionTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/boards/RelativeBoardPositionTest.java deleted file mode 100644 index 9f60e572..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/boards/RelativeBoardPositionTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.luxons.sevenwonders.game.boards; - -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assume.assumeTrue; - -@RunWith(Theories.class) -public class RelativeBoardPositionTest { - - @DataPoints - public static int[] nbPlayers() { - return new int[] {1, 2, 3, 5, 7, 9}; - } - - @Theory - public void getIndexFrom_wrapLeft(int nbPlayers) { - assumeTrue(nbPlayers >= 2); - int last = nbPlayers - 1; - assertEquals(last, RelativeBoardPosition.LEFT.getIndexFrom(0, nbPlayers)); - assertEquals(0, RelativeBoardPosition.SELF.getIndexFrom(0, nbPlayers)); - assertEquals(1, RelativeBoardPosition.RIGHT.getIndexFrom(0, nbPlayers)); - } - - @Theory - public void getIndexFrom_wrapRight(int nbPlayers) { - assumeTrue(nbPlayers >= 2); - int last = nbPlayers - 1; - assertEquals(last - 1, RelativeBoardPosition.LEFT.getIndexFrom(last, nbPlayers)); - assertEquals(last, RelativeBoardPosition.SELF.getIndexFrom(last, nbPlayers)); - assertEquals(0, RelativeBoardPosition.RIGHT.getIndexFrom(last, nbPlayers)); - } - - @Theory - public void getIndexFrom_noWrap(int nbPlayers) { - assumeTrue(nbPlayers >= 3); - assertEquals(0, RelativeBoardPosition.LEFT.getIndexFrom(1, nbPlayers)); - assertEquals(1, RelativeBoardPosition.SELF.getIndexFrom(1, nbPlayers)); - assertEquals(2, RelativeBoardPosition.RIGHT.getIndexFrom(1, nbPlayers)); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/boards/ScienceTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/boards/ScienceTest.java deleted file mode 100644 index 24c63b31..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/boards/ScienceTest.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.luxons.sevenwonders.game.boards; - -import org.junit.Test; -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; - -@RunWith(Theories.class) -public class ScienceTest { - - @DataPoints - public static int[][] quantitiesWithExpectedPoints() { - // compasses, wheels, tablets, jokers, expected points - return new int[][] {{0, 0, 0, 1, 1}, {0, 0, 1, 0, 1}, {0, 0, 0, 2, 4}, {0, 0, 1, 1, 4}, {0, 0, 2, 0, 4}, - {0, 0, 0, 3, 10}, {0, 0, 1, 2, 10}, {0, 1, 1, 1, 10}, {1, 1, 1, 0, 10}, {0, 0, 0, 4, 16}, - {0, 0, 1, 3, 16}, {0, 0, 2, 2, 16}, {0, 0, 3, 1, 16}, {0, 0, 4, 0, 16}}; - } - - @DataPoints - public static int[] quantitiesDataPoints() { - return new int[] {0, 1, 3, 5, 8}; - } - - @Test - public void addAll_empty() { - Science initial = TestUtils.createScience(3, 4, 5, 1); - Science empty = new Science(); - initial.addAll(empty); - assertEquals(3, initial.getQuantity(ScienceType.COMPASS)); - assertEquals(4, initial.getQuantity(ScienceType.WHEEL)); - assertEquals(5, initial.getQuantity(ScienceType.TABLET)); - assertEquals(1, initial.getJokers()); - } - - @Test - public void addAll_noJoker() { - Science initial = TestUtils.createScience(3, 4, 5, 1); - Science other = TestUtils.createScience(1, 2, 3, 0); - initial.addAll(other); - assertEquals(4, initial.getQuantity(ScienceType.COMPASS)); - assertEquals(6, initial.getQuantity(ScienceType.WHEEL)); - assertEquals(8, initial.getQuantity(ScienceType.TABLET)); - assertEquals(1, initial.getJokers()); - } - - @Test - public void addAll_withJokers() { - Science initial = TestUtils.createScience(3, 4, 5, 1); - Science other = TestUtils.createScience(0, 0, 0, 3); - initial.addAll(other); - assertEquals(3, initial.getQuantity(ScienceType.COMPASS)); - assertEquals(4, initial.getQuantity(ScienceType.WHEEL)); - assertEquals(5, initial.getQuantity(ScienceType.TABLET)); - assertEquals(4, initial.getJokers()); - } - - @Test - public void addAll_mixed() { - Science initial = TestUtils.createScience(3, 4, 5, 1); - Science other = TestUtils.createScience(1, 2, 3, 4); - initial.addAll(other); - assertEquals(4, initial.getQuantity(ScienceType.COMPASS)); - assertEquals(6, initial.getQuantity(ScienceType.WHEEL)); - assertEquals(8, initial.getQuantity(ScienceType.TABLET)); - assertEquals(5, initial.getJokers()); - } - - @Theory - public void computePoints_compassesOnly_noJoker(int compasses) { - Science science = TestUtils.createScience(compasses, 0, 0, 0); - assertEquals(compasses * compasses, science.computePoints()); - } - - @Theory - public void computePoints_wheelsOnly_noJoker(int wheels) { - Science science = TestUtils.createScience(0, wheels, 0, 0); - assertEquals(wheels * wheels, science.computePoints()); - } - - @Theory - public void computePoints_tabletsOnly_noJoker(int tablets) { - Science science = TestUtils.createScience(0, 0, tablets, 0); - assertEquals(tablets * tablets, science.computePoints()); - } - - @Theory - public void computePoints_allSameNoJoker(int eachSymbol) { - Science science = TestUtils.createScience(eachSymbol, eachSymbol, eachSymbol, 0); - assertEquals(3 * eachSymbol * eachSymbol + 7 * eachSymbol, science.computePoints()); - } - - @Theory - public void computePoints_expectation(int[] expectation) { - Science science = TestUtils.createScience(expectation[0], expectation[1], expectation[2], expectation[3]); - assertEquals(expectation[4], science.computePoints()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/cards/CardBackTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/cards/CardBackTest.java deleted file mode 100644 index 6f637f87..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/cards/CardBackTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.luxons.sevenwonders.game.cards; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class CardBackTest { - - @Test - public void initializedWithImage() { - String imagePath = "whateverimage.png"; - CardBack back = new CardBack(imagePath); - assertEquals(imagePath, back.getImage()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/cards/CardTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/cards/CardTest.java deleted file mode 100644 index 437c5f21..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/cards/CardTest.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.luxons.sevenwonders.game.cards; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.junit.Before; -import org.junit.Test; -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.effects.Effect; -import org.luxons.sevenwonders.game.effects.ProductionIncrease; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.wonders.Wonder; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; -import static org.luxons.sevenwonders.game.test.TestUtils.createCard; - -public class CardTest { - - private Table table; - - private Card treeFarmCard; - - @Before - public void initBoard() { - Settings settings = new Settings(3); - - List<Board> boards = new ArrayList<>(3); - boards.add(new Board(new Wonder("TestWonder", ResourceType.WOOD), 0, settings)); - boards.add(new Board(new Wonder("TestWonder", ResourceType.STONE), 1, settings)); - boards.add(new Board(new Wonder("TestWonder", ResourceType.PAPYRUS), 2, settings)); - table = new Table(boards); - - Requirements treeFarmRequirements = new Requirements(); - treeFarmRequirements.setGold(1); - - ProductionIncrease treeFarmEffect = new ProductionIncrease(); - treeFarmEffect.getProduction().addChoice(ResourceType.WOOD, ResourceType.CLAY); - - List<Effect> effects = Collections.singletonList(treeFarmEffect); - - treeFarmCard = new Card("Tree Farm", Color.BROWN, treeFarmRequirements, effects, "", null, null); - } - - @Test - public void playCardCostingMoney() { - table.getBoard(0).setGold(3); - table.getBoard(1).setGold(3); - table.getBoard(2).setGold(3); - treeFarmCard.applyTo(table, 0, new ArrayList<>()); - assertEquals(2, table.getBoard(0).getGold()); - assertEquals(3, table.getBoard(1).getGold()); - assertEquals(3, table.getBoard(2).getGold()); - } - - @Test - public void equals_falseWhenNull() { - Card card = createCard("TestCard"); - //noinspection ObjectEqualsNull - assertFalse(card.equals(null)); - } - - @Test - public void equals_falseWhenDifferentClass() { - Card card = createCard("TestCard"); - Object object = new Object(); - //noinspection EqualsBetweenInconvertibleTypes - assertFalse(card.equals(object)); - } - - @Test - public void equals_trueWhenSame() { - Card card = createCard("TestCard"); - assertEquals(card, card); - } - - @Test - public void equals_trueWhenSameContent() { - Card card1 = createCard("TestCard"); - Card card2 = createCard("TestCard"); - assertTrue(card1.equals(card2)); - } - - @Test - public void equals_falseWhenDifferentName() { - Card card1 = createCard("TestCard1"); - Card card2 = createCard("TestCard2"); - assertFalse(card1.equals(card2)); - } - - @Test - public void hashCode_sameWhenSameContent() { - Card card1 = createCard("TestCard"); - Card card2 = createCard("TestCard"); - assertEquals(card1.hashCode(), card2.hashCode()); - } - - @Test - public void hashCode_differentWhenDifferentName() { - Card card1 = createCard("TestCard1"); - Card card2 = createCard("TestCard2"); - assertNotEquals(card1.hashCode(), card2.hashCode()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/cards/DecksTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/cards/DecksTest.java deleted file mode 100644 index 8adeb44d..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/cards/DecksTest.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.luxons.sevenwonders.game.cards; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.cards.Decks.CardNotFoundException; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeTrue; - -@RunWith(Theories.class) -public class DecksTest { - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - @DataPoints - public static int[] dataPoints() { - return new int[] {1, 2, 3, 5, 10}; - } - - private static Decks createDecks(int nbAges, int nbCardsPerAge) { - Map<Integer, List<Card>> cardsPerAge = new HashMap<>(); - for (int age = 1; age <= nbAges; age++) { - int firstCardNumber = (age - 1) * nbCardsPerAge; - cardsPerAge.put(age, TestUtils.createSampleCards(firstCardNumber, nbCardsPerAge)); - } - return new Decks(cardsPerAge); - } - - @Test(expected = CardNotFoundException.class) - public void getCard_failsOnNullNameWhenDeckIsEmpty() { - Decks decks = createDecks(0, 0); - decks.getCard(null); - } - - @Test(expected = CardNotFoundException.class) - public void getCard_failsOnEmptyNameWhenDeckIsEmpty() { - Decks decks = createDecks(0, 0); - decks.getCard(""); - } - - @Test(expected = CardNotFoundException.class) - public void getCard_failsWhenDeckIsEmpty() { - Decks decks = createDecks(0, 0); - decks.getCard("Any name"); - } - - @Test(expected = CardNotFoundException.class) - public void getCard_failsWhenCardIsNotFound() { - Decks decks = createDecks(3, 20); - decks.getCard("Unknown name"); - } - - @Test - public void getCard_succeedsWhenCardIsFound() { - Decks decks = createDecks(3, 20); - Card card = decks.getCard("Test Card 3"); - assertEquals("Test Card 3", card.getName()); - } - - @Test(expected = IllegalArgumentException.class) - public void deal_failsOnZeroPlayers() { - Decks decks = createDecks(3, 20); - decks.deal(1, 0); - } - - @Test(expected = IllegalArgumentException.class) - public void deal_failsOnMissingAge() { - Decks decks = createDecks(2, 0); - decks.deal(4, 10); - } - - @Theory - public void deal_failsWhenTooFewPlayers(int nbPlayers, int nbCards) { - assumeTrue(nbCards % nbPlayers != 0); - thrown.expect(IllegalArgumentException.class); - Decks decks = createDecks(1, nbCards); - decks.deal(1, nbPlayers); - } - - @Theory - public void deal_succeedsOnZeroCards(int nbPlayers) { - Decks decks = createDecks(1, 0); - Hands hands = decks.deal(1, nbPlayers); - for (int i = 0; i < nbPlayers; i++) { - assertNotNull(hands.get(i)); - assertTrue(hands.get(i).isEmpty()); - } - } - - @Theory - public void deal_evenDistribution(int nbPlayers, int nbCardsPerPlayer) { - int nbCardsPerAge = nbPlayers * nbCardsPerPlayer; - Decks decks = createDecks(1, nbCardsPerAge); - Hands hands = decks.deal(1, nbPlayers); - for (int i = 0; i < nbPlayers; i++) { - assertEquals(nbCardsPerPlayer, hands.get(i).size()); - } - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/cards/HandRotationDirectionTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/cards/HandRotationDirectionTest.java deleted file mode 100644 index ddd69b70..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/cards/HandRotationDirectionTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.luxons.sevenwonders.game.cards; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class HandRotationDirectionTest { - - @Test - public void testAgesDirections() { - assertEquals(HandRotationDirection.LEFT, HandRotationDirection.forAge(1)); - assertEquals(HandRotationDirection.RIGHT, HandRotationDirection.forAge(2)); - assertEquals(HandRotationDirection.LEFT, HandRotationDirection.forAge(3)); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/cards/HandsTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/cards/HandsTest.java deleted file mode 100644 index c20508e6..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/cards/HandsTest.java +++ /dev/null @@ -1,143 +0,0 @@ -package org.luxons.sevenwonders.game.cards; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.Test; -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.FromDataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.api.HandCard; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.cards.Hands.PlayerIndexOutOfBoundsException; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeTrue; - -@RunWith(Theories.class) -public class HandsTest { - - @DataPoints("nbCardsPerPlayer") - public static int[] nbCardsPerPlayer() { - return new int[] {0, 1, 2, 3, 4, 5, 6, 7}; - } - - @DataPoints("nbPlayers") - public static int[] nbPlayers() { - return new int[] {3, 4, 5, 6, 7}; - } - - private static Hands createHands(int nbPlayers, int nbCardsPerPlayer) { - Map<Integer, List<Card>> hands = new HashMap<>(); - for (int p = 0; p < nbPlayers; p++) { - int firstCardNumber = (p - 1) * nbCardsPerPlayer; - hands.put(p, TestUtils.createSampleCards(firstCardNumber, nbCardsPerPlayer)); - } - return new Hands(hands, nbPlayers); - } - - @Test(expected = PlayerIndexOutOfBoundsException.class) - public void get_failsOnMissingPlayer() { - Hands hands = createHands(4, 7); - hands.get(5); - } - - @Test - public void get_retrievesCorrectCards() { - List<Card> hand0 = TestUtils.createSampleCards(0, 5); - List<Card> hand1 = TestUtils.createSampleCards(5, 10); - Map<Integer, List<Card>> handsMap = new HashMap<>(); - handsMap.put(0, hand0); - handsMap.put(1, hand1); - Hands hands = new Hands(handsMap, 2); - assertEquals(hand0, hands.get(0)); - assertEquals(hand1, hands.get(1)); - } - - @Theory - public void isEmpty_falseWhenAtLeast1_allSame(@FromDataPoints("nbPlayers") int nbPlayers, - @FromDataPoints("nbCardsPerPlayer") int nbCardsPerPlayer) { - assumeTrue(nbCardsPerPlayer >= 1); - Hands hands = createHands(nbPlayers, nbCardsPerPlayer); - assertFalse(hands.isEmpty()); - } - - @Theory - public void isEmpty_trueWhenAllEmpty(@FromDataPoints("nbPlayers") int nbPlayers) { - Hands hands = createHands(nbPlayers, 0); - assertTrue(hands.isEmpty()); - } - - @Theory - public void maxOneCardRemains_falseWhenAtLeast2_allSame(@FromDataPoints("nbPlayers") int nbPlayers, - @FromDataPoints("nbCardsPerPlayer") int nbCardsPerPlayer) { - assumeTrue(nbCardsPerPlayer >= 2); - Hands hands = createHands(nbPlayers, nbCardsPerPlayer); - assertFalse(hands.maxOneCardRemains()); - } - - @Theory - public void maxOneCardRemains_trueWhenAtMost1_allSame(@FromDataPoints("nbPlayers") int nbPlayers, - @FromDataPoints("nbCardsPerPlayer") int nbCardsPerPlayer) { - assumeTrue(nbCardsPerPlayer <= 1); - Hands hands = createHands(nbPlayers, nbCardsPerPlayer); - assertTrue(hands.maxOneCardRemains()); - } - - @Theory - public void maxOneCardRemains_trueWhenAtMost1_someZero(@FromDataPoints("nbPlayers") int nbPlayers) { - Hands hands = createHands(nbPlayers, 1); - hands.get(0).remove(0); - assertTrue(hands.maxOneCardRemains()); - } - - @Theory - public void gatherAndClear(@FromDataPoints("nbPlayers") int nbPlayers, - @FromDataPoints("nbCardsPerPlayer") int nbCardsPerPlayer) { - Hands hands = createHands(nbPlayers, nbCardsPerPlayer); - List<Card> remainingCards = hands.gatherAndClear(); - assertEquals(nbPlayers * nbCardsPerPlayer, remainingCards.size()); - assertTrue(hands.isEmpty()); - } - - @Test - public void rotate_movesOfCorrectOffset_right() { - Hands hands = createHands(3, 7); - Hands rotated = hands.rotate(HandRotationDirection.RIGHT); - assertEquals(rotated.get(1), hands.get(0)); - assertEquals(rotated.get(2), hands.get(1)); - assertEquals(rotated.get(0), hands.get(2)); - } - - @Test - public void rotate_movesOfCorrectOffset_left() { - Hands hands = createHands(3, 7); - Hands rotated = hands.rotate(HandRotationDirection.LEFT); - assertEquals(rotated.get(2), hands.get(0)); - assertEquals(rotated.get(0), hands.get(1)); - assertEquals(rotated.get(1), hands.get(2)); - } - - @Test - public void createHand_containsAllCards() { - List<Card> hand0 = TestUtils.createSampleCards(0, 5); - List<Card> hand1 = TestUtils.createSampleCards(5, 10); - Map<Integer, List<Card>> handsMap = new HashMap<>(); - handsMap.put(0, hand0); - handsMap.put(1, hand1); - Hands hands = new Hands(handsMap, 2); - - Table table = TestUtils.createTable(2); - List<HandCard> hand = hands.createHand(table, 0); - - for (HandCard handCard : hand) { - assertTrue(hand0.contains(handCard.getCard())); - } - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/cards/RequirementsTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/cards/RequirementsTest.java deleted file mode 100644 index b01f9002..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/cards/RequirementsTest.java +++ /dev/null @@ -1,149 +0,0 @@ -package org.luxons.sevenwonders.game.cards; - -import java.util.Arrays; -import java.util.Collections; - -import org.junit.Test; -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.resources.BoughtResources; -import org.luxons.sevenwonders.game.resources.Provider; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.resources.Resources; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeTrue; - -@RunWith(Theories.class) -public class RequirementsTest { - - @DataPoints - public static int[] goldAmounts() { - return new int[]{0, 1, 2, 5}; - } - - @DataPoints - public static ResourceType[] resourceTypes() { - return ResourceType.values(); - } - - @Test - public void getResources_emptyAfterInit() throws Exception { - Requirements requirements = new Requirements(); - assertTrue(requirements.getResources().isEmpty()); - } - - @Test - public void setResources_success() throws Exception { - Requirements requirements = new Requirements(); - Resources resources = new Resources(); - requirements.setResources(resources); - assertSame(resources, requirements.getResources()); - } - - @Theory - public void goldRequirement(int boardGold, int requiredGold) { - Requirements requirements = new Requirements(); - requirements.setGold(requiredGold); - - Board board = TestUtils.createBoard(ResourceType.CLAY, boardGold); - Table table = new Table(Collections.singletonList(board)); - - assertEquals(boardGold >= requiredGold, requirements.areMetWithoutNeighboursBy(board)); - assertEquals(boardGold >= requiredGold, requirements.areMetWithHelpBy(board, Collections.emptyList())); - assertEquals(boardGold >= requiredGold, requirements.couldBeMetBy(table, 0)); - } - - @Theory - public void resourceRequirement_initialResource(ResourceType initialResource, ResourceType requiredResource) { - Requirements requirements = TestUtils.createRequirements(requiredResource); - - Board board = TestUtils.createBoard(initialResource, 0); - Table table = new Table(Collections.singletonList(board)); - - assertEquals(initialResource == requiredResource, requirements.areMetWithoutNeighboursBy(board)); - assertEquals(initialResource == requiredResource, - requirements.areMetWithHelpBy(board, Collections.emptyList())); - - if (initialResource == requiredResource) { - assertTrue(requirements.couldBeMetBy(table, 0)); - } - } - - @Theory - public void resourceRequirement_ownProduction(ResourceType initialResource, ResourceType producedResource, - ResourceType requiredResource) { - assumeTrue(initialResource != requiredResource); - - Requirements requirements = TestUtils.createRequirements(requiredResource); - - Board board = TestUtils.createBoard(initialResource, 0); - board.getProduction().addFixedResource(producedResource, 1); - Table table = new Table(Collections.singletonList(board)); - - assertEquals(producedResource == requiredResource, requirements.areMetWithoutNeighboursBy(board)); - assertEquals(producedResource == requiredResource, - requirements.areMetWithHelpBy(board, Collections.emptyList())); - - if (producedResource == requiredResource) { - assertTrue(requirements.couldBeMetBy(table, 0)); - } - } - - @Theory - public void resourceRequirement_boughtResource(ResourceType initialResource, ResourceType boughtResource, - ResourceType requiredResource) { - assumeTrue(initialResource != requiredResource); - - Requirements requirements = TestUtils.createRequirements(requiredResource); - - Board board = TestUtils.createBoard(initialResource, 2); - Board neighbourBoard = TestUtils.createBoard(initialResource, 0); - neighbourBoard.getPublicProduction().addFixedResource(boughtResource, 1); - Table table = new Table(Arrays.asList(board, neighbourBoard)); - - BoughtResources resources = new BoughtResources(); - resources.setProvider(Provider.RIGHT_PLAYER); - resources.setResources(TestUtils.createResources(boughtResource)); - - assertFalse(requirements.areMetWithoutNeighboursBy(board)); - assertEquals(boughtResource == requiredResource, - requirements.areMetWithHelpBy(board, Collections.singletonList(resources))); - - if (boughtResource == requiredResource) { - assertTrue(requirements.couldBeMetBy(table, 0)); - } - } - - @Theory - public void pay_boughtResource(ResourceType initialResource, ResourceType requiredResource) { - assumeTrue(initialResource != requiredResource); - - Requirements requirements = TestUtils.createRequirements(requiredResource); - - Board board = TestUtils.createBoard(initialResource, 2); - Board neighbourBoard = TestUtils.createBoard(requiredResource, 0); - Table table = new Table(Arrays.asList(board, neighbourBoard)); - - BoughtResources boughtResources = new BoughtResources(); - boughtResources.setProvider(Provider.RIGHT_PLAYER); - boughtResources.setResources(TestUtils.createResources(requiredResource)); - - assertFalse(requirements.areMetWithoutNeighboursBy(board)); - assertTrue(requirements.areMetWithHelpBy(board, Collections.singletonList(boughtResources))); - assertTrue(requirements.couldBeMetBy(table, 0)); - - requirements.pay(table, 0, Collections.singletonList(boughtResources)); - - assertEquals(0, board.getGold()); - assertEquals(2, neighbourBoard.getGold()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionLoaderTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionLoaderTest.java deleted file mode 100644 index e678e6a5..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionLoaderTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.luxons.sevenwonders.game.data; - -import org.junit.Test; - -import static org.junit.Assert.assertNotNull; - -public class GameDefinitionLoaderTest { - - @Test - public void successfulLoad() { - GameDefinitionLoader loader = new GameDefinitionLoader(); - GameDefinition gameDefinition = loader.getGameDefinition(); - assertNotNull(gameDefinition); - } - -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionTest.java deleted file mode 100644 index c693a2a2..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.luxons.sevenwonders.game.data; - -import org.junit.Test; -import org.luxons.sevenwonders.game.Game; -import org.luxons.sevenwonders.game.api.CustomizableSettings; - -import static org.junit.Assert.assertNotNull; - -public class GameDefinitionTest { - - @Test - public void successfulGameInit() { - GameDefinition gameDefinition = new GameDefinitionLoader().getGameDefinition(); - assertNotNull(gameDefinition); - - Game game = gameDefinition.initGame(0, new CustomizableSettings(), 7); - assertNotNull(game); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethodTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethodTest.java deleted file mode 100644 index 0b7de3d6..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethodTest.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.luxons.sevenwonders.game.data.definitions; - -import java.util.Random; - -import org.junit.Before; -import org.junit.Test; -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; - -import static org.junit.Assert.assertEquals; - -@RunWith(Theories.class) -public class WonderSidePickMethodTest { - - private Random random; - - private Random random2; - - @DataPoints - public static WonderSide[] sides() { - return WonderSide.values(); - } - - @Before - public void setUp() { - random = new Random(123); // starts with TRUE - random2 = new Random(123456); // starts with FALSE - } - - @Test - public void pick_allA() { - WonderSide side = null; - for (int i = 0; i < 10; i++) { - side = WonderSidePickMethod.ALL_A.pickSide(random, side); - assertEquals(WonderSide.A, side); - } - } - - @Test - public void pick_allB() { - WonderSide side = null; - for (int i = 0; i < 10; i++) { - side = WonderSidePickMethod.ALL_B.pickSide(random, side); - assertEquals(WonderSide.B, side); - } - } - - @Test - public void pick_eachRandom() { - WonderSide side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, null); - assertEquals(WonderSide.A, side); - side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side); - assertEquals(WonderSide.B, side); - side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side); - assertEquals(WonderSide.A, side); - side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side); - assertEquals(WonderSide.B, side); - side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side); - assertEquals(WonderSide.B, side); - side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side); - assertEquals(WonderSide.A, side); - } - - @Test - public void pick_eachRandom2() { - WonderSide side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, null); - assertEquals(WonderSide.B, side); - side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side); - assertEquals(WonderSide.A, side); - side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side); - assertEquals(WonderSide.A, side); - side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side); - assertEquals(WonderSide.B, side); - side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side); - assertEquals(WonderSide.B, side); - side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side); - assertEquals(WonderSide.B, side); - } - - @Theory - public void pick_allSameRandom_sameAsFirst(WonderSide firstSide) { - WonderSide side = firstSide; - for (int i = 0; i < 10; i++) { - side = WonderSidePickMethod.SAME_RANDOM_FOR_ALL.pickSide(random, side); - assertEquals(firstSide, side); - } - } - - @Test - public void pick_allSameRandom_firstIsRandom() { - assertEquals(WonderSide.A, WonderSidePickMethod.SAME_RANDOM_FOR_ALL.pickSide(random, null)); - assertEquals(WonderSide.B, WonderSidePickMethod.SAME_RANDOM_FOR_ALL.pickSide(random2, null)); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java deleted file mode 100644 index 861d5a09..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java +++ /dev/null @@ -1,128 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import org.junit.Before; -import org.junit.Test; -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.effects.GoldIncrease; -import org.luxons.sevenwonders.game.effects.MilitaryReinforcements; -import org.luxons.sevenwonders.game.effects.ProductionIncrease; -import org.luxons.sevenwonders.game.effects.RawPointsIncrease; - -import static org.junit.Assert.assertEquals; - -@RunWith(Theories.class) -public class NumericEffectSerializerTest { - - private Gson gson; - - @DataPoints - public static int[] dataPoints() { - return new int[] {-2, -1, 0, 1, 2, 5}; - } - - @Before - public void setUp() { - gson = new GsonBuilder().registerTypeAdapter(MilitaryReinforcements.class, new NumericEffectSerializer()) - .registerTypeAdapter(RawPointsIncrease.class, new NumericEffectSerializer()) - .registerTypeAdapter(GoldIncrease.class, new NumericEffectSerializer()) - // ProductionIncrease is not a numeric effect, it is here for negative testing purpose - .registerTypeAdapter(ProductionIncrease.class, new NumericEffectSerializer()) - .create(); - } - - @Test - public void serialize_militaryReinforcements_null() { - assertEquals("null", gson.toJson(null, MilitaryReinforcements.class)); - } - - @Test - public void serialize_rawPointsIncrease_null() { - assertEquals("null", gson.toJson(null, RawPointsIncrease.class)); - } - - @Test - public void serialize_goldIncrease_null() { - assertEquals("null", gson.toJson(null, GoldIncrease.class)); - } - - @Test(expected = IllegalArgumentException.class) - public void serialize_failOnUnknownType() { - gson.toJson(new ProductionIncrease()); - } - - @Theory - public void serialize_militaryReinforcements(int count) { - MilitaryReinforcements reinforcements = new MilitaryReinforcements(count); - assertEquals(String.valueOf(count), gson.toJson(reinforcements)); - } - - @Theory - public void serialize_rawPointsIncrease(int count) { - RawPointsIncrease points = new RawPointsIncrease(count); - assertEquals(String.valueOf(count), gson.toJson(points)); - } - - @Theory - public void serialize_goldIncrease(int count) { - GoldIncrease goldIncrease = new GoldIncrease(count); - assertEquals(String.valueOf(count), gson.toJson(goldIncrease)); - } - - @Theory - public void deserialize_militaryReinforcements(int count) { - MilitaryReinforcements reinforcements = new MilitaryReinforcements(count); - assertEquals(reinforcements, gson.fromJson(String.valueOf(count), MilitaryReinforcements.class)); - } - - @Theory - public void deserialize_rawPointsIncrease(int count) { - RawPointsIncrease points = new RawPointsIncrease(count); - assertEquals(points, gson.fromJson(String.valueOf(count), RawPointsIncrease.class)); - } - - @Theory - public void deserialize_goldIncrease(int count) { - GoldIncrease goldIncrease = new GoldIncrease(count); - assertEquals(goldIncrease, gson.fromJson(String.valueOf(count), GoldIncrease.class)); - } - - @Test(expected = NumberFormatException.class) - public void deserialize_militaryReinforcements_failOnEmptyString() { - gson.fromJson("\"\"", MilitaryReinforcements.class); - } - - @Test(expected = NumberFormatException.class) - public void deserialize_rawPointsIncrease_failOnEmptyString() { - gson.fromJson("\"\"", RawPointsIncrease.class); - } - - @Test(expected = NumberFormatException.class) - public void deserialize_goldIncrease_failOnEmptyString() { - gson.fromJson("\"\"", GoldIncrease.class); - } - - @Test(expected = NumberFormatException.class) - public void deserialize_militaryReinforcements_failOnNonNumericString() { - gson.fromJson("\"abc\"", MilitaryReinforcements.class); - } - - @Test(expected = NumberFormatException.class) - public void deserialize_rawPointsIncrease_failOnNonNumericString() { - gson.fromJson("\"abc\"", RawPointsIncrease.class); - } - - @Test(expected = NumberFormatException.class) - public void deserialize_goldIncrease_failOnNonNumericString() { - gson.fromJson("\"abc\"", GoldIncrease.class); - } - - @Test(expected = IllegalArgumentException.class) - public void deserialize_failOnUnknownType() { - gson.fromJson("\"2\"", ProductionIncrease.class); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializerTest.java deleted file mode 100644 index 8c5108ba..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializerTest.java +++ /dev/null @@ -1,189 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import java.lang.reflect.Type; -import java.util.List; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; -import org.junit.Before; -import org.junit.Test; -import org.luxons.sevenwonders.game.effects.ProductionIncrease; -import org.luxons.sevenwonders.game.resources.Production; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.resources.Resources; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class ProductionIncreaseSerializerTest { - - private Gson gson; - - @Before - public void setUp() { - Type resourceTypeList = new TypeToken<List<ResourceType>>() { - }.getType(); - gson = new GsonBuilder().registerTypeAdapter(Resources.class, new ResourcesSerializer()) - .registerTypeAdapter(ResourceType.class, new ResourceTypeSerializer()) - .registerTypeAdapter(resourceTypeList, new ResourceTypesSerializer()) - .registerTypeAdapter(Production.class, new ProductionSerializer()) - .registerTypeAdapter(ProductionIncrease.class, new ProductionIncreaseSerializer()) - .create(); - } - - private static ProductionIncrease create(boolean sellable, int wood, int stone, int clay) { - Production production = new Production(); - if (wood > 0) { - production.addFixedResource(ResourceType.WOOD, wood); - } - if (stone > 0) { - production.addFixedResource(ResourceType.STONE, stone); - } - if (clay > 0) { - production.addFixedResource(ResourceType.CLAY, clay); - } - ProductionIncrease prodIncrease = new ProductionIncrease(); - prodIncrease.setProduction(production); - prodIncrease.setSellable(sellable); - return prodIncrease; - } - - private static ProductionIncrease createChoice(boolean sellable, ResourceType... types) { - Production production = new Production(); - production.addChoice(types); - ProductionIncrease prodIncrease = new ProductionIncrease(); - prodIncrease.setProduction(production); - prodIncrease.setSellable(sellable); - return prodIncrease; - } - - @Test - public void serialize_nullAsNull() { - assertEquals("null", gson.toJson(null, ProductionIncrease.class)); - } - - @Test - public void serialize_emptyProdIncreaseAsNull() { - ProductionIncrease prodIncrease = new ProductionIncrease(); - assertEquals("null", gson.toJson(prodIncrease, ProductionIncrease.class)); - } - - @Test - public void serialize_singleType() { - ProductionIncrease prodIncrease = create(true, 1, 0, 0); - assertEquals("\"W\"", gson.toJson(prodIncrease, ProductionIncrease.class)); - } - - @Test - public void serialize_mixedTypes() { - ProductionIncrease prodIncrease = create(true, 1, 1, 1); - assertEquals("\"WSC\"", gson.toJson(prodIncrease, ProductionIncrease.class)); - } - - @Test - public void serialize_mixedTypes_notSellable() { - ProductionIncrease prodIncrease = create(false, 1, 1, 1); - assertEquals("\"(WSC)\"", gson.toJson(prodIncrease, ProductionIncrease.class)); - } - - @Test - public void serialize_choice2() { - ProductionIncrease prodIncrease = createChoice(true, ResourceType.WOOD, ResourceType.CLAY); - assertEquals("\"W/C\"", gson.toJson(prodIncrease, ProductionIncrease.class)); - } - - @Test - public void serialize_choice3() { - ProductionIncrease prodIncrease = createChoice(true, ResourceType.WOOD, ResourceType.ORE, ResourceType.CLAY); - assertEquals("\"W/O/C\"", gson.toJson(prodIncrease, ProductionIncrease.class)); - } - - @Test - public void serialize_choice3_notSellable() { - ProductionIncrease prodIncrease = createChoice(false, ResourceType.WOOD, ResourceType.ORE, ResourceType.CLAY); - assertEquals("\"(W/O/C)\"", gson.toJson(prodIncrease, ProductionIncrease.class)); - } - - @Test - public void serialize_choice2_unordered() { - ProductionIncrease prodIncrease = createChoice(true, ResourceType.CLAY, ResourceType.WOOD); - assertEquals("\"W/C\"", gson.toJson(prodIncrease, ProductionIncrease.class)); - } - - @Test - public void serialize_choice3_unordered() { - ProductionIncrease prodIncrease = createChoice(true, ResourceType.WOOD, ResourceType.CLAY, ResourceType.ORE); - assertEquals("\"W/O/C\"", gson.toJson(prodIncrease, ProductionIncrease.class)); - } - - @Test(expected = IllegalArgumentException.class) - public void serialize_failIfMultipleChoices() { - ProductionIncrease prodIncrease = createChoice(true, ResourceType.WOOD, ResourceType.CLAY); - prodIncrease.getProduction().addChoice(ResourceType.ORE, ResourceType.GLASS); - gson.toJson(prodIncrease, ProductionIncrease.class); - } - - @Test(expected = IllegalArgumentException.class) - public void serialize_failIfMixedFixedAndChoices() { - ProductionIncrease prodIncrease = create(true, 1, 0, 0); - prodIncrease.getProduction().addChoice(ResourceType.WOOD, ResourceType.CLAY); - gson.toJson(prodIncrease, ProductionIncrease.class); - } - - @Test - public void deserialize_nullFromNull() { - assertNull(gson.fromJson("null", ProductionIncrease.class)); - } - - @Test - public void deserialize_emptyList() { - ProductionIncrease prodIncrease = new ProductionIncrease(); - assertEquals(prodIncrease, gson.fromJson("\"\"", ProductionIncrease.class)); - } - - @Test(expected = IllegalArgumentException.class) - public void deserialize_failOnGarbageString() { - gson.fromJson("\"this is garbage\"", ProductionIncrease.class); - } - - @Test(expected = IllegalArgumentException.class) - public void deserialize_failOnGarbageStringWithSlashes() { - gson.fromJson("\"this/is/garbage\"", ProductionIncrease.class); - } - - @Test - public void deserialize_singleType() { - ProductionIncrease prodIncrease = create(true, 1, 0, 0); - assertEquals(prodIncrease, gson.fromJson("\"W\"", ProductionIncrease.class)); - } - - @Test - public void deserialize_multipleTimesSameType_notSellable() { - ProductionIncrease prodIncrease = create(false, 3, 0, 0); - assertEquals(prodIncrease, gson.fromJson("\"(WWW)\"", ProductionIncrease.class)); - } - - @Test - public void deserialize_mixedTypes() { - ProductionIncrease prodIncrease = create(true, 1, 1, 1); - assertEquals(prodIncrease, gson.fromJson("\"WCS\"", ProductionIncrease.class)); - } - - @Test - public void deserialize_choice2() { - ProductionIncrease prodIncrease = createChoice(true, ResourceType.WOOD, ResourceType.CLAY); - assertEquals(prodIncrease, gson.fromJson("\"W/C\"", ProductionIncrease.class)); - } - - @Test - public void deserialize_choice3_notSellable() { - ProductionIncrease prodIncrease = createChoice(false, ResourceType.WOOD, ResourceType.ORE, ResourceType.CLAY); - assertEquals(prodIncrease, gson.fromJson("\"(W/O/C)\"", ProductionIncrease.class)); - } - - @Test(expected = IllegalArgumentException.class) - public void deserialize_failOnMultipleResourcesInChoice() { - gson.fromJson("\"W/SS/C\"", ProductionIncrease.class); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializerTest.java deleted file mode 100644 index 86ee16e9..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializerTest.java +++ /dev/null @@ -1,199 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import java.lang.reflect.Type; -import java.util.List; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; -import org.junit.Before; -import org.junit.Test; -import org.luxons.sevenwonders.game.resources.Production; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.resources.Resources; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class ProductionSerializerTest { - - private Gson gson; - - @Before - public void setUp() { - Type resourceTypeList = new TypeToken<List<ResourceType>>() { - }.getType(); - gson = new GsonBuilder().registerTypeAdapter(Resources.class, new ResourcesSerializer()) - .registerTypeAdapter(ResourceType.class, new ResourceTypeSerializer()) - .registerTypeAdapter(resourceTypeList, new ResourceTypesSerializer()) - .registerTypeAdapter(Production.class, new ProductionSerializer()) - .create(); - } - - private static Production create(int wood, int stone, int clay) { - Production production = new Production(); - if (wood > 0) { - production.addFixedResource(ResourceType.WOOD, wood); - } - if (stone > 0) { - production.addFixedResource(ResourceType.STONE, stone); - } - if (clay > 0) { - production.addFixedResource(ResourceType.CLAY, clay); - } - return production; - } - - private static Production createChoice(ResourceType... types) { - Production production = new Production(); - production.addChoice(types); - return production; - } - - @Test - public void serialize_nullAsNull() { - assertEquals("null", gson.toJson(null, Production.class)); - } - - @Test - public void serialize_emptyProdIncreaseAsNull() { - Production prodIncrease = new Production(); - assertEquals("null", gson.toJson(prodIncrease, Production.class)); - } - - @Test - public void serialize_singleType() { - Production prodIncrease = create(1, 0, 0); - assertEquals("\"W\"", gson.toJson(prodIncrease, Production.class)); - } - - @Test - public void serialize_multipleTimesSameType() { - Production prodIncrease = create(3, 0, 0); - assertEquals("\"WWW\"", gson.toJson(prodIncrease, Production.class)); - } - - @Test - public void serialize_mixedTypes() { - Production prodIncrease = create(1, 1, 1); - assertEquals("\"WSC\"", gson.toJson(prodIncrease, Production.class)); - } - - @Test - public void serialize_mixedTypesMultiple() { - Production prodIncrease = create(2, 1, 2); - assertEquals("\"WWSCC\"", gson.toJson(prodIncrease, Production.class)); - } - - @Test - public void serialize_choice2() { - Production prodIncrease = createChoice(ResourceType.WOOD, ResourceType.CLAY); - assertEquals("\"W/C\"", gson.toJson(prodIncrease, Production.class)); - } - - @Test - public void serialize_choice3() { - Production prodIncrease = createChoice(ResourceType.WOOD, ResourceType.ORE, ResourceType.CLAY); - assertEquals("\"W/O/C\"", gson.toJson(prodIncrease, Production.class)); - } - - @Test - public void serialize_choice2_unordered() { - Production prodIncrease = createChoice(ResourceType.CLAY, ResourceType.WOOD); - assertEquals("\"W/C\"", gson.toJson(prodIncrease, Production.class)); - } - - @Test - public void serialize_choice3_unordered() { - Production prodIncrease = createChoice(ResourceType.WOOD, ResourceType.CLAY, ResourceType.ORE); - assertEquals("\"W/O/C\"", gson.toJson(prodIncrease, Production.class)); - } - - @Test(expected = IllegalArgumentException.class) - public void serialize_failIfMultipleChoices() { - Production production = createChoice(ResourceType.WOOD, ResourceType.CLAY); - production.addChoice(ResourceType.ORE, ResourceType.GLASS); - gson.toJson(production, Production.class); - } - - @Test(expected = IllegalArgumentException.class) - public void serialize_failIfMixedFixedAndChoices() { - Production production = create(1, 0, 0); - production.addChoice(ResourceType.WOOD, ResourceType.CLAY); - gson.toJson(production, Production.class); - } - - @Test - public void deserialize_nullFromNull() { - assertNull(gson.fromJson("null", Production.class)); - } - - @Test - public void deserialize_emptyList() { - Production prodIncrease = new Production(); - assertEquals(prodIncrease, gson.fromJson("\"\"", Production.class)); - } - - @Test(expected = IllegalArgumentException.class) - public void deserialize_failOnGarbageString() { - gson.fromJson("\"this is garbage\"", Production.class); - } - - @Test(expected = IllegalArgumentException.class) - public void deserialize_failOnGarbageStringWithSlashes() { - gson.fromJson("\"this/is/garbage\"", Production.class); - } - - @Test - public void deserialize_singleType() { - Production prodIncrease = create(1, 0, 0); - assertEquals(prodIncrease, gson.fromJson("\"W\"", Production.class)); - } - - @Test - public void deserialize_multipleTimesSameType() { - Production prodIncrease = create(3, 0, 0); - assertEquals(prodIncrease, gson.fromJson("\"WWW\"", Production.class)); - } - - @Test - public void deserialize_mixedTypes() { - Production prodIncrease = create(1, 1, 1); - assertEquals(prodIncrease, gson.fromJson("\"WCS\"", Production.class)); - } - - @Test - public void deserialize_mixedTypes_unordered() { - Production prodIncrease = create(1, 3, 2); - assertEquals(prodIncrease, gson.fromJson("\"SCWCSS\"", Production.class)); - } - - @Test - public void deserialize_choice2() { - Production prodIncrease = createChoice(ResourceType.WOOD, ResourceType.CLAY); - assertEquals(prodIncrease, gson.fromJson("\"W/C\"", Production.class)); - } - - @Test - public void deserialize_choice3() { - Production prodIncrease = createChoice(ResourceType.WOOD, ResourceType.ORE, ResourceType.CLAY); - assertEquals(prodIncrease, gson.fromJson("\"W/O/C\"", Production.class)); - } - - @Test - public void deserialize_choice2_unordered() { - Production prodIncrease = createChoice(ResourceType.CLAY, ResourceType.WOOD); - assertEquals(prodIncrease, gson.fromJson("\"W/C\"", Production.class)); - } - - @Test - public void deserialize_choice3_unordered() { - Production prodIncrease = createChoice(ResourceType.WOOD, ResourceType.CLAY, ResourceType.ORE); - assertEquals(prodIncrease, gson.fromJson("\"W/O/C\"", Production.class)); - } - - @Test(expected = IllegalArgumentException.class) - public void deserialize_failOnMultipleResourcesInChoice() { - gson.fromJson("\"W/SS/C\"", Production.class); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializerTest.java deleted file mode 100644 index 3a688f4d..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializerTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import org.junit.Before; -import org.junit.Test; -import org.luxons.sevenwonders.game.resources.ResourceType; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class ResourceTypeSerializerTest { - - private Gson gson; - - @Before - public void setUp() { - gson = new GsonBuilder().registerTypeAdapter(ResourceType.class, new ResourceTypeSerializer()).create(); - } - - @Test - public void serialize_useSymbolForEachType() { - for (ResourceType type : ResourceType.values()) { - String expectedJson = "\"" + type.getSymbol() + "\""; - assertEquals(expectedJson, gson.toJson(type)); - } - } - - @Test - public void deserialize_useSymbolForEachType() { - for (ResourceType type : ResourceType.values()) { - String typeInJson = "\"" + type.getSymbol() + "\""; - assertEquals(type, gson.fromJson(typeInJson, ResourceType.class)); - } - } - - @Test - public void deserialize_nullFromNull() { - assertNull(gson.fromJson("null", ResourceType.class)); - } - - @Test(expected = IllegalArgumentException.class) - public void deserialize_failsOnEmptyString() { - gson.fromJson("\"\"", ResourceType.class); - } - - @Test(expected = IllegalArgumentException.class) - public void deserialize_failsOnGarbageString() { - gson.fromJson("\"thisisgarbage\"", ResourceType.class); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializerTest.java deleted file mode 100644 index b5011fa5..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializerTest.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; -import org.junit.Before; -import org.junit.Test; -import org.luxons.sevenwonders.game.resources.ResourceType; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class ResourceTypesSerializerTest { - - private Gson gson; - - @Before - public void setUp() { - gson = new GsonBuilder().registerTypeAdapter(createListTypeToken(), new ResourceTypesSerializer()).create(); - } - - private static Type createListTypeToken() { - return new TypeToken<List<ResourceType>>() { - }.getType(); - } - - @Test - public void serialize_null() { - assertEquals("null", gson.toJson(null, createListTypeToken())); - } - - @Test - public void serialize_emptyList() { - List<ResourceType> types = new ArrayList<>(); - assertEquals("\"\"", gson.toJson(types, createListTypeToken())); - } - - @Test - public void serialize_singleType() { - List<ResourceType> types = new ArrayList<>(); - types.add(ResourceType.WOOD); - assertEquals("\"W\"", gson.toJson(types, createListTypeToken())); - } - - @Test - public void serialize_multipleTimesSameType() { - List<ResourceType> types = new ArrayList<>(); - types.add(ResourceType.WOOD); - types.add(ResourceType.WOOD); - types.add(ResourceType.WOOD); - assertEquals("\"WWW\"", gson.toJson(types, createListTypeToken())); - } - - @Test - public void serialize_mixedTypes() { - List<ResourceType> types = new ArrayList<>(); - types.add(ResourceType.WOOD); - types.add(ResourceType.CLAY); - types.add(ResourceType.STONE); - assertEquals("\"WCS\"", gson.toJson(types, createListTypeToken())); - } - - @Test - public void deserialize_null() { - assertNull(gson.fromJson("null", createListTypeToken())); - } - - @Test - public void deserialize_emptyList() { - List<ResourceType> types = new ArrayList<>(); - assertEquals(types, gson.fromJson("\"\"", createListTypeToken())); - } - - @Test - public void deserialize_singleType() { - List<ResourceType> types = new ArrayList<>(); - types.add(ResourceType.WOOD); - assertEquals(types, gson.fromJson("\"W\"", createListTypeToken())); - } - - @Test - public void deserialize_multipleTimesSameType() { - List<ResourceType> types = new ArrayList<>(); - types.add(ResourceType.WOOD); - types.add(ResourceType.WOOD); - types.add(ResourceType.WOOD); - assertEquals(types, gson.fromJson("\"WWW\"", createListTypeToken())); - } - - @Test - public void deserialize_mixedTypes() { - List<ResourceType> types = new ArrayList<>(); - types.add(ResourceType.WOOD); - types.add(ResourceType.CLAY); - types.add(ResourceType.STONE); - assertEquals(types, gson.fromJson("\"WCS\"", createListTypeToken())); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializerTest.java deleted file mode 100644 index e1dc4e2b..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializerTest.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import org.junit.Before; -import org.junit.Test; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.resources.Resources; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class ResourcesSerializerTest { - - private Gson gson; - - @Before - public void setUp() { - gson = new GsonBuilder().registerTypeAdapter(Resources.class, new ResourcesSerializer()).create(); - } - - @Test - public void serialize_null() { - assertEquals("null", gson.toJson(null, Resources.class)); - } - - @Test - public void serialize_emptyResourcesToNull() { - Resources resources = new Resources(); - assertEquals("null", gson.toJson(resources)); - } - - @Test - public void serialize_singleType() { - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 1); - assertEquals("\"W\"", gson.toJson(resources)); - } - - @Test - public void serialize_multipleTimesSameType() { - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 3); - assertEquals("\"WWW\"", gson.toJson(resources)); - } - - @Test - public void serialize_mixedTypes() { - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 1); - resources.add(ResourceType.STONE, 1); - resources.add(ResourceType.CLAY, 1); - assertEquals("\"WSC\"", gson.toJson(resources)); - } - - @Test - public void serialize_mixedTypes_unordered() { - Resources resources = new Resources(); - resources.add(ResourceType.CLAY, 1); - resources.add(ResourceType.WOOD, 2); - resources.add(ResourceType.CLAY, 1); - resources.add(ResourceType.STONE, 1); - assertEquals("\"WWSCC\"", gson.toJson(resources)); - } - - @Test - public void deserialize_null() { - assertNull(gson.fromJson("null", Resources.class)); - } - - @Test - public void deserialize_emptyList() { - Resources resources = new Resources(); - assertEquals(resources, gson.fromJson("\"\"", Resources.class)); - } - - @Test - public void deserialize_singleType() { - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 1); - assertEquals(resources, gson.fromJson("\"W\"", Resources.class)); - } - - @Test - public void deserialize_multipleTimesSameType() { - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 3); - assertEquals(resources, gson.fromJson("\"WWW\"", Resources.class)); - } - - @Test - public void deserialize_mixedTypes() { - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 1); - resources.add(ResourceType.CLAY, 1); - resources.add(ResourceType.STONE, 1); - assertEquals(resources, gson.fromJson("\"WCS\"", Resources.class)); - } - - @Test - public void deserialize_mixedTypes_unordered() { - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 1); - resources.add(ResourceType.CLAY, 2); - resources.add(ResourceType.STONE, 3); - assertEquals(resources, gson.fromJson("\"SCWCSS\"", Resources.class)); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializerTest.java deleted file mode 100644 index 0387e198..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializerTest.java +++ /dev/null @@ -1,145 +0,0 @@ -package org.luxons.sevenwonders.game.data.serializers; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import org.junit.Before; -import org.junit.Test; -import org.luxons.sevenwonders.game.boards.ScienceType; -import org.luxons.sevenwonders.game.effects.ScienceProgress; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -public class ScienceProgressSerializerTest { - - private static final String COMPASS_STR = "\"COMPASS\""; - - private static final String WHEEL_STR = "\"WHEEL\""; - - private static final String TABLET_STR = "\"TABLET\""; - - private static final String JOKER_STR = "\"any\""; - - private Gson gson; - - @Before - public void setUp() { - gson = new GsonBuilder().registerTypeAdapter(ScienceProgress.class, new ScienceProgressSerializer()).create(); - } - - @Test - public void serialize_emptyToNull() { - ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 0, 0); - String json = gson.toJson(progress); - assertEquals("null", json); - } - - @Test - public void serialize_oneCompass() { - ScienceProgress progress = TestUtils.createScienceProgress(1, 0, 0, 0); - String json = gson.toJson(progress); - assertEquals(COMPASS_STR, json); - } - - @Test - public void serialize_oneWheel() { - ScienceProgress progress = TestUtils.createScienceProgress(0, 1, 0, 0); - String json = gson.toJson(progress); - assertEquals(WHEEL_STR, json); - } - - @Test - public void serialize_oneTablet() { - ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 1, 0); - String json = gson.toJson(progress); - assertEquals(TABLET_STR, json); - } - - @Test - public void serialize_oneJoker() { - ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 0, 1); - String json = gson.toJson(progress); - assertEquals(JOKER_STR, json); - } - - @Test(expected = UnsupportedOperationException.class) - public void serialize_failOnMultipleCompasses() { - ScienceProgress progress = TestUtils.createScienceProgress(2, 0, 0, 0); - gson.toJson(progress); - } - - @Test(expected = UnsupportedOperationException.class) - public void serialize_failOnMultipleWheels() { - ScienceProgress progress = TestUtils.createScienceProgress(0, 2, 0, 0); - gson.toJson(progress); - } - - @Test(expected = UnsupportedOperationException.class) - public void serialize_failOnMultipleTablets() { - ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 2, 0); - gson.toJson(progress); - } - - @Test(expected = UnsupportedOperationException.class) - public void serialize_failOnMultipleJokers() { - ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 0, 2); - gson.toJson(progress); - } - - @Test(expected = UnsupportedOperationException.class) - public void serialize_failOnMixedElements() { - ScienceProgress progress = TestUtils.createScienceProgress(1, 1, 0, 0); - gson.toJson(progress); - } - - @Test(expected = IllegalArgumentException.class) - public void deserialize_failOnEmptyString() { - gson.fromJson("\"\"", ScienceProgress.class); - } - - @Test(expected = IllegalArgumentException.class) - public void deserialize_failOnGarbageString() { - gson.fromJson("thisisgarbage", ScienceProgress.class); - } - - @Test - public void deserialize_compass() { - ScienceProgress progress = gson.fromJson(COMPASS_STR, ScienceProgress.class); - assertNotNull(progress.getScience()); - assertEquals(1, progress.getScience().getQuantity(ScienceType.COMPASS)); - assertEquals(0, progress.getScience().getQuantity(ScienceType.WHEEL)); - assertEquals(0, progress.getScience().getQuantity(ScienceType.TABLET)); - assertEquals(0, progress.getScience().getJokers()); - } - - @Test - public void deserialize_wheel() { - ScienceProgress progress = gson.fromJson(WHEEL_STR, ScienceProgress.class); - assertNotNull(progress.getScience()); - assertEquals(0, progress.getScience().getQuantity(ScienceType.COMPASS)); - assertEquals(1, progress.getScience().getQuantity(ScienceType.WHEEL)); - assertEquals(0, progress.getScience().getQuantity(ScienceType.TABLET)); - assertEquals(0, progress.getScience().getJokers()); - } - - @Test - public void deserialize_tablet() { - ScienceProgress progress = gson.fromJson(TABLET_STR, ScienceProgress.class); - assertNotNull(progress.getScience()); - assertEquals(0, progress.getScience().getQuantity(ScienceType.COMPASS)); - assertEquals(0, progress.getScience().getQuantity(ScienceType.WHEEL)); - assertEquals(1, progress.getScience().getQuantity(ScienceType.TABLET)); - assertEquals(0, progress.getScience().getJokers()); - } - - @Test - public void deserialize_joker() { - ScienceProgress progress = gson.fromJson(JOKER_STR, ScienceProgress.class); - assertNotNull(progress.getScience()); - assertEquals(0, progress.getScience().getQuantity(ScienceType.COMPASS)); - assertEquals(0, progress.getScience().getQuantity(ScienceType.WHEEL)); - assertEquals(0, progress.getScience().getQuantity(ScienceType.TABLET)); - assertEquals(1, progress.getScience().getJokers()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElementTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElementTest.java deleted file mode 100644 index bacea896..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElementTest.java +++ /dev/null @@ -1,142 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import java.util.Arrays; -import java.util.Collections; - -import org.junit.Before; -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.boards.BoardElementType; -import org.luxons.sevenwonders.game.boards.RelativeBoardPosition; -import org.luxons.sevenwonders.game.cards.CardBack; -import org.luxons.sevenwonders.game.cards.Color; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; - -@RunWith(Theories.class) -public class BonusPerBoardElementTest { - - private Table table; - - @DataPoints - public static int[] values() { - return new int[]{0, 1, 2, 3}; - } - - @DataPoints - public static Color[] colors() { - return Color.values(); - } - - @DataPoints - public static RelativeBoardPosition[] positions() { - return RelativeBoardPosition.values(); - } - - @Before - public void setUp() { - table = TestUtils.createTable(4); - } - - private static BonusPerBoardElement createBonus(BoardElementType type, int gold, int points, Color... colors) { - BonusPerBoardElement bonus = new BonusPerBoardElement(); - bonus.setType(type); - bonus.setGold(gold); - bonus.setPoints(points); - bonus.setColors(Arrays.asList(colors)); - return bonus; - } - - @Theory - public void computePoints_countsCards(RelativeBoardPosition boardPosition, int nbCards, int nbOtherCards, - int points, int gold, Color color) { - Board board = table.getBoard(0, boardPosition); - TestUtils.addCards(board, nbCards, nbOtherCards, color); - - BonusPerBoardElement bonus = createBonus(BoardElementType.CARD, gold, points, color); - bonus.setBoards(Collections.singletonList(boardPosition)); - - assertEquals(nbCards * points, bonus.computePoints(table, 0)); - } - - @Theory - public void computePoints_countsDefeatTokens(RelativeBoardPosition boardPosition, int nbDefeatTokens, int points, - int gold) { - Board board = table.getBoard(0, boardPosition); - for (int i = 0; i < nbDefeatTokens; i++) { - board.getMilitary().defeat(); - } - - BonusPerBoardElement bonus = createBonus(BoardElementType.DEFEAT_TOKEN, gold, points); - bonus.setBoards(Collections.singletonList(boardPosition)); - - assertEquals(nbDefeatTokens * points, bonus.computePoints(table, 0)); - } - - @Theory - public void computePoints_countsWonderStages(RelativeBoardPosition boardPosition, int nbStages, int points, - int gold) { - Board board = table.getBoard(0, boardPosition); - for (int i = 0; i < nbStages; i++) { - board.getWonder().buildLevel(new CardBack("")); - } - - BonusPerBoardElement bonus = createBonus(BoardElementType.BUILT_WONDER_STAGES, gold, points); - bonus.setBoards(Collections.singletonList(boardPosition)); - - assertEquals(nbStages * points, bonus.computePoints(table, 0)); - } - - @Theory - public void apply_countsCards(RelativeBoardPosition boardPosition, int nbCards, int nbOtherCards, int points, - int gold, Color color) { - Board board = table.getBoard(0, boardPosition); - TestUtils.addCards(board, nbCards, nbOtherCards, color); - - BonusPerBoardElement bonus = createBonus(BoardElementType.CARD, gold, points, color); - bonus.setBoards(Collections.singletonList(boardPosition)); - - Board selfBoard = table.getBoard(0); - int initialGold = selfBoard.getGold(); - bonus.apply(table, 0); - assertEquals(initialGold + nbCards * gold, selfBoard.getGold()); - } - - @Theory - public void apply_countsDefeatTokens(RelativeBoardPosition boardPosition, int nbDefeatTokens, int points, - int gold) { - Board board = table.getBoard(0, boardPosition); - for (int i = 0; i < nbDefeatTokens; i++) { - board.getMilitary().defeat(); - } - - BonusPerBoardElement bonus = createBonus(BoardElementType.DEFEAT_TOKEN, gold, points); - bonus.setBoards(Collections.singletonList(boardPosition)); - - Board selfBoard = table.getBoard(0); - int initialGold = selfBoard.getGold(); - bonus.apply(table, 0); - assertEquals(initialGold + nbDefeatTokens * gold, selfBoard.getGold()); - } - - @Theory - public void apply_countsWonderStages(RelativeBoardPosition boardPosition, int nbStages, int points, int gold) { - Board board = table.getBoard(0, boardPosition); - for (int i = 0; i < nbStages; i++) { - board.getWonder().buildLevel(new CardBack("")); - } - - BonusPerBoardElement bonus = createBonus(BoardElementType.BUILT_WONDER_STAGES, gold, points); - bonus.setBoards(Collections.singletonList(boardPosition)); - - Board selfBoard = table.getBoard(0); - int initialGold = selfBoard.getGold(); - bonus.apply(table, 0); - assertEquals(initialGold + nbStages * gold, selfBoard.getGold()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/DiscountTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/DiscountTest.java deleted file mode 100644 index c6819d3a..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/DiscountTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import org.junit.Assume; -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.resources.BoughtResources; -import org.luxons.sevenwonders.game.resources.Provider; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; - -@RunWith(Theories.class) -public class DiscountTest { - - @DataPoints - public static int[] discountedPrices() { - return new int[] {0, 1, 2}; - } - - @DataPoints - public static ResourceType[] resourceTypes() { - return ResourceType.values(); - } - - @DataPoints - public static Provider[] providers() { - return Provider.values(); - } - - @Theory - public void apply_givesDiscountedPrice(int discountedPrice, ResourceType discountedType, Provider provider) { - Board board = TestUtils.createBoard(ResourceType.CLAY, 3); - Discount discount = new Discount(); - discount.setDiscountedPrice(discountedPrice); - discount.getProviders().add(provider); - discount.getResourceTypes().add(discountedType); - discount.apply(board); - - BoughtResources boughtResources = TestUtils.createBoughtResources(provider, discountedType); - assertEquals(discountedPrice, board.getTradingRules().computeCost(boughtResources)); - } - - @Theory - public void apply_doesNotAffectOtherResources(int discountedPrice, ResourceType discountedType, Provider provider, - ResourceType otherType, Provider otherProvider) { - Assume.assumeTrue(otherProvider != provider); - Assume.assumeTrue(otherType != discountedType); - - Board board = TestUtils.createBoard(ResourceType.CLAY, 3); - Discount discount = new Discount(); - discount.setDiscountedPrice(discountedPrice); - discount.getProviders().add(provider); - discount.getResourceTypes().add(discountedType); - discount.apply(board); - - // this is the default in the settings used by TestUtils.createBoard() - int normalPrice = 2; - - BoughtResources fromOtherType = TestUtils.createBoughtResources(provider, otherType); - assertEquals(normalPrice, board.getTradingRules().computeCost(fromOtherType)); - - BoughtResources fromOtherProvider = TestUtils.createBoughtResources(otherProvider, discountedType); - assertEquals(normalPrice, board.getTradingRules().computeCost(fromOtherProvider)); - - BoughtResources fromOtherProviderAndType = TestUtils.createBoughtResources(otherProvider, otherType); - assertEquals(normalPrice, board.getTradingRules().computeCost(fromOtherProviderAndType)); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/GoldIncreaseTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/GoldIncreaseTest.java deleted file mode 100644 index be124251..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/GoldIncreaseTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -@RunWith(Theories.class) -public class GoldIncreaseTest { - - @DataPoints - public static int[] goldAmounts() { - return new int[] {-5, -1, 0, 1, 2, 5, 10}; - } - - @DataPoints - public static ResourceType[] resourceTypes() { - return ResourceType.values(); - } - - @Theory - public void apply_increaseGoldWithRightAmount(int initialAmount, int goldIncreaseAmount, ResourceType type) { - Board board = TestUtils.createBoard(type, initialAmount); - GoldIncrease goldIncrease = new GoldIncrease(goldIncreaseAmount); - - goldIncrease.apply(board); - - assertEquals(initialAmount + goldIncreaseAmount, board.getGold()); - } - - @Theory - public void computePoints_isAlwaysZero(int gold) { - GoldIncrease goldIncrease = new GoldIncrease(gold); - Table table = TestUtils.createTable(5); - assertEquals(0, goldIncrease.computePoints(table, 0)); - } - - @Theory - public void equals_falseWhenNull(int gold) { - GoldIncrease goldIncrease = new GoldIncrease(gold); - //noinspection ObjectEqualsNull - assertFalse(goldIncrease.equals(null)); - } - - @Theory - public void equals_falseWhenDifferentClass(int gold) { - GoldIncrease goldIncrease = new GoldIncrease(gold); - MilitaryReinforcements reinforcements = new MilitaryReinforcements(gold); - //noinspection EqualsBetweenInconvertibleTypes - assertFalse(goldIncrease.equals(reinforcements)); - } - - @Theory - public void equals_trueWhenSame(int gold) { - GoldIncrease goldIncrease = new GoldIncrease(gold); - assertEquals(goldIncrease, goldIncrease); - } - - @Theory - public void equals_trueWhenSameContent(int gold) { - GoldIncrease goldIncrease1 = new GoldIncrease(gold); - GoldIncrease goldIncrease2 = new GoldIncrease(gold); - assertTrue(goldIncrease1.equals(goldIncrease2)); - } - - @Theory - public void hashCode_sameWhenSameContent(int gold) { - GoldIncrease goldIncrease1 = new GoldIncrease(gold); - GoldIncrease goldIncrease2 = new GoldIncrease(gold); - assertEquals(goldIncrease1.hashCode(), goldIncrease2.hashCode()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcementsTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcementsTest.java deleted file mode 100644 index 478af746..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcementsTest.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -@RunWith(Theories.class) -public class MilitaryReinforcementsTest { - - @DataPoints - public static int[] shieldCounts() { - return new int[] {0, 1, 2, 3, 5}; - } - - @DataPoints - public static ResourceType[] resourceTypes() { - return ResourceType.values(); - } - - @Theory - public void apply_increaseGoldWithRightAmount(int initialShields, int additionalShields, ResourceType type) { - Board board = TestUtils.createBoard(type); - board.getMilitary().addShields(initialShields); - - MilitaryReinforcements reinforcements = new MilitaryReinforcements(additionalShields); - reinforcements.apply(board); - - assertEquals(initialShields + additionalShields, board.getMilitary().getNbShields()); - } - - @Theory - public void computePoints_isAlwaysZero(int shields) { - MilitaryReinforcements reinforcements = new MilitaryReinforcements(shields); - Table table = TestUtils.createTable(5); - assertEquals(0, reinforcements.computePoints(table, 0)); - } - - @Theory - public void equals_falseWhenNull(int shields) { - MilitaryReinforcements reinforcements = new MilitaryReinforcements(shields); - //noinspection ObjectEqualsNull - assertFalse(reinforcements.equals(null)); - } - - @Theory - public void equals_falseWhenDifferentClass(int shields) { - MilitaryReinforcements reinforcements = new MilitaryReinforcements(shields); - GoldIncrease goldIncrease = new GoldIncrease(shields); - //noinspection EqualsBetweenInconvertibleTypes - assertFalse(reinforcements.equals(goldIncrease)); - } - - @Theory - public void equals_trueWhenSame(int shields) { - MilitaryReinforcements reinforcements = new MilitaryReinforcements(shields); - assertEquals(reinforcements, reinforcements); - } - - @Theory - public void equals_trueWhenSameContent(int shields) { - MilitaryReinforcements reinforcements1 = new MilitaryReinforcements(shields); - MilitaryReinforcements reinforcements2 = new MilitaryReinforcements(shields); - assertTrue(reinforcements1.equals(reinforcements2)); - } - - @Theory - public void hashCode_sameWhenSameContent(int shields) { - MilitaryReinforcements reinforcements1 = new MilitaryReinforcements(shields); - MilitaryReinforcements reinforcements2 = new MilitaryReinforcements(shields); - assertEquals(reinforcements1.hashCode(), reinforcements2.hashCode()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/ProductionIncreaseTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/ProductionIncreaseTest.java deleted file mode 100644 index b6a47292..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/ProductionIncreaseTest.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.resources.Production; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.resources.Resources; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -@RunWith(Theories.class) -public class ProductionIncreaseTest { - - @DataPoints - public static ResourceType[] resourceTypes() { - return ResourceType.values(); - } - - private static ProductionIncrease createProductionIncrease(ResourceType... types) { - ProductionIncrease effect = new ProductionIncrease(); - effect.getProduction().addAll(TestUtils.createFixedProduction(types)); - return effect; - } - - @Theory - public void apply_boardContainsAddedResourceType(ResourceType initialType, ResourceType addedType, - ResourceType extraType) { - Board board = TestUtils.createBoard(initialType); - ProductionIncrease effect = createProductionIncrease(addedType); - effect.setSellable(false); - - effect.apply(board); - - Resources resources = TestUtils.createResources(initialType, addedType); - assertTrue(board.getProduction().contains(resources)); - assertFalse(board.getPublicProduction().contains(resources)); - - Resources moreResources = TestUtils.createResources(initialType, addedType, extraType); - assertFalse(board.getProduction().contains(moreResources)); - assertFalse(board.getPublicProduction().contains(moreResources)); - } - - @Theory - public void apply_boardContainsAddedResourceType_sellable(ResourceType initialType, ResourceType addedType, - ResourceType extraType) { - Board board = TestUtils.createBoard(initialType); - ProductionIncrease effect = createProductionIncrease(addedType); - effect.setSellable(true); - - effect.apply(board); - - Resources resources = TestUtils.createResources(initialType, addedType); - assertTrue(board.getProduction().contains(resources)); - assertTrue(board.getPublicProduction().contains(resources)); - - Resources moreResources = TestUtils.createResources(initialType, addedType, extraType); - assertFalse(board.getProduction().contains(moreResources)); - assertFalse(board.getPublicProduction().contains(moreResources)); - } - - @Theory - public void computePoints_isAlwaysZero(ResourceType addedType) { - ProductionIncrease effect = createProductionIncrease(addedType); - Table table = TestUtils.createTable(5); - assertEquals(0, effect.computePoints(table, 0)); - } - - @Theory - public void equals_falseWhenNull(ResourceType addedType) { - ProductionIncrease effect = createProductionIncrease(addedType); - //noinspection ObjectEqualsNull - assertFalse(effect.equals(null)); - } - - @Theory - public void equals_falseWhenDifferentClass(ResourceType addedType) { - ProductionIncrease effect = createProductionIncrease(addedType); - Production production = TestUtils.createFixedProduction(addedType); - //noinspection EqualsBetweenInconvertibleTypes - assertFalse(effect.equals(production)); - } - - @Theory - public void equals_trueWhenSame(ResourceType addedType) { - ProductionIncrease effect = createProductionIncrease(addedType); - assertEquals(effect, effect); - } - - @Theory - public void equals_trueWhenSameContent(ResourceType addedType) { - ProductionIncrease effect1 = createProductionIncrease(addedType); - ProductionIncrease effect2 = createProductionIncrease(addedType); - assertTrue(effect1.equals(effect2)); - } - - @Theory - public void hashCode_sameWhenSameContent(ResourceType addedType) { - ProductionIncrease effect1 = createProductionIncrease(addedType); - ProductionIncrease effect2 = createProductionIncrease(addedType); - assertEquals(effect1.hashCode(), effect2.hashCode()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/RawPointsIncreaseTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/RawPointsIncreaseTest.java deleted file mode 100644 index 020eda73..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/RawPointsIncreaseTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -@RunWith(Theories.class) -public class RawPointsIncreaseTest { - - @DataPoints - public static int[] points() { - return new int[] {0, 1, 2, 3, 5}; - } - - @Theory - public void computePoints_equalsNbOfPoints(int points) { - RawPointsIncrease rawPointsIncrease = new RawPointsIncrease(points); - Table table = TestUtils.createTable(5); - assertEquals(points, rawPointsIncrease.computePoints(table, 0)); - } - - @Theory - public void equals_falseWhenNull(int points) { - RawPointsIncrease rawPointsIncrease = new RawPointsIncrease(points); - //noinspection ObjectEqualsNull - assertFalse(rawPointsIncrease.equals(null)); - } - - @Theory - public void equals_falseWhenDifferentClass(int points) { - RawPointsIncrease rawPointsIncrease = new RawPointsIncrease(points); - GoldIncrease goldIncrease = new GoldIncrease(points); - //noinspection EqualsBetweenInconvertibleTypes - assertFalse(rawPointsIncrease.equals(goldIncrease)); - } - - @Theory - public void equals_trueWhenSame(int points) { - RawPointsIncrease rawPointsIncrease = new RawPointsIncrease(points); - assertEquals(rawPointsIncrease, rawPointsIncrease); - } - - @Theory - public void equals_trueWhenSameContent(int points) { - RawPointsIncrease rawPointsIncrease1 = new RawPointsIncrease(points); - RawPointsIncrease rawPointsIncrease2 = new RawPointsIncrease(points); - assertTrue(rawPointsIncrease1.equals(rawPointsIncrease2)); - } - - @Theory - public void hashCode_sameWhenSameContent(int points) { - RawPointsIncrease rawPointsIncrease1 = new RawPointsIncrease(points); - RawPointsIncrease rawPointsIncrease2 = new RawPointsIncrease(points); - assertEquals(rawPointsIncrease1.hashCode(), rawPointsIncrease2.hashCode()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/ScienceProgressTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/ScienceProgressTest.java deleted file mode 100644 index b5402a7e..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/ScienceProgressTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.boards.Science; -import org.luxons.sevenwonders.game.boards.ScienceType; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; - -@RunWith(Theories.class) -public class ScienceProgressTest { - - @DataPoints - public static int[] elementsCount() { - return new int[] {0, 1, 2}; - } - - @Theory - public void apply_initContainsAddedScience(int initCompasses, int initWheels, int initTablets, int initJokers, - int compasses, int wheels, int tablets, int jokers) { - Board board = TestUtils.createBoard(ResourceType.ORE); - Science initialScience = TestUtils.createScience(initCompasses, initWheels, initTablets, initJokers); - board.getScience().addAll(initialScience); - - ScienceProgress effect = TestUtils.createScienceProgress(compasses, wheels, tablets, jokers); - effect.apply(board); - - assertEquals(initCompasses + compasses, board.getScience().getQuantity(ScienceType.COMPASS)); - assertEquals(initWheels + wheels, board.getScience().getQuantity(ScienceType.WHEEL)); - assertEquals(initTablets + tablets, board.getScience().getQuantity(ScienceType.TABLET)); - assertEquals(initJokers + jokers, board.getScience().getJokers()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivationTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivationTest.java deleted file mode 100644 index 0f30a3a5..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivationTest.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.luxons.sevenwonders.game.effects; - -import java.util.Arrays; - -import org.junit.Assume; -import org.junit.Test; -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.boards.BoardElementType; -import org.luxons.sevenwonders.game.boards.RelativeBoardPosition; -import org.luxons.sevenwonders.game.cards.Card; -import org.luxons.sevenwonders.game.cards.Color; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -@RunWith(Theories.class) -public class SpecialAbilityActivationTest { - - @DataPoints - public static SpecialAbility[] abilities() { - return SpecialAbility.values(); - } - - @DataPoints - public static RelativeBoardPosition[] neighbours() { - return new RelativeBoardPosition[] {RelativeBoardPosition.LEFT, RelativeBoardPosition.RIGHT}; - } - - @DataPoints - public static Card[] guilds() { - BonusPerBoardElement bonus = new BonusPerBoardElement(); - bonus.setType(BoardElementType.CARD); - bonus.setColors(Arrays.asList(Color.GREY, Color.BROWN)); - bonus.setBoards(Arrays.asList(RelativeBoardPosition.LEFT, RelativeBoardPosition.RIGHT)); - bonus.setPoints(1); - - BonusPerBoardElement bonus2 = new BonusPerBoardElement(); - bonus2.setType(BoardElementType.BUILT_WONDER_STAGES); - bonus2.setBoards( - Arrays.asList(RelativeBoardPosition.LEFT, RelativeBoardPosition.SELF, RelativeBoardPosition.RIGHT)); - bonus2.setPoints(1); - - return new Card[] {TestUtils.createGuildCard(1, bonus), TestUtils.createGuildCard(2, bonus2)}; - } - - @Theory - public void apply_addsAbility(SpecialAbility ability) { - SpecialAbilityActivation effect = new SpecialAbilityActivation(ability); - Table table = TestUtils.createTable(5); - - effect.apply(table, 0); - - Board board = table.getBoard(0); - assertTrue(board.hasSpecial(ability)); - } - - @Theory - public void computePoints_zeroExceptForCopyGuild(SpecialAbility ability) { - Assume.assumeTrue(ability != SpecialAbility.COPY_GUILD); - - SpecialAbilityActivation effect = new SpecialAbilityActivation(ability); - Table table = TestUtils.createTable(5); - - assertEquals(0, effect.computePoints(table, 0)); - } - - @Theory - public void computePoints_copiedGuild(Card guildCard, RelativeBoardPosition neighbour) { - SpecialAbilityActivation effect = new SpecialAbilityActivation(SpecialAbility.COPY_GUILD); - Table table = TestUtils.createTable(5); - - Board neighbourBoard = table.getBoard(0, neighbour); - neighbourBoard.addCard(guildCard); - - Board board = table.getBoard(0); - board.setCopiedGuild(guildCard); - - int directPointsFromGuildCard = guildCard.getEffects().stream().mapToInt(e -> e.computePoints(table, 0)).sum(); - assertEquals(directPointsFromGuildCard, effect.computePoints(table, 0)); - } - - @Test(expected = IllegalStateException.class) - public void computePoints_copyGuild_failWhenNoChosenGuild() { - SpecialAbilityActivation effect = new SpecialAbilityActivation(SpecialAbility.COPY_GUILD); - Table table = TestUtils.createTable(5); - effect.computePoints(table, 0); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/resources/BestPriceCalculatorTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/resources/BestPriceCalculatorTest.java deleted file mode 100644 index e6438789..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/resources/BestPriceCalculatorTest.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.luxons.sevenwonders.game.resources; - -import java.util.Arrays; - -import org.junit.Test; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; - -public class BestPriceCalculatorTest { - - @Test - public void bestPrice_0forEmptyResources() { - Table table = TestUtils.createTable(3); - Resources resources = new Resources(); - assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 0)); - } - - @Test - public void bestPrice_fixedResources_defaultCost() { - Board left = TestUtils.createBoard(ResourceType.STONE); - Board main = TestUtils.createBoard(ResourceType.STONE); - Board right = TestUtils.createBoard(ResourceType.WOOD); - Table table = new Table(Arrays.asList(main, right, left)); - - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 1); - assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 0)); - assertEquals(2, BestPriceCalculator.bestPrice(resources, table, 1)); - assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 2)); - } - - @Test - public void bestPrice_fixedResources_overridenCost() { - Board main = TestUtils.createBoard(ResourceType.STONE); - main.getTradingRules().setCost(ResourceType.WOOD, Provider.RIGHT_PLAYER, 1); - - Board left = TestUtils.createBoard(ResourceType.WOOD); - Board right = TestUtils.createBoard(ResourceType.WOOD); - Board opposite = TestUtils.createBoard(ResourceType.GLASS); - Table table = new Table(Arrays.asList(main, right, opposite, left)); - - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 1); - assertEquals(1, BestPriceCalculator.bestPrice(resources, table, 0)); - assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 1)); - assertEquals(2, BestPriceCalculator.bestPrice(resources, table, 2)); - assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 3)); - } - - @Test - public void bestPrice_mixedResources_overridenCost() { - Board left = TestUtils.createBoard(ResourceType.WOOD); - - Board main = TestUtils.createBoard(ResourceType.STONE); - main.getTradingRules().setCost(ResourceType.WOOD, Provider.RIGHT_PLAYER, 1); - - Board right = TestUtils.createBoard(ResourceType.ORE); - right.getProduction().addChoice(ResourceType.WOOD, ResourceType.CLAY); - right.getPublicProduction().addChoice(ResourceType.WOOD, ResourceType.CLAY); - - Table table = new Table(Arrays.asList(main, right, left)); - - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 1); - assertEquals(1, BestPriceCalculator.bestPrice(resources, table, 0)); - assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 1)); - assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 2)); - } - - @Test - public void bestPrice_chooseCheapest() { - Board left = TestUtils.createBoard(ResourceType.WOOD); - - Board main = TestUtils.createBoard(ResourceType.WOOD); - main.getProduction().addChoice(ResourceType.ORE, ResourceType.CLAY); - main.getTradingRules().setCost(ResourceType.CLAY, Provider.RIGHT_PLAYER, 1); - - Board right = TestUtils.createBoard(ResourceType.WOOD); - right.getProduction().addFixedResource(ResourceType.ORE, 1); - right.getProduction().addFixedResource(ResourceType.CLAY, 1); - right.getPublicProduction().addFixedResource(ResourceType.ORE, 1); - right.getPublicProduction().addFixedResource(ResourceType.CLAY, 1); - - Table table = new Table(Arrays.asList(main, right, left)); - - Resources resources = new Resources(); - resources.add(ResourceType.ORE, 1); - resources.add(ResourceType.CLAY, 1); - assertEquals(1, BestPriceCalculator.bestPrice(resources, table, 0)); - assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 1)); - assertEquals(4, BestPriceCalculator.bestPrice(resources, table, 2)); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/resources/ProductionTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/resources/ProductionTest.java deleted file mode 100644 index 2247147c..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/resources/ProductionTest.java +++ /dev/null @@ -1,324 +0,0 @@ -package org.luxons.sevenwonders.game.resources; - -import java.util.EnumSet; -import java.util.HashSet; -import java.util.Set; - -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -public class ProductionTest { - - private Resources emptyResources; - - private Resources resources1Wood; - - private Resources resources1Stone; - - private Resources resources1Stone1Wood; - - private Resources resources2Stones; - - private Resources resources2Stones3Clay; - - @Before - public void init() { - emptyResources = new Resources(); - - resources1Wood = new Resources(); - resources1Wood.add(ResourceType.WOOD, 1); - - resources1Stone = new Resources(); - resources1Stone.add(ResourceType.STONE, 1); - - resources1Stone1Wood = new Resources(); - resources1Stone1Wood.add(ResourceType.STONE, 1); - resources1Stone1Wood.add(ResourceType.WOOD, 1); - - resources2Stones = new Resources(); - resources2Stones.add(ResourceType.STONE, 2); - - resources2Stones3Clay = new Resources(); - resources2Stones3Clay.add(ResourceType.STONE, 2); - resources2Stones3Clay.add(ResourceType.CLAY, 3); - } - - @Test - public void contains_newProductionContainsEmpty() { - Production production = new Production(); - assertTrue(production.contains(emptyResources)); - } - - @Test - public void contains_singleFixedResource_noneAtAll() { - Production production = new Production(); - assertFalse(production.contains(resources2Stones)); - } - - @Test - public void contains_singleFixedResource_notEnough() { - Production production = new Production(); - production.addFixedResource(ResourceType.STONE, 1); - assertFalse(production.contains(resources2Stones)); - } - - @Test - public void contains_singleFixedResource_justEnough() { - Production production = new Production(); - production.addFixedResource(ResourceType.STONE, 2); - assertTrue(production.contains(resources2Stones)); - } - - @Test - public void contains_singleFixedResource_moreThanEnough() { - Production production = new Production(); - production.addFixedResource(ResourceType.STONE, 3); - assertTrue(production.contains(resources2Stones)); - } - - @Test - public void contains_singleFixedResource_moreThanEnough_amongOthers() { - Production production = new Production(); - production.addFixedResource(ResourceType.STONE, 3); - production.addFixedResource(ResourceType.CLAY, 2); - assertTrue(production.contains(resources2Stones)); - } - - @Test - public void contains_multipleFixedResources_notEnoughOfOne() { - Production production = new Production(); - production.addFixedResource(ResourceType.STONE, 3); - production.addFixedResource(ResourceType.CLAY, 1); - assertFalse(production.contains(resources2Stones3Clay)); - } - - @Test - public void contains_multipleFixedResources_notEnoughOfBoth() { - Production production = new Production(); - production.addFixedResource(ResourceType.STONE, 1); - production.addFixedResource(ResourceType.CLAY, 1); - assertFalse(production.contains(resources2Stones3Clay)); - } - - @Test - public void contains_multipleFixedResources_moreThanEnough() { - Production production = new Production(); - production.addFixedResource(ResourceType.STONE, 3); - production.addFixedResource(ResourceType.CLAY, 5); - assertTrue(production.contains(resources2Stones3Clay)); - } - - @Test - public void contains_singleChoice_containsEmpty() { - Production production = new Production(); - production.addChoice(ResourceType.STONE, ResourceType.CLAY); - assertTrue(production.contains(emptyResources)); - } - - @Test - public void contains_singleChoice_enough() { - Production production = new Production(); - production.addChoice(ResourceType.STONE, ResourceType.WOOD); - assertTrue(production.contains(resources1Wood)); - assertTrue(production.contains(resources1Stone)); - } - - @Test - public void contains_multipleChoices_notBoth() { - Production production = new Production(); - production.addChoice(ResourceType.STONE, ResourceType.CLAY); - production.addChoice(ResourceType.STONE, ResourceType.CLAY); - production.addChoice(ResourceType.STONE, ResourceType.CLAY); - assertFalse(production.contains(resources2Stones3Clay)); - } - - @Test - public void contains_multipleChoices_enough() { - Production production = new Production(); - production.addChoice(ResourceType.STONE, ResourceType.ORE); - production.addChoice(ResourceType.STONE, ResourceType.WOOD); - assertTrue(production.contains(resources1Stone1Wood)); - } - - @Test - public void contains_multipleChoices_enoughReverseOrder() { - Production production = new Production(); - production.addChoice(ResourceType.STONE, ResourceType.WOOD); - production.addChoice(ResourceType.STONE, ResourceType.ORE); - assertTrue(production.contains(resources1Stone1Wood)); - } - - @Test - public void contains_multipleChoices_moreThanEnough() { - Production production = new Production(); - production.addChoice(ResourceType.LOOM, ResourceType.GLASS, ResourceType.PAPYRUS); - production.addChoice(ResourceType.STONE, ResourceType.ORE); - production.addChoice(ResourceType.STONE, ResourceType.WOOD); - assertTrue(production.contains(resources1Stone1Wood)); - } - - @Test - public void contains_mixedFixedAndChoice_enough() { - Production production = new Production(); - production.addFixedResource(ResourceType.WOOD, 1); - production.addChoice(ResourceType.STONE, ResourceType.WOOD); - assertTrue(production.contains(resources1Stone1Wood)); - } - - @Test - public void addAll_empty() { - Production production = new Production(); - production.addAll(emptyResources); - assertTrue(production.contains(emptyResources)); - } - - @Test - public void addAll_singleResource() { - Production production = new Production(); - production.addAll(resources1Stone); - assertTrue(production.contains(resources1Stone)); - } - - @Test - public void addAll_multipleResources() { - Production production = new Production(); - production.addAll(resources2Stones3Clay); - assertTrue(production.contains(resources2Stones3Clay)); - } - - @Test - public void addAll_production_multipleFixedResources() { - Production production = new Production(); - production.addAll(resources2Stones3Clay); - - Production production2 = new Production(); - production2.addAll(production); - - assertTrue(production2.contains(resources2Stones3Clay)); - } - - @Test - public void addAll_production_multipleChoices() { - Production production = new Production(); - production.addChoice(ResourceType.STONE, ResourceType.WOOD); - production.addChoice(ResourceType.STONE, ResourceType.ORE); - - Production production2 = new Production(); - production2.addAll(production); - assertTrue(production.contains(resources1Stone1Wood)); - } - - @Test - public void addAll_production_mixedFixedResourcesAndChoices() { - Production production = new Production(); - production.addFixedResource(ResourceType.WOOD, 1); - production.addChoice(ResourceType.STONE, ResourceType.WOOD); - - Production production2 = new Production(); - production2.addAll(production); - - assertTrue(production.contains(resources1Stone1Wood)); - } - - @Test - public void asChoices_empty() { - Production production = new Production(); - assertTrue(production.asChoices().isEmpty()); - } - - @Test - public void asChoices_onlyChoices() { - Production production = new Production(); - production.addChoice(ResourceType.STONE, ResourceType.WOOD); - production.addChoice(ResourceType.STONE, ResourceType.ORE); - production.addChoice(ResourceType.CLAY, ResourceType.LOOM, ResourceType.GLASS); - assertEquals(production.getAlternativeResources(), production.asChoices()); - } - - @Test - public void asChoices_onlyFixed() { - Production production = new Production(); - production.addFixedResource(ResourceType.WOOD, 1); - production.addFixedResource(ResourceType.CLAY, 2); - - Set<Set<ResourceType>> expected = new HashSet<>(); - expected.add(EnumSet.of(ResourceType.WOOD)); - expected.add(EnumSet.of(ResourceType.CLAY)); - expected.add(EnumSet.of(ResourceType.CLAY)); - - assertEquals(expected, production.asChoices()); - } - - @Test - public void asChoices_mixed() { - Production production = new Production(); - production.addChoice(ResourceType.STONE, ResourceType.ORE); - production.addChoice(ResourceType.CLAY, ResourceType.LOOM, ResourceType.GLASS); - production.addFixedResource(ResourceType.WOOD, 1); - production.addFixedResource(ResourceType.CLAY, 2); - - Set<Set<ResourceType>> expected = new HashSet<>(); - expected.add(EnumSet.of(ResourceType.STONE, ResourceType.ORE)); - expected.add(EnumSet.of(ResourceType.CLAY, ResourceType.LOOM, ResourceType.GLASS)); - expected.add(EnumSet.of(ResourceType.WOOD)); - expected.add(EnumSet.of(ResourceType.CLAY)); - expected.add(EnumSet.of(ResourceType.CLAY)); - - assertEquals(expected, production.asChoices()); - } - - @Test - public void equals_falseWhenNull() { - Production production = new Production(); - production.addFixedResource(ResourceType.GLASS, 1); - production.addChoice(ResourceType.ORE, ResourceType.WOOD); - //noinspection ObjectEqualsNull - assertFalse(production.equals(null)); - } - - @Test - public void equals_falseWhenDifferentClass() { - Production production = new Production(); - production.addFixedResource(ResourceType.GLASS, 1); - Resources resources = new Resources(); - resources.add(ResourceType.GLASS, 1); - //noinspection EqualsBetweenInconvertibleTypes - assertFalse(production.equals(resources)); - } - - @Test - public void equals_trueWhenSame() { - Production production = new Production(); - assertEquals(production, production); - } - - @Test - public void equals_trueWhenSameContent() { - Production production1 = new Production(); - Production production2 = new Production(); - assertTrue(production1.equals(production2)); - production1.addFixedResource(ResourceType.GLASS, 1); - production2.addFixedResource(ResourceType.GLASS, 1); - assertTrue(production1.equals(production2)); - production1.addChoice(ResourceType.ORE, ResourceType.WOOD); - production2.addChoice(ResourceType.ORE, ResourceType.WOOD); - assertTrue(production1.equals(production2)); - } - - @Test - public void hashCode_sameWhenSameContent() { - Production production1 = new Production(); - Production production2 = new Production(); - assertEquals(production1.hashCode(), production2.hashCode()); - production1.addFixedResource(ResourceType.GLASS, 1); - production2.addFixedResource(ResourceType.GLASS, 1); - assertEquals(production1.hashCode(), production2.hashCode()); - production1.addChoice(ResourceType.ORE, ResourceType.WOOD); - production2.addChoice(ResourceType.ORE, ResourceType.WOOD); - assertEquals(production1.hashCode(), production2.hashCode()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/resources/ResourcesTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/resources/ResourcesTest.java deleted file mode 100644 index 1f260a11..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/resources/ResourcesTest.java +++ /dev/null @@ -1,485 +0,0 @@ -package org.luxons.sevenwonders.game.resources; - -import java.util.NoSuchElementException; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -public class ResourcesTest { - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - @Test - public void init_shouldBeEmpty() { - Resources resources = new Resources(); - for (ResourceType resourceType : ResourceType.values()) { - assertEquals(0, resources.getQuantity(resourceType)); - } - assertEquals(0, resources.size()); - assertTrue(resources.isEmpty()); - } - - @Test - public void add_zero() { - Resources resources = new Resources(); - resources.add(ResourceType.CLAY, 0); - assertEquals(0, resources.getQuantity(ResourceType.CLAY)); - assertEquals(0, resources.size()); - assertTrue(resources.isEmpty()); - } - - @Test - public void add_simple() { - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 3); - assertEquals(3, resources.getQuantity(ResourceType.WOOD)); - assertEquals(3, resources.size()); - assertFalse(resources.isEmpty()); - } - - @Test - public void add_multipleCallsStacked() { - Resources resources = new Resources(); - resources.add(ResourceType.ORE, 3); - resources.add(ResourceType.ORE, 2); - assertEquals(5, resources.getQuantity(ResourceType.ORE)); - assertEquals(5, resources.size()); - assertFalse(resources.isEmpty()); - } - - @Test - public void add_interlaced() { - Resources resources = new Resources(); - resources.add(ResourceType.GLASS, 3); - resources.add(ResourceType.STONE, 1); - resources.add(ResourceType.WOOD, 4); - resources.add(ResourceType.GLASS, 2); - assertEquals(5, resources.getQuantity(ResourceType.GLASS)); - assertEquals(10, resources.size()); - assertFalse(resources.isEmpty()); - } - - @Test - public void remove_some() { - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 3); - resources.remove(ResourceType.WOOD, 2); - assertEquals(1, resources.getQuantity(ResourceType.WOOD)); - assertEquals(1, resources.size()); - assertFalse(resources.isEmpty()); - } - - @Test - public void remove_all() { - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 3); - resources.remove(ResourceType.WOOD, 3); - assertEquals(0, resources.getQuantity(ResourceType.WOOD)); - assertEquals(0, resources.size()); - assertTrue(resources.isEmpty()); - } - - @Test - public void remove_tooMany() { - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 2); - - thrown.expect(NoSuchElementException.class); - resources.remove(ResourceType.WOOD, 3); - } - - @Test - public void addAll_empty() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 1); - resources.add(ResourceType.CLAY, 3); - - Resources emptyResources = new Resources(); - - resources.addAll(emptyResources); - assertEquals(1, resources.getQuantity(ResourceType.STONE)); - assertEquals(3, resources.getQuantity(ResourceType.CLAY)); - assertEquals(0, resources.getQuantity(ResourceType.ORE)); - assertEquals(0, resources.getQuantity(ResourceType.GLASS)); - assertEquals(0, resources.getQuantity(ResourceType.LOOM)); - assertEquals(4, resources.size()); - assertFalse(resources.isEmpty()); - } - - @Test - public void addAll_zeros() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 1); - resources.add(ResourceType.CLAY, 3); - - Resources emptyResources = new Resources(); - emptyResources.add(ResourceType.STONE, 0); - emptyResources.add(ResourceType.CLAY, 0); - - resources.addAll(emptyResources); - assertEquals(1, resources.getQuantity(ResourceType.STONE)); - assertEquals(3, resources.getQuantity(ResourceType.CLAY)); - assertEquals(0, resources.getQuantity(ResourceType.ORE)); - assertEquals(0, resources.getQuantity(ResourceType.GLASS)); - assertEquals(0, resources.getQuantity(ResourceType.LOOM)); - assertEquals(4, resources.size()); - assertFalse(resources.isEmpty()); - } - - @Test - public void addAll_same() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 1); - resources.add(ResourceType.CLAY, 3); - - Resources resources2 = new Resources(); - resources.add(ResourceType.STONE, 2); - resources.add(ResourceType.CLAY, 6); - - resources.addAll(resources2); - assertEquals(3, resources.getQuantity(ResourceType.STONE)); - assertEquals(9, resources.getQuantity(ResourceType.CLAY)); - assertEquals(0, resources.getQuantity(ResourceType.ORE)); - assertEquals(0, resources.getQuantity(ResourceType.GLASS)); - assertEquals(0, resources.getQuantity(ResourceType.LOOM)); - assertEquals(12, resources.size()); - assertFalse(resources.isEmpty()); - } - - @Test - public void addAll_overlap() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 1); - resources.add(ResourceType.CLAY, 3); - - Resources resources2 = new Resources(); - resources.add(ResourceType.CLAY, 6); - resources.add(ResourceType.ORE, 4); - - resources.addAll(resources2); - assertEquals(1, resources.getQuantity(ResourceType.STONE)); - assertEquals(9, resources.getQuantity(ResourceType.CLAY)); - assertEquals(4, resources.getQuantity(ResourceType.ORE)); - assertEquals(0, resources.getQuantity(ResourceType.GLASS)); - assertEquals(0, resources.getQuantity(ResourceType.LOOM)); - assertEquals(14, resources.size()); - assertFalse(resources.isEmpty()); - } - - @Test - public void contains_emptyContainsEmpty() { - Resources emptyResources = new Resources(); - Resources emptyResources2 = new Resources(); - assertTrue(emptyResources.contains(emptyResources2)); - } - - @Test - public void contains_singleTypeContainsEmpty() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 1); - - Resources emptyResources = new Resources(); - - assertTrue(resources.contains(emptyResources)); - } - - @Test - public void contains_multipleTypesContainsEmpty() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 1); - resources.add(ResourceType.CLAY, 3); - - Resources emptyResources = new Resources(); - - assertTrue(resources.contains(emptyResources)); - } - - @Test - public void contains_self() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 1); - resources.add(ResourceType.CLAY, 3); - - assertTrue(resources.contains(resources)); - } - - @Test - public void contains_allOfEachType() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 1); - resources.add(ResourceType.CLAY, 3); - - Resources resources2 = new Resources(); - resources2.add(ResourceType.STONE, 1); - resources2.add(ResourceType.CLAY, 3); - - assertTrue(resources.contains(resources2)); - } - - @Test - public void contains_someOfEachType() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 2); - resources.add(ResourceType.CLAY, 4); - - Resources resources2 = new Resources(); - resources2.add(ResourceType.STONE, 1); - resources2.add(ResourceType.CLAY, 3); - - assertTrue(resources.contains(resources2)); - } - - @Test - public void contains_someOfSomeTypes() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 2); - resources.add(ResourceType.CLAY, 4); - - Resources resources2 = new Resources(); - resources2.add(ResourceType.CLAY, 3); - - assertTrue(resources.contains(resources2)); - } - - @Test - public void contains_allOfSomeTypes() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 2); - resources.add(ResourceType.CLAY, 4); - - Resources resources2 = new Resources(); - resources2.add(ResourceType.CLAY, 4); - - assertTrue(resources.contains(resources2)); - } - - @Test - public void minus_empty() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 1); - resources.add(ResourceType.CLAY, 3); - - Resources emptyResources = new Resources(); - - Resources diff = resources.minus(emptyResources); - assertEquals(1, diff.getQuantity(ResourceType.STONE)); - assertEquals(3, diff.getQuantity(ResourceType.CLAY)); - assertEquals(0, diff.getQuantity(ResourceType.ORE)); - assertEquals(0, diff.getQuantity(ResourceType.GLASS)); - assertEquals(0, diff.getQuantity(ResourceType.LOOM)); - } - - @Test - public void minus_self() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 1); - resources.add(ResourceType.CLAY, 3); - - Resources diff = resources.minus(resources); - assertEquals(0, diff.getQuantity(ResourceType.STONE)); - assertEquals(0, diff.getQuantity(ResourceType.CLAY)); - assertEquals(0, diff.getQuantity(ResourceType.ORE)); - assertEquals(0, diff.getQuantity(ResourceType.GLASS)); - assertEquals(0, diff.getQuantity(ResourceType.LOOM)); - } - - @Test - public void minus_allOfEachType() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 1); - resources.add(ResourceType.CLAY, 3); - - Resources resources2 = new Resources(); - resources2.add(ResourceType.STONE, 1); - resources2.add(ResourceType.CLAY, 3); - - Resources diff = resources.minus(resources2); - assertEquals(0, diff.getQuantity(ResourceType.STONE)); - assertEquals(0, diff.getQuantity(ResourceType.CLAY)); - assertEquals(0, diff.getQuantity(ResourceType.ORE)); - assertEquals(0, diff.getQuantity(ResourceType.GLASS)); - assertEquals(0, diff.getQuantity(ResourceType.LOOM)); - } - - @Test - public void minus_someOfEachType() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 2); - resources.add(ResourceType.CLAY, 4); - - Resources resources2 = new Resources(); - resources2.add(ResourceType.STONE, 1); - resources2.add(ResourceType.CLAY, 3); - - Resources diff = resources.minus(resources2); - assertEquals(1, diff.getQuantity(ResourceType.STONE)); - assertEquals(1, diff.getQuantity(ResourceType.CLAY)); - assertEquals(0, diff.getQuantity(ResourceType.ORE)); - assertEquals(0, diff.getQuantity(ResourceType.GLASS)); - assertEquals(0, diff.getQuantity(ResourceType.LOOM)); - } - - @Test - public void minus_someOfSomeTypes() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 2); - resources.add(ResourceType.CLAY, 4); - - Resources resources2 = new Resources(); - resources2.add(ResourceType.CLAY, 3); - - Resources diff = resources.minus(resources2); - assertEquals(2, diff.getQuantity(ResourceType.STONE)); - assertEquals(1, diff.getQuantity(ResourceType.CLAY)); - assertEquals(0, diff.getQuantity(ResourceType.ORE)); - assertEquals(0, diff.getQuantity(ResourceType.GLASS)); - assertEquals(0, diff.getQuantity(ResourceType.LOOM)); - } - - @Test - public void minus_allOfSomeTypes() { - Resources resources = new Resources(); - resources.add(ResourceType.STONE, 2); - resources.add(ResourceType.CLAY, 4); - - Resources resources2 = new Resources(); - resources2.add(ResourceType.CLAY, 4); - - Resources diff = resources.minus(resources2); - assertEquals(2, diff.getQuantity(ResourceType.STONE)); - assertEquals(0, diff.getQuantity(ResourceType.CLAY)); - assertEquals(0, diff.getQuantity(ResourceType.ORE)); - assertEquals(0, diff.getQuantity(ResourceType.GLASS)); - assertEquals(0, diff.getQuantity(ResourceType.LOOM)); - } - - @Test - public void minus_tooMuchOfExistingType() { - Resources resources = new Resources(); - resources.add(ResourceType.CLAY, 4); - - Resources resources2 = new Resources(); - resources2.add(ResourceType.CLAY, 5); - - Resources diff = resources.minus(resources2); - assertEquals(0, diff.getQuantity(ResourceType.CLAY)); - } - - @Test - public void minus_someOfAnAbsentType() { - Resources resources = new Resources(); - - Resources resources2 = new Resources(); - resources2.add(ResourceType.LOOM, 5); - - Resources diff = resources.minus(resources2); - assertEquals(0, diff.getQuantity(ResourceType.LOOM)); - } - - @Test - public void minus_someOfATypeWithZero() { - Resources resources = new Resources(); - resources.add(ResourceType.LOOM, 0); - - Resources resources2 = new Resources(); - resources2.add(ResourceType.LOOM, 5); - - Resources diff = resources.minus(resources2); - assertEquals(0, diff.getQuantity(ResourceType.LOOM)); - } - - @Test - public void isEmpty_noElement() { - Resources resources = new Resources(); - assertTrue(resources.isEmpty()); - } - - @Test - public void isEmpty_singleZeroElement() { - Resources resources = new Resources(); - resources.add(ResourceType.LOOM, 0); - assertTrue(resources.isEmpty()); - } - - @Test - public void isEmpty_multipleZeroElements() { - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 0); - resources.add(ResourceType.ORE, 0); - resources.add(ResourceType.LOOM, 0); - assertTrue(resources.isEmpty()); - } - - @Test - public void isEmpty_singleElementMoreThanZero() { - Resources resources = new Resources(); - resources.add(ResourceType.LOOM, 3); - assertFalse(resources.isEmpty()); - } - - @Test - public void isEmpty_mixedZeroAndNonZeroElements() { - Resources resources = new Resources(); - resources.add(ResourceType.WOOD, 0); - resources.add(ResourceType.LOOM, 3); - assertFalse(resources.isEmpty()); - } - - @Test - public void isEmpty_mixedZeroAndNonZeroElements_reverseOrder() { - Resources resources = new Resources(); - resources.add(ResourceType.ORE, 3); - resources.add(ResourceType.PAPYRUS, 0); - assertFalse(resources.isEmpty()); - } - - @Test - public void equals_falseWhenNull() { - Resources resources = new Resources(); - resources.add(ResourceType.GLASS, 1); - //noinspection ObjectEqualsNull - assertFalse(resources.equals(null)); - } - - @Test - public void equals_falseWhenDifferentClass() { - Resources resources = new Resources(); - resources.add(ResourceType.GLASS, 1); - Production production = new Production(); - production.addFixedResource(ResourceType.GLASS, 1); - //noinspection EqualsBetweenInconvertibleTypes - assertFalse(resources.equals(production)); - } - - @Test - public void equals_trueWhenSame() { - Resources resources = new Resources(); - assertEquals(resources, resources); - } - - @Test - public void equals_trueWhenSameContent() { - Resources resources1 = new Resources(); - Resources resources2 = new Resources(); - assertTrue(resources1.equals(resources2)); - resources1.add(ResourceType.GLASS, 1); - resources2.add(ResourceType.GLASS, 1); - assertTrue(resources1.equals(resources2)); - } - - @Test - public void hashCode_sameWhenSameContent() { - Resources resources1 = new Resources(); - Resources resources2 = new Resources(); - assertEquals(resources1.hashCode(), resources2.hashCode()); - resources1.add(ResourceType.GLASS, 1); - resources2.add(ResourceType.GLASS, 1); - assertEquals(resources1.hashCode(), resources2.hashCode()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/resources/TradingRulesTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/resources/TradingRulesTest.java deleted file mode 100644 index 0fd1b52b..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/resources/TradingRulesTest.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.luxons.sevenwonders.game.resources; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theories; -import org.junit.experimental.theories.Theory; -import org.junit.runner.RunWith; -import org.luxons.sevenwonders.game.test.TestUtils; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assume.assumeTrue; - -@RunWith(Theories.class) -public class TradingRulesTest { - - @DataPoints - public static int[] costs() { - return new int[]{0, 1, 2}; - } - - @DataPoints - public static Provider[] providers() { - return Provider.values(); - } - - @DataPoints - public static ResourceType[] resourceTypes() { - return ResourceType.values(); - } - - @Theory - public void setCost_overridesCost(int defaultCost, int overriddenCost, Provider overriddenProvider, - Provider provider, ResourceType type) { - assumeTrue(defaultCost != overriddenCost); - assumeTrue(overriddenProvider != provider); - - TradingRules rules = new TradingRules(defaultCost); - rules.setCost(type, overriddenProvider, overriddenCost); - - assertEquals(overriddenCost, rules.getCost(type, overriddenProvider)); - assertEquals(defaultCost, rules.getCost(type, provider)); - } - - @Theory - public void computeCost_zeroForNoResources(int defaultCost) { - TradingRules rules = new TradingRules(defaultCost); - assertEquals(0, rules.computeCost(new ArrayList<>())); - } - - @Theory - public void computeCost_defaultCostWhenNoOverride(int defaultCost, Provider provider, ResourceType type) { - TradingRules rules = new TradingRules(defaultCost); - BoughtResources resources = TestUtils.createBoughtResources(provider, type); - assertEquals(defaultCost, rules.computeCost(Collections.singletonList(resources))); - } - - @Theory - public void computeCost_twiceDefaultFor2Resources(int defaultCost, Provider provider, ResourceType type) { - TradingRules rules = new TradingRules(defaultCost); - BoughtResources resources = TestUtils.createBoughtResources(provider, type, type); - assertEquals(2 * defaultCost, rules.computeCost(Collections.singletonList(resources))); - } - - @Theory - public void computeCost_overriddenCost(int defaultCost, int overriddenCost, Provider provider, ResourceType type) { - TradingRules rules = new TradingRules(defaultCost); - rules.setCost(type, provider, overriddenCost); - BoughtResources resources = TestUtils.createBoughtResources(provider, type); - assertEquals(overriddenCost, rules.computeCost(Collections.singletonList(resources))); - } - - @Theory - public void computeCost_defaultCostWhenOverrideOnOtherProviderOrType(int defaultCost, int overriddenCost, - Provider overriddenProvider, - ResourceType overriddenType, Provider provider, - ResourceType type) { - assumeTrue(overriddenProvider != provider || overriddenType != type); - TradingRules rules = new TradingRules(defaultCost); - rules.setCost(overriddenType, overriddenProvider, overriddenCost); - BoughtResources resources = TestUtils.createBoughtResources(provider, type); - assertEquals(defaultCost, rules.computeCost(Collections.singletonList(resources))); - } - - @Theory - public void computeCost_oneDefaultAndOneOverriddenType(int defaultCost, int overriddenCost, - ResourceType overriddenType, Provider provider, - ResourceType type) { - assumeTrue(overriddenType != type); - TradingRules rules = new TradingRules(defaultCost); - rules.setCost(overriddenType, provider, overriddenCost); - BoughtResources resources = TestUtils.createBoughtResources(provider, overriddenType, type); - assertEquals(defaultCost + overriddenCost, rules.computeCost(Collections.singletonList(resources))); - } - - @Theory - public void computeCost_oneDefaultAndOneOverriddenProvider(int defaultCost, int overriddenCost, - Provider overriddenProvider, Provider provider, - ResourceType type) { - assumeTrue(overriddenProvider != provider); - TradingRules rules = new TradingRules(defaultCost); - rules.setCost(type, overriddenProvider, overriddenCost); - - List<BoughtResources> boughtResources = new ArrayList<>(2); - boughtResources.add(TestUtils.createBoughtResources(provider, type)); - boughtResources.add(TestUtils.createBoughtResources(overriddenProvider, type)); - - assertEquals(defaultCost + overriddenCost, rules.computeCost(boughtResources)); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/test/TestUtils.java b/backend/src/test/java/org/luxons/sevenwonders/game/test/TestUtils.java deleted file mode 100644 index 4b727944..00000000 --- a/backend/src/test/java/org/luxons/sevenwonders/game/test/TestUtils.java +++ /dev/null @@ -1,199 +0,0 @@ -package org.luxons.sevenwonders.game.test; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import org.luxons.sevenwonders.game.Settings; -import org.luxons.sevenwonders.game.api.CustomizableSettings; -import org.luxons.sevenwonders.game.api.Table; -import org.luxons.sevenwonders.game.boards.Board; -import org.luxons.sevenwonders.game.boards.Science; -import org.luxons.sevenwonders.game.boards.ScienceType; -import org.luxons.sevenwonders.game.cards.Card; -import org.luxons.sevenwonders.game.cards.Color; -import org.luxons.sevenwonders.game.cards.Requirements; -import org.luxons.sevenwonders.game.effects.Effect; -import org.luxons.sevenwonders.game.effects.ScienceProgress; -import org.luxons.sevenwonders.game.resources.BoughtResources; -import org.luxons.sevenwonders.game.resources.Production; -import org.luxons.sevenwonders.game.resources.Provider; -import org.luxons.sevenwonders.game.resources.ResourceType; -import org.luxons.sevenwonders.game.resources.Resources; -import org.luxons.sevenwonders.game.wonders.Wonder; -import org.luxons.sevenwonders.game.wonders.WonderStage; - -public class TestUtils { - - private static final long SEED = 42; - - public static CustomizableSettings createCustomizableSettings() { - CustomizableSettings customizableSettings = new CustomizableSettings(); - customizableSettings.setRandomSeedForTests(SEED); - return customizableSettings; - } - - private static Settings createSettings(int nbPlayers) { - return new Settings(nbPlayers, createCustomizableSettings()); - } - - public static Table createTable(int nbPlayers) { - return new Table(createBoards(nbPlayers)); - } - - private static List<Board> createBoards(int count) { - Settings settings = createSettings(count); - List<Board> boards = new ArrayList<>(count); - for (int i = 0; i < count; i++) { - boards.add(createBoard(settings, ResourceType.WOOD)); - } - return boards; - } - - private static Board createBoard(Settings settings, ResourceType initialResource) { - Wonder wonder = createWonder(initialResource); - return new Board(wonder, 0, settings); - } - - public static Board createBoard(ResourceType initialResource) { - return createBoard(createSettings(5), initialResource); - } - - private static Board createBoard(ResourceType initialResource, ResourceType... production) { - Board board = createBoard(initialResource); - board.getProduction().addAll(createFixedProduction(production)); - return board; - } - - public static Board createBoard(ResourceType initialResource, int gold, ResourceType... production) { - Board board = createBoard(initialResource, production); - board.setGold(gold); - return board; - } - - public static Wonder createWonder() { - return createWonder(ResourceType.WOOD); - } - - public static Wonder createWonder(ResourceType initialResource) { - WonderStage stage1 = new WonderStage(); - stage1.setRequirements(new Requirements()); - WonderStage stage2 = new WonderStage(); - stage1.setRequirements(new Requirements()); - WonderStage stage3 = new WonderStage(); - stage1.setRequirements(new Requirements()); - return new Wonder("Test Wonder " + initialResource.getSymbol(), initialResource, stage1, stage2, stage3); - } - - public static Production createFixedProduction(ResourceType... producedTypes) { - Production production = new Production(); - Resources fixedProducedResources = production.getFixedResources(); - fixedProducedResources.addAll(createResources(producedTypes)); - return production; - } - - public static Resources createResources(ResourceType... types) { - Resources resources = new Resources(); - for (ResourceType producedType : types) { - resources.add(producedType, 1); - } - return resources; - } - - public static BoughtResources createBoughtResources(Provider provider, ResourceType... resources) { - BoughtResources boughtResources = new BoughtResources(); - boughtResources.setProvider(provider); - boughtResources.setResources(TestUtils.createResources(resources)); - return boughtResources; - } - - public static Requirements createRequirements(ResourceType... types) { - Resources resources = createResources(types); - Requirements requirements = new Requirements(); - requirements.setResources(resources); - return requirements; - } - - public static List<Card> createSampleCards(int fromIndex, int nbCards) { - List<Card> sampleCards = new ArrayList<>(); - for (int i = fromIndex; i < fromIndex + nbCards; i++) { - sampleCards.add(createCard(i, Color.BLUE)); - } - return sampleCards; - } - - public static Card createCard(String name) { - return new Card(name, Color.BLUE, new Requirements(), null, null, null, null); - } - - public static Card createCard(Color color) { - return new Card("Test Card", color, new Requirements(), null, null, null, null); - } - - public static Card createCard(Color color, Effect effect) { - List<Effect> effects = Collections.singletonList(effect); - return new Card("Test Card", color, new Requirements(), effects, null, null, null); - } - - private static Card createCard(int num, Color color) { - return new Card("Test Card " + num, color, new Requirements(), null, null, null, null); - } - - public static Card createGuildCard(int num, Effect effect) { - List<Effect> effects = Collections.singletonList(effect); - return new Card("Test Guild " + num, Color.PURPLE, new Requirements(), effects, null, null, null); - } - - public static void addCards(Board board, int nbCardsOfColor, int nbOtherCards, Color color) { - addCards(board, nbCardsOfColor, color); - Color otherColor = getDifferentColorFrom(color); - addCards(board, nbOtherCards, otherColor); - } - - public static void addCards(Board board, int nbCards, Color color) { - for (int i = 0; i < nbCards; i++) { - board.addCard(createCard(i, color)); - } - } - - public static Color getDifferentColorFrom(Color... colors) { - List<Color> forbiddenColors = Arrays.asList(colors); - for (Color color : Color.values()) { - if (!forbiddenColors.contains(color)) { - return color; - } - } - throw new IllegalArgumentException("All colors are forbidden!"); - } - - public static ScienceProgress createScienceProgress(int compasses, int wheels, int tablets, int jokers) { - ScienceProgress progress = new ScienceProgress(); - progress.setScience(TestUtils.createScience(compasses, wheels, tablets, jokers)); - return progress; - } - - public static Science createScience(int compasses, int wheels, int tablets, int jokers) { - Science science = new Science(); - if (compasses > 0) { - science.add(ScienceType.COMPASS, compasses); - } - if (wheels > 0) { - science.add(ScienceType.WHEEL, wheels); - } - if (tablets > 0) { - science.add(ScienceType.TABLET, tablets); - } - if (jokers > 0) { - science.addJoker(jokers); - } - return science; - } - - public static void playCardWithEffect(Table table, int playerIndex, Color color, Effect effect) { - Card card = createCard(color, effect); - Board board = table.getBoard(playerIndex); - board.addCard(card); - card.applyTo(table, playerIndex, Collections.emptyList()); - } -} diff --git a/backend/src/test/java/org/luxons/sevenwonders/repositories/LobbyRepositoryTest.java b/backend/src/test/java/org/luxons/sevenwonders/repositories/LobbyRepositoryTest.java index 4ba7d6e3..444e7aaa 100644 --- a/backend/src/test/java/org/luxons/sevenwonders/repositories/LobbyRepositoryTest.java +++ b/backend/src/test/java/org/luxons/sevenwonders/repositories/LobbyRepositoryTest.java @@ -2,7 +2,6 @@ package org.luxons.sevenwonders.repositories; import org.junit.Before; import org.junit.Test; -import org.luxons.sevenwonders.game.data.GameDefinitionLoader; import org.luxons.sevenwonders.lobby.Lobby; import org.luxons.sevenwonders.lobby.Player; import org.luxons.sevenwonders.repositories.LobbyRepository.LobbyNotFoundException; @@ -18,7 +17,7 @@ public class LobbyRepositoryTest { @Before public void setUp() { - repository = new LobbyRepository(new GameDefinitionLoader()); + repository = new LobbyRepository(); } @Test diff --git a/backend/src/test/java/org/luxons/sevenwonders/validation/DestinationAccessValidatorTest.java b/backend/src/test/java/org/luxons/sevenwonders/validation/DestinationAccessValidatorTest.java index bdf6c8c9..604b927d 100644 --- a/backend/src/test/java/org/luxons/sevenwonders/validation/DestinationAccessValidatorTest.java +++ b/backend/src/test/java/org/luxons/sevenwonders/validation/DestinationAccessValidatorTest.java @@ -2,7 +2,6 @@ package org.luxons.sevenwonders.validation; import org.junit.Before; import org.junit.Test; -import org.luxons.sevenwonders.game.data.GameDefinitionLoader; import org.luxons.sevenwonders.lobby.Lobby; import org.luxons.sevenwonders.lobby.Player; import org.luxons.sevenwonders.repositories.LobbyRepository; @@ -19,7 +18,7 @@ public class DestinationAccessValidatorTest { @Before public void setup() { - lobbyRepository = new LobbyRepository(new GameDefinitionLoader()); + lobbyRepository = new LobbyRepository(); destinationAccessValidator = new DestinationAccessValidator(lobbyRepository); } |