minesweeper/shared/game.test.ts

92 lines
2.7 KiB
TypeScript

import { describe, it, expect } from "bun:test";
import { getValue, ServerGame, serverToClientGame } from "./game";
describe("Game", () => {
it("should get value", () => {
const mines = [
[false, false, true, true, true],
[true, false, true, false, true],
[false, false, true, true, true],
[false, false, false, false, false],
];
expect(getValue(mines, 0, 0)).toEqual(1);
expect(getValue(mines, 0, 1)).toEqual(3);
expect(getValue(mines, 3, 0)).toEqual(0);
expect(getValue(mines, 1, 3)).toEqual(8);
});
it("should convert server to client game", () => {
const serverGame: ServerGame = {
theme: "default",
mines: [
[false, false, true, true, true],
[true, false, true, false, true],
[false, false, true, true, true],
[false, false, false, false, false],
],
minesCount: 4,
isRevealed: [
[false, false, true, false, true],
[true, false, true, false, true],
[false, false, true, false, true],
[false, false, false, false, false],
],
isFlagged: [
[false, false, true, false, true],
[true, false, true, false, true],
[false, false, true, false, true],
[true, false, false, false, false],
],
started: 1679599200000,
finished: 0,
lastClick: [0, 0] satisfies [number, number],
uuid: "C270D7CD-AF97-42CE-A6C9-CB765102CA17",
width: 5,
height: 4,
user: "TestUser",
stage: 1,
isQuestionMark: [
[false, false, true, false, true],
[true, false, true, false, true],
[false, false, true, false, true],
[false, false, false, false, false],
],
};
expect(serverToClientGame(serverGame)).toEqual({
theme: "default",
minesCount: 4,
isRevealed: [
[false, false, true, false, true],
[true, false, true, false, true],
[false, false, true, false, true],
[false, false, false, false, false],
],
isFlagged: [
[false, false, true, false, true],
[true, false, true, false, true],
[false, false, true, false, true],
[true, false, false, false, false],
],
values: [
[-1, -1, 2, -1, 2],
[0, -1, 4, -1, 4],
[-1, -1, 2, -1, 2],
[-1, -1, -1, -1, -1],
],
lastClick: [0, 0],
started: 1679599200000,
uuid: "C270D7CD-AF97-42CE-A6C9-CB765102CA17",
width: 5,
height: 4,
user: "TestUser",
stage: 1,
isQuestionMark: [
[false, false, true, false, true],
[true, false, true, false, true],
[false, false, true, false, true],
[false, false, false, false, false],
],
});
});
});