UNPKG

tictactoejs

Version:

provide a library like chess.js but for tic tac toe.. you can make your own GUI

214 lines (164 loc) 4.97 kB
// tape & tap-spec var test = require('tape'); var tapSpec = require('tap-spec'); test.createStream() .pipe(tapSpec()) .pipe(process.stdout); var ttt = require('./../TicTacToe.min.js'); test('size', function (t) { for(var i = 3; i <= 5; i++){ var game = new ttt.TicTacToe(i); t.equal(game.getSize(), i); } t.end(); }); test('turn', function (t) { var game = new ttt.TicTacToe(); t.equal(game.turn(), 'X'); t.end(); }); test('move (cartesian) (default)', function (t) { var game = new ttt.TicTacToe(); t.equal(game.turn(), 'X'); t.true(game.move(1, 1)); // X t.equal(game.turn(), 'O'); t.true(game.move(2, 2)); // O t.equal(game.turn(), 'X'); t.true(game.move(2, 1)); // X t.equal(game.turn(), 'O'); t.true(game.move(3, 1)); // O t.equal(game.turn(), 'X'); t.false(game.move(3, 1)); // already by O //~ console.log(game.ascii()) t.end(); }); test('move (array)', function (t) { var game = new ttt.TicTacToe(); t.equal(game.turn(), 'X'); t.true(game.moveArray(2, 0)); // X t.equal(game.turn(), 'O'); t.true(game.moveArray(1, 1)); // O t.equal(game.turn(), 'X'); t.true(game.moveArray(2, 1)); // X t.equal(game.turn(), 'O'); t.true(game.moveArray(2, 2)); // O t.equal(game.turn(), 'X'); t.false(game.moveArray(2, 2)); // already by O //~ console.log(game.ascii()) t.end(); }); test('move invalid outside board', function (t) { var game = new ttt.TicTacToe(3); t.false(game.moveArray(-1, 3)); t.false(game.moveArray(1, 3)); t.false(game.moveArray(4, 1)); t.false(game.moveArray(5, 3)); t.false(game.move(0, -1)); t.false(game.move(0, 0)); t.false(game.move(1, 0)); t.false(game.move(4, 2)); t.false(game.move(4, 4)); //~ console.log(game.ascii()) t.end(); }); test('status', function (t) { var game; game = new ttt.TicTacToe(); // unfinished game // X O game.move(1, 1); game.move(1, 2); game.move(2, 1); game.move(2, 2); t.equal(game.status(), 'in progress', 'unfinished game'); game = new ttt.TicTacToe(); // X horizontal // X O game.move(1, 1); game.move(1, 2); game.move(2, 1); game.move(2, 2); game.move(3, 1); game.move(3, 3); t.equal(game.status(), 'X', 'X horizontal'); game = new ttt.TicTacToe(); // O horizontal // X O game.move(1, 1); game.move(1, 2); game.move(2, 1); game.move(2, 2); game.move(3, 3); game.move(3, 2); t.equal(game.status(), 'O', 'O horizontal'); game = new ttt.TicTacToe(); // X vertical // X O game.move(2, 2); game.move(1, 2); game.move(2, 3); game.move(1, 3); game.move(2, 1); t.equal(game.status(), 'X', 'X vertical'); game = new ttt.TicTacToe(); // O vertical // X O game.move(2, 1); game.move(1, 2); game.move(3, 2); game.move(1, 1); game.move(3, 3); game.move(1, 3); t.equal(game.status(), 'O', 'O vertical'); game = new ttt.TicTacToe(); // draw // X O game.move(1, 1); game.move(2, 2); game.move(1, 2); game.move(1, 3); game.move(3, 1); game.move(2, 1); game.move(2, 3); game.move(3, 2); game.move(3, 3); t.equal(game.status(), 'draw', 'draw'); t.true(game.isDraw(), 'is draw'); game = new ttt.TicTacToe(); // diagonal \ // X O game.move(1, 3); game.move(1, 2); game.move(2, 2); game.move(3, 2); game.move(3, 1); game.move(2, 1); t.equal(game.status(), 'X', 'diagonal \\'); game = new ttt.TicTacToe(3); // diagonal / // X O game.move(2, 2); game.move(1, 2); game.move(1, 1); game.move(3, 1); game.move(3, 3); game.move(1, 3); t.equal(game.status(), 'X', 'diagonal /'); t.true(game.gameOver(), 'gameOver()'); t.end(); }); test('legal moves', function (t) { var game = new ttt.TicTacToe(3); t.equal(game.legalMoves().length, 9, '9'); game.move(1, 1); t.equal(game.legalMoves().length, 8, '8'); game.move(1, 2); t.equal(game.legalMoves().length, 7, '7'); game.move(1, 3); t.equal(game.legalMoves().length, 6, '6'); game.move(2, 1); t.equal(game.legalMoves().length, 5, '5'); game.move(2, 2); t.equal(game.legalMoves().length, 4, '4'); game.move(2, 3); t.equal(game.legalMoves().length, 3, '3'); game.move(3, 1); t.equal(game.legalMoves().length, 2, '2'); game.move(3, 2); t.equal(game.legalMoves().length, 1, '1'); game.move(3, 3); t.equal(game.legalMoves().length, 0, '0'); t.true(game.gameOver(), 'gameOver()'); t.end(); }); test('random moves', function (t) { var game = new ttt.TicTacToe(), move; for(var i = 9; i > 0; i--){ t.equal(game.legalMoves().length, i, i); move = game.randomMove(); //~ console.log(move); } t.true(game.gameOver(), 'gameOver()'); //~ console.log(game.ascii()) t.end(); }); test('exists', function (t) { var game = new ttt.TicTacToe(); // must be available t.false(game.exists(2, 2), 'check available'); game.move(2, 2); // must be exists t.true(game.exists(2, 2), 'check if exists'); //~ console.log(game.ascii()) t.end(); });