labyrinth-game-logic
Version:
A libary that implements the boardgame labyrinth and exposes the functionality to create and interact with games
160 lines (145 loc) • 4.71 kB
text/typescript
import { BoardPosition } from "./BoardPosition";
import { PlayerState } from "./PlayerState";
import { Treasure } from "./Treasure";
test("remainingTreasureCount", () => {
const playerState = new PlayerState(
[new Treasure(0), new Treasure(1)],
[new Treasure(0), new Treasure(1), new Treasure(2), new Treasure(3)],
null,
new BoardPosition(0, 0)
);
expect(playerState.remainingTreasureCount).toBe(4);
});
test("foundTreasureCount", () => {
const playerState = new PlayerState(
[new Treasure(0), new Treasure(1)],
[new Treasure(0), new Treasure(1), new Treasure(2), new Treasure(3)],
null,
new BoardPosition(0, 0)
);
expect(playerState.foundTreasureCount).toBe(2);
});
test("getFoundTreasure", () => {
const treasure = new Treasure(1);
const playerState = new PlayerState(
[treasure, new Treasure(1)],
[new Treasure(0), new Treasure(1), new Treasure(2), new Treasure(3)],
null,
new BoardPosition(0, 0)
);
expect(playerState.getFoundTreasure(0)).toBe(treasure);
});
test("setPosition", () => {
const positionA = new BoardPosition(0, 1);
let playerState = new PlayerState([], [], null, positionA);
expect(playerState.position).toBe(positionA);
const positionB = new BoardPosition(0, 2);
playerState = playerState.setPosition(positionB);
expect(playerState.position).toBe(positionB);
});
test("collectTreasure", () => {
const currentTreasure = new Treasure(0);
let playerState = new PlayerState(
[],
[new Treasure(1)],
currentTreasure,
new BoardPosition(0, 0)
);
expect(playerState.currentTreasure).toBe(currentTreasure);
expect(playerState.remainingTreasureCount).toBe(2);
playerState = playerState.collectTreasure(currentTreasure);
expect(playerState.currentTreasure?.equals(new Treasure(1))).toBe(true);
expect(playerState.foundTreasureCount).toBe(1);
expect(playerState.remainingTreasureCount).toBe(1);
});
test("removeLastTreasure", () => {
const currentTreasure = new Treasure(0);
const foundTreasure = new Treasure(1);
let playerState = new PlayerState(
[foundTreasure],
[],
currentTreasure,
new BoardPosition(0, 0)
);
expect(playerState.currentTreasure).toBe(currentTreasure);
expect(playerState.foundTreasureCount).toBe(1);
playerState = playerState.removeLastTreasure();
expect(playerState.foundTreasureCount).toBe(0);
expect(playerState.currentTreasure).toBe(foundTreasure);
expect(playerState.remainingTreasureCount).toBe(2);
});
test("removeLastTreasureEmpty", () => {
let playerState = new PlayerState([], [], null, new BoardPosition(0, 0));
expect(playerState.currentTreasure).toBe(null);
expect(playerState.foundTreasureCount).toBe(0);
expect(playerState.remainingTreasureCount).toBe(0);
playerState = playerState.removeLastTreasure();
expect(playerState.foundTreasureCount).toBe(0);
expect(playerState.currentTreasure).toBe(null);
expect(playerState.remainingTreasureCount).toBe(0);
});
test("equals", () => {
const a = new PlayerState(
[new Treasure(1)],
[new Treasure(2)],
new Treasure(0),
new BoardPosition(0, 0)
);
const b = new PlayerState(
[new Treasure(1)],
[new Treasure(2)],
new Treasure(0),
new BoardPosition(0, 0)
);
const c = new PlayerState(
[new Treasure(1)],
[new Treasure(3)],
new Treasure(0),
new BoardPosition(0, 0)
);
const d = new PlayerState(
[new Treasure(1)],
[new Treasure(2)],
new Treasure(0),
new BoardPosition(1, 0)
);
const e = new PlayerState(
[new Treasure(1)],
[new Treasure(2)],
new Treasure(0),
new BoardPosition(0, 0)
);
const f = new PlayerState(
[new Treasure(1)],
[new Treasure(2)],
new Treasure(2),
new BoardPosition(0, 0)
);
const g = new PlayerState(
[new Treasure(1), new Treasure(2)],
[new Treasure(2)],
new Treasure(2),
new BoardPosition(0, 0)
);
const h = new PlayerState(
[new Treasure(1), new Treasure(3)],
[new Treasure(2)],
new Treasure(2),
new BoardPosition(0, 0)
);
const i = new PlayerState(
[new Treasure(1), new Treasure(3)],
[new Treasure(2), new Treasure(1)],
new Treasure(2),
new BoardPosition(0, 0)
);
expect(a.equals(b)).toBe(true);
expect(b.equals(a)).toBe(true);
expect(b.equals(c)).toBe(false);
expect(c.equals(b)).toBe(false);
expect(d.equals(e)).toBe(false);
expect(e.equals(f)).toBe(false);
expect(f.equals(g)).toBe(false);
expect(g.equals(h)).toBe(false);
expect(h.equals(i)).toBe(false);
});