ymir-js
Version:
This toolkit is created to make it easier for you to develop games like chess, checkers, go, match 3 puzzle and more. It is still under development.
369 lines (368 loc) • 13 kB
JavaScript
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var chai_1 = require("chai");
require("mocha");
var board_1 = require("./board");
var item_1 = require("./item");
describe('Core Board', function () {
it('Board 3x3', function () {
var board = new board_1.default({ x: 3, y: 3 }).board;
(0, chai_1.expect)(board).to.deep.equal({
'0|0': { item: null },
'0|1': { item: null },
'0|2': { item: null },
'1|0': { item: null },
'1|1': { item: null },
'1|2': { item: null },
'2|0': { item: null },
'2|1': { item: null },
'2|2': { item: null },
});
});
it('Board 3x5', function () {
var board = new board_1.default({ x: 3, y: 5 }).board;
(0, chai_1.expect)(board).to.deep.equal({
'0|0': { item: null },
'0|1': { item: null },
'0|2': { item: null },
'0|3': { item: null },
'0|4': { item: null },
'1|0': { item: null },
'1|1': { item: null },
'1|2': { item: null },
'1|3': { item: null },
'1|4': { item: null },
'2|0': { item: null },
'2|1': { item: null },
'2|2': { item: null },
'2|3': { item: null },
'2|4': { item: null },
});
});
it('Board 5x3', function () {
var board = new board_1.default({ x: 5, y: 3 }).board;
(0, chai_1.expect)(board).to.deep.equal({
'0|0': { item: null },
'0|1': { item: null },
'0|2': { item: null },
'1|0': { item: null },
'1|1': { item: null },
'1|2': { item: null },
'2|0': { item: null },
'2|1': { item: null },
'2|2': { item: null },
'3|0': { item: null },
'3|1': { item: null },
'3|2': { item: null },
'4|0': { item: null },
'4|1': { item: null },
'4|2': { item: null },
});
});
it('setItem', function () {
var board = new board_1.default({ x: 3, y: 3 });
var item = new item_1.default({
rules: {
movement: {
angular: true,
linear: true,
stepCount: 4,
},
},
});
board.setItem('0|1', item);
(0, chai_1.expect)(board.board).to.deep.equal({
'0|0': { item: null },
'0|1': { item: item },
'0|2': { item: null },
'1|0': { item: null },
'1|1': { item: null },
'1|2': { item: null },
'2|0': { item: null },
'2|1': { item: null },
'2|2': { item: null },
});
});
it('getItem', function () {
var board = new board_1.default({ x: 3, y: 3 });
var item = new item_1.default({
rules: {
movement: {
angular: true,
linear: true,
stepCount: 4,
},
},
});
board.setItem('0|1', item);
var result = board.getItem('0|1');
(0, chai_1.expect)(result).to.deep.equal(item);
});
it('removeItem', function () {
var board = new board_1.default({ x: 3, y: 3 });
var item = new item_1.default({
rules: {
movement: {
angular: true,
linear: true,
stepCount: 4,
},
},
});
board.setItem('0|1', item);
board.removeItem('0|1');
var result = board.getItem('0|1');
(0, chai_1.expect)(result).to.deep.equal(null);
});
it('moveItem', function () {
var board = new board_1.default({ x: 3, y: 3 });
var item = new item_1.default({
rules: {
movement: {
angular: true,
linear: true,
stepCount: 4,
},
},
});
board.setItem('0|1', item);
board.moveItem('0|1', '1|1');
(0, chai_1.expect)(board.board).to.deep.equal({
'0|0': { item: null },
'0|1': { item: null },
'0|2': { item: null },
'1|0': { item: null },
'1|1': { item: item },
'1|2': { item: null },
'2|0': { item: null },
'2|1': { item: null },
'2|2': { item: null },
});
});
it('switchItem', function () {
var board = new board_1.default({ x: 3, y: 3 });
var firstItem = new item_1.default({
data: {
color: 'black',
},
rules: {
movement: {
angular: true,
linear: true,
stepCount: 4,
},
},
});
var secondItem = new item_1.default({
data: {
color: 'white',
},
rules: {
movement: {
angular: true,
linear: true,
stepCount: 4,
},
},
});
board.setItem('0|1', firstItem);
board.setItem('1|1', secondItem);
board.switchItem('0|1', '1|1');
(0, chai_1.expect)(board.board).to.deep.equal({
'0|0': { item: null },
'0|1': { item: secondItem },
'0|2': { item: null },
'1|0': { item: null },
'1|1': { item: firstItem },
'1|2': { item: null },
'2|0': { item: null },
'2|1': { item: null },
'2|2': { item: null },
});
});
it('selectItem', function () {
var board = new board_1.default({ x: 3, y: 3 });
var item = new item_1.default({
rules: {
movement: {
angular: true,
linear: true,
stepCount: 4,
},
},
});
board.setItem('0|1', __assign({}, item));
board.selectItem('0|1');
(0, chai_1.expect)(board.board).to.deep.equal({
'0|0': { item: null },
'0|1': { item: __assign(__assign({}, item), { selected: true }) },
'0|2': { item: null },
'1|0': { item: null },
'1|1': { item: null },
'1|2': { item: null },
'2|0': { item: null },
'2|1': { item: null },
'2|2': { item: null },
});
});
it('deselectItem', function () {
var board = new board_1.default({ x: 3, y: 3 });
var item = new item_1.default({
rules: {
movement: {
angular: true,
linear: true,
stepCount: 4,
},
},
});
board.setItem('0|1', __assign({}, item));
board.selectItem('0|1');
board.deselectItem('0|1');
(0, chai_1.expect)(board.board).to.deep.equal({
'0|0': { item: null },
'0|1': { item: __assign(__assign({}, item), { selected: false }) },
'0|2': { item: null },
'1|0': { item: null },
'1|1': { item: null },
'1|2': { item: null },
'2|0': { item: null },
'2|1': { item: null },
'2|2': { item: null },
});
});
it('deselectAllItems', function () {
var board = new board_1.default({ x: 3, y: 3 });
var item = new item_1.default({
rules: {
movement: {
angular: true,
linear: true,
stepCount: 4,
},
},
});
board.setItem('0|1', __assign({}, item));
board.selectItem('0|1');
board.deselectAllItems();
(0, chai_1.expect)(board.board).to.deep.equal({
'0|0': { item: null },
'0|1': { item: item },
'0|2': { item: null },
'1|0': { item: null },
'1|1': { item: null },
'1|2': { item: null },
'2|0': { item: null },
'2|1': { item: null },
'2|2': { item: null },
});
});
it('getDistanceBetweenTwoCoords', function () {
var board = new board_1.default({ x: 3, y: 3 });
var distance = board.getDistanceBetweenTwoCoords('0|0', '1|1');
(0, chai_1.expect)(distance).to.deep.equal({ x: 1, y: 1 });
});
it('isEmpty', function () {
var board = new board_1.default({ x: 3, y: 3 });
var item = new item_1.default({
rules: {
movement: {
angular: true,
linear: true,
stepCount: 4,
},
},
});
board.setItem('0|1', item);
var firstIsEmpty = board.isEmpty('0|1');
var secondIsEmpty = board.isEmpty('1|1');
(0, chai_1.expect)(firstIsEmpty).to.equal(false);
(0, chai_1.expect)(secondIsEmpty).to.equal(true);
});
it('isExistCoord', function () {
var board = new board_1.default({ x: 3, y: 3 });
(0, chai_1.expect)(board.isExistCoord('0|0')).to.equal(true);
(0, chai_1.expect)(board.isExistCoord('4|4')).to.equal(false);
});
it('getDistanceBetweenTwoCoords', function () {
var board = new board_1.default({ x: 3, y: 3 });
(0, chai_1.expect)(board.getDistanceBetweenTwoCoords('0|0', '0|1')).to.deep.equal({
y: 0,
x: 1,
});
(0, chai_1.expect)(board.getDistanceBetweenTwoCoords('0|0', '1|0')).to.deep.equal({
y: 1,
x: 0,
});
(0, chai_1.expect)(board.getDistanceBetweenTwoCoords('0|0', '1|1')).to.deep.equal({
y: 1,
x: 1,
});
(0, chai_1.expect)(board.getDistanceBetweenTwoCoords('1|1', '0|0')).to.deep.equal({
y: -1,
x: -1,
});
});
it('getDirection', function () {
var board = new board_1.default({ x: 3, y: 3 });
(0, chai_1.expect)(board.getDirection('0|0', '0|1')).to.equal('right');
(0, chai_1.expect)(board.getDirection('0|0', '1|0')).to.equal('bottom');
(0, chai_1.expect)(board.getDirection('0|0', '1|1')).to.equal('bottomRight');
(0, chai_1.expect)(board.getDirection('1|1', '0|0')).to.equal('topLeft');
});
});
describe('Core Board Available Columns', function () {
it('getAvailableColumns -top for "1|1" on 3x3 Board', function () {
var availableColumn = new board_1.default({ x: 3, y: 3 }).getAvailableColumns('1|1', {
top: true,
stepCount: 1,
});
(0, chai_1.expect)(availableColumn).to.deep.equal(['0|1']);
});
it('getAvailableColumns -bottom for "1|1" on 3x3 Board', function () {
var availableColumn = new board_1.default({ x: 3, y: 3 }).getAvailableColumns('1|1', {
bottom: true,
stepCount: 1,
});
(0, chai_1.expect)(availableColumn).to.deep.equal(['2|1']);
});
it('getAvailableColumns -left for "1|1" on 3x3 Board', function () {
var availableColumn = new board_1.default({ x: 3, y: 3 }).getAvailableColumns('1|1', {
left: true,
stepCount: 1,
});
(0, chai_1.expect)(availableColumn).to.deep.equal(['1|0']);
});
it('getAvailableColumns -right for "1|1" on 3x3 Board', function () {
var availableColumn = new board_1.default({ x: 3, y: 3 }).getAvailableColumns('1|1', {
right: true,
stepCount: 1,
});
(0, chai_1.expect)(availableColumn).to.deep.equal(['1|2']);
});
it('getAvailableColumns -linear for "1|1" on 3x3 Board', function () {
var availableColumn = new board_1.default({ x: 3, y: 3 }).getAvailableColumns('1|1', {
stepCount: 1,
linear: true,
});
(0, chai_1.expect)(availableColumn).to.deep.equal(['0|1', '2|1', '1|0', '1|2']);
});
it('getAvailableColumns -angular for "1|1" on 3x3 Board', function () {
var availableColumn = new board_1.default({ x: 3, y: 3 }).getAvailableColumns('1|1', {
stepCount: 1,
angular: true,
});
(0, chai_1.expect)(availableColumn).to.deep.equal(['0|0', '0|2', '2|0', '2|2']);
});
});