@Test
  public void testNumberOfHomePlanets() throws InvalidMoveException {
    Player player1 = new Player("Player 1", GameColor.BLACK);
    Assert.assertEquals(Player.DEFAULT_NUMBER_OF_PLANETS, player1.numberOfHomePlanets());

    List<Planet> homePlanets = player1.getHomePlanets();
    for (Planet planet : homePlanets) {
      planet.removeShips(player1);
    }

    Assert.assertEquals(0, player1.numberOfHomePlanets());
  }
 Universe haveEveryPlanetAttack(Planet mine, Planets planetsToAttack) {
   List<Planet> newPlanets = new ArrayList<Planet>();
   List<Fleet> additionalFleets = new ArrayList<Fleet>();
   for (Planet p : planetsToAttack.minus(mine).items) {
     if (!p.isNeutral()) {
       newPlanets.add(p.removeShips(p.numShips));
       additionalFleets.add(p.attack(mine));
     }
   }
   return new Universe(
       planets.replace(new Planets(newPlanets)),
       fleets.union(new Fleets(additionalFleets)),
       turn,
       reservations);
 }
 public Universe(Planets planets, Fleets fleets, int turn, Reservations reservations) {
   this.turn = turn;
   Fleets sentThisTurn = new Fleets();
   for (Reservation reservation : reservations.items) {
     if (turn == reservation.turn) {
       Planet planet = planets.find(reservation.attack.homePlanet.id);
       if (planet.isMine() && planet.numShips >= reservation.attack.ships) {
         sentThisTurn = sentThisTurn.plus(new Fleet(reservation.attack));
         planets = planets.remove(planet);
         planet = planet.removeShips(reservation.attack.ships);
         planets = planets.union(planet);
       }
     }
   }
   this.planets = planets;
   this.fleets = fleets.plus(sentThisTurn);
   this.reservations = reservations;
 }