Coverage Summary for Class: Order5 (it.polimi.ingsw.gc14.Model.Orders)

Class Class, % Method, % Branch, % Line, %
Order5 100% (1/1) 100% (3/3) 90% (18/20) 96.7% (29/30)


 package it.polimi.ingsw.gc14.Model.Orders;
 
 import it.polimi.ingsw.gc14.Model.OrderLogicCard;
 import it.polimi.ingsw.gc14.Model.Player;
 import it.polimi.ingsw.gc14.View.TUI.AsciiTable;
 import it.polimi.ingsw.gc14.View.TUI.BorderStyle;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.NoSuchElementException;
 
 /**
  * Represents the order logic card used in a five-player game.
  *
  * <p>This class defines the specific turn-order behavior for games with
  * five players.
  */
 public class Order5 extends OrderLogicCard {
 
     /**
      * Creates an Order5 logic card for a five-player game.
      *
      * @param players the list of players associated with this order card.
      * @throws NoSuchElementException if the number of players is not equal to 5.
      */
     public Order5(ArrayList<Player> players) throws NoSuchElementException{
         super(players);
         if(players.size()!=5)
             throw new NoSuchElementException();
     }
 
     /**
      * Applies the effect associated with the specified position index for the given player.
      * <p>If {@code index == 0}, the player gains 3 Food and the building effect is applied.
      * <p>If {@code index == 1}, the player gains 1 Food and the building effect is applied.
      * <p>If {@code index == 2}, no effect is applied.
      * <p>If {@code index == 3}, no effect is applied.
      * <p>If {@code index == 4}, the player tries to remove 1 Food; if the player cannot pay it,
      * the player loses 2 Prestige.
      *
      * @param player the player to whom the effect is applied.
      * @param index the position index of the effect to apply.
      * @throws IndexOutOfBoundsException if {@code index < 0} or {@code index >= 5}.
      */
     @Override
     protected void effect(Player player,int index) throws IndexOutOfBoundsException
     {
         if(index>=5 || index < 0)
         {
             throw new IndexOutOfBoundsException("index out of bounds");
         }
         if(index==0)
         {
             player.addFood(3);
             buildingEffect(player);
             return;
         }
         if(index==1)
         {
             player.addFood(1);
             buildingEffect(player);
             return;
         }
         if(index==4){
             if(!player.removeFood(1)){
                 player.removePrestige(2);
             }
         }
     }
 
     /**
      * Creates the TURN ORDER box of the TUI.
      * @return the string containing the box
      */
     @Override
     public String toString()
     {
 
         var table = new AsciiTable(BorderStyle.ROUNDED, 5);
         List<String> stringUp=new ArrayList<>();
         for(int i=0;i<5;i++)
         {
             try {
                 if(playerList.get(i).isPlayed())
                     stringUp.add("");
                 else
                     stringUp.add(i + ". " + (playerList.get(i).getPlayer().getTotem() != null ? playerList.get(i).getPlayer().getTotem().toString() : playerList.get(i).getPlayer().getUserName()));
             }
             catch (IndexOutOfBoundsException e) {
                 stringUp.add("");
             }
         }
         table.addRow(stringUp);
 
         List<String> stringList=new ArrayList<>();
         stringList.add("+3\uD83C\uDF56");
         stringList.add("+1\uD83C\uDF56");
         stringList.add("--");
         stringList.add("--");
         stringList.add("-1\uD83C\uDF56/-2\uD83C\uDFC5");
         table.addRow(stringList);
         return table.build() + "\n";
     }
 }