mourning-ember / src / test / java / dev / llan / model / pieces / player / MainCharacterTest.java
MainCharacterTest.java
Raw
package dev.llan.model.pieces.player;

import dev.llan.model.Game;
import dev.llan.model.GameContainer;
import dev.llan.model.board.Grid;
import dev.llan.model.board.Point;
import dev.llan.model.board.Tile;
import dev.llan.model.board.pathfinding.Path;
import dev.llan.events.GameEvent;
import dev.llan.events.PlayerUpdatedEvent;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.Optional;

import static org.junit.jupiter.api.Assertions.*;

class MainCharacterTest {
  private MainCharacter player;
  private Game game;

  @BeforeEach
  void setUp() {
    GameContainer.getInstance().initGame();
    game = GameContainer.getInstance().getCurrentGame();
    player = (MainCharacter) game.getPlayer();
  }

  @Test
  void setActivePath() {
    Path path = new Path();

    GameEvent event = player.setActivePath(Optional.of(path));

    assertTrue(player.getActivePath().isPresent());
    assertInstanceOf(PlayerUpdatedEvent.class, event);
  }

  @Test
  void generateActivePath() {
    Optional<Path> generated = player.generateActivePath(new Point(7, 7));
    player.setActivePath(generated);
    assertTrue(player.getActivePath().isPresent());

    Path generatedPath = generated.get();
    assertEquals(7, generatedPath.getPath().size());
  }

  @Test
  void recalculateActivePath() {

    Optional<Path> generated = player.generateActivePath(new Point(7, 7));
    player.setActivePath(generated);

    game.getMap().getGrid().tileAt(new Point(5, 5)).setType(Tile.TileType.UNMOVABLE);
    Optional<GameEvent> event = player.recalculateActivePath();

    assertTrue(event.isPresent());
    assertInstanceOf(PlayerUpdatedEvent.class, event.get());
    assertNotEquals(7, player.getActivePath().get().getPath().size());
  }

  @Test
  void testClone() {
    Optional<Path> generated = player.generateActivePath(new Point(5, 5));
    player.setActivePath(generated);

    Grid gridClone = game.getMap().cloneGrid();
    Player clone = player.clone(gridClone);

    assertNotEquals(player, clone);
    assertNotEquals(player.getInventory(), clone.getInventory());
    assertNotEquals(player.getActivePath(), clone.getActivePath());
    assertNotEquals(player.getStats(), clone.getStats());
    assertNotSame(player.getPosition(), clone.getPosition());

    assertEquals(player.getInventory().getCoins(), clone.getInventory().getCoins());
    assertEquals(
        player.getActivePath().get().getPath().size(),
        clone.getActivePath().get().getPath().size());
    assertEquals(player.getStats().getHealth(), clone.getStats().getHealth());
    assertEquals(player.getStats().getMovement(), clone.getStats().getMovement());
    assertEquals(player.getPosition().getRow(), clone.getPosition().getRow());
    assertEquals(player.getPosition().getCol(), clone.getPosition().getCol());
  }
}