From fdae0a741133c80d7b3f509c9b9e61085867e673 Mon Sep 17 00:00:00 2001 From: Hector Alfaro Date: Tue, 24 Sep 2019 05:56:02 -0400 Subject: [PATCH] Add tests --- __test__/game.test.js | 97 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 __test__/game.test.js diff --git a/__test__/game.test.js b/__test__/game.test.js new file mode 100644 index 0000000..acf7552 --- /dev/null +++ b/__test__/game.test.js @@ -0,0 +1,97 @@ +const Game = require('../src/game').default + +describe('Game', () => { + let game, p1, p2 + beforeEach(() => { + p1 = 'Salem' + p2 = 'Nate' + game = new Game(p1, p2) + }) + + describe('Game', () => { + it('Initializes with two players', async () => { + expect(game.p1).toBe('Salem') + expect(game.p2).toBe('Nate') + }) + + it('Initializes with an empty board', async () => { + for (let r = 0; r < game.board.length; r++) { + for (let c = 0; c < game.board[r].lenght; c++) { + expect(game.board[r][c]).toBeUndefined() + } + } + }) + + it('Starts the game with a random player', async () => { + Math.random = () => 0.4 + expect(new Game(p1, p2).player).toBe('Salem') + + Math.random = () => 0.6 + expect(new Game(p1, p2).player).toBe('Nate') + }) + }) + + describe('turn', () => { + it("Inserts an 'X' into the top center", async () => { + game.turn(0, 1) + expect(game.board[0][1]).toBe('X') + }) + + it("Inserts an 'X' into the top left", async () => { + game.turn(0) + expect(game.board[0][0]).toBe('X') + }) + }) + + describe('nextPlayer', () => { + it('Sets the current player to be whoever it is not', async () => { + Math.random = () => 0.4 + const game = new Game(p1, p2) + expect(game.player).toBe('Salem') + game.nextPlayer() + expect(game.player).toBe('Nate') + }) + }) + + describe('hasWinner', () => { + it('Wins if any row is filled', async () => { + for (let r = 0; r < game.board.length; r++) { + for (let c = 0; c < game.board[r].length; c++) { + game.board[r][c] = 'X' + } + expect(game.hasWinner()).toBe(true) + + for (let c = 0; c < game.board[r].length; c++) { + game.board[r][c] = null + } + } + }) + + it('Wins if any column is filled', async () => { + for (let r = 0; r < game.board.length; r++) { + for (let c = 0; c < game.board[r].length; c++) { + game.board[c][r] = 'X' + } + expect(game.hasWinner()).toBe(true) + + for (let c = 0; c < game.board[r].length; c++) { + game.board[c][r] = null + } + } + }) + + it('Wins if down-left diagonal is filled', async () => { + for (let r = 0; r < game.board.length; r++) { + game.board[r][r] = 'X' + } + expect(game.hasWinner()).toBe(true) + }) + + it('Wins if up-right diagonal is filled', async () => { + for (let r = 0; r < game.board.length; r++) { + game.board[2 - r][r] = 'X' + } + expect(game.hasWinner()).toBe(true) + }) + }) +})