forked from vergnet/application-amicale
Added tests for Piece class
This commit is contained in:
parent
c75a7dc8fc
commit
fcec2a3c8a
4 changed files with 114 additions and 13 deletions
|
@ -1,12 +0,0 @@
|
||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="All Tests (coverage)" type="JavaScriptTestRunnerJest">
|
|
||||||
<node-interpreter value="project" />
|
|
||||||
<node-options value="" />
|
|
||||||
<jest-package value="$PROJECT_DIR$/node_modules/jest" />
|
|
||||||
<working-dir value="$PROJECT_DIR$" />
|
|
||||||
<jest-options value="--coverage" />
|
|
||||||
<envs />
|
|
||||||
<scope-kind value="ALL" />
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
|
@ -21,7 +21,11 @@ export default class Piece {
|
||||||
#currentShape: Object;
|
#currentShape: Object;
|
||||||
|
|
||||||
constructor(colors: Object) {
|
constructor(colors: Object) {
|
||||||
this.#currentShape = new this.#shapes[Math.floor(Math.random() * 7)](colors);
|
this.#currentShape = this.getRandomShape(colors);
|
||||||
|
}
|
||||||
|
|
||||||
|
getRandomShape(colors: Object) {
|
||||||
|
return new this.#shapes[Math.floor(Math.random() * 7)](colors);
|
||||||
}
|
}
|
||||||
|
|
||||||
toGrid(grid: Array<Array<Object>>, isPreview: boolean) {
|
toGrid(grid: Array<Array<Object>>, isPreview: boolean) {
|
||||||
|
|
109
screens/Tetris/__tests__/Piece.test.js
Normal file
109
screens/Tetris/__tests__/Piece.test.js
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
import React from 'react';
|
||||||
|
import Piece from "../Piece";
|
||||||
|
import ShapeI from "../Shapes/ShapeI";
|
||||||
|
|
||||||
|
let colors = {
|
||||||
|
tetrisI: "#000001",
|
||||||
|
tetrisBackground: "#000002"
|
||||||
|
};
|
||||||
|
|
||||||
|
jest.mock("../Shapes/ShapeI");
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
jest.spyOn(Piece.prototype, 'getRandomShape')
|
||||||
|
.mockImplementation((colors: Object) => {return new ShapeI(colors);});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
jest.restoreAllMocks();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('isPositionValid', () => {
|
||||||
|
let x = 0;
|
||||||
|
let y = 0;
|
||||||
|
let spy = jest.spyOn(ShapeI.prototype, 'getCellsCoordinates')
|
||||||
|
.mockImplementation(() => {return [{x: x, y: y}];});
|
||||||
|
let grid = [
|
||||||
|
[{isEmpty: true}, {isEmpty: true}],
|
||||||
|
[{isEmpty: true}, {isEmpty: false}],
|
||||||
|
];
|
||||||
|
let size = 2;
|
||||||
|
|
||||||
|
let p = new Piece(colors);
|
||||||
|
expect(p.isPositionValid(grid, size, size)).toBeTrue();
|
||||||
|
x = 1; y = 0;
|
||||||
|
expect(p.isPositionValid(grid, size, size)).toBeTrue();
|
||||||
|
x = 0; y = 1;
|
||||||
|
expect(p.isPositionValid(grid, size, size)).toBeTrue();
|
||||||
|
x = 1; y = 1;
|
||||||
|
expect(p.isPositionValid(grid, size, size)).toBeFalse();
|
||||||
|
x = 2; y = 0;
|
||||||
|
expect(p.isPositionValid(grid, size, size)).toBeFalse();
|
||||||
|
x = -1; y = 0;
|
||||||
|
expect(p.isPositionValid(grid, size, size)).toBeFalse();
|
||||||
|
x = 0; y = 2;
|
||||||
|
expect(p.isPositionValid(grid, size, size)).toBeFalse();
|
||||||
|
x = 0; y = -1;
|
||||||
|
expect(p.isPositionValid(grid, size, size)).toBeFalse();
|
||||||
|
|
||||||
|
spy.mockRestore();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('tryMove', () => {
|
||||||
|
let p = new Piece(colors);
|
||||||
|
const callbackMock = jest.fn();
|
||||||
|
let isValid = true;
|
||||||
|
let spy = jest.spyOn(Piece.prototype, 'isPositionValid')
|
||||||
|
.mockImplementation(() => {return isValid;});
|
||||||
|
|
||||||
|
expect(p.tryMove(-1, 0, null, null, null, callbackMock)).toBeTrue();
|
||||||
|
isValid = false;
|
||||||
|
expect(p.tryMove(-1, 0, null, null, null, callbackMock)).toBeFalse();
|
||||||
|
isValid = true;
|
||||||
|
expect(p.tryMove(0, 1, null, null, null, callbackMock)).toBeTrue();
|
||||||
|
expect(callbackMock).toBeCalledTimes(0);
|
||||||
|
|
||||||
|
isValid = false;
|
||||||
|
expect(p.tryMove(0, 1, null, null, null, callbackMock)).toBeFalse();
|
||||||
|
expect(callbackMock).toBeCalledTimes(1);
|
||||||
|
|
||||||
|
spy.mockRestore();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('tryRotate', () => {
|
||||||
|
let p = new Piece(colors);
|
||||||
|
let isValid = true;
|
||||||
|
let spy = jest.spyOn(Piece.prototype, 'isPositionValid')
|
||||||
|
.mockImplementation(() => {return isValid;});
|
||||||
|
|
||||||
|
expect(p.tryRotate( null, null, null)).toBeTrue();
|
||||||
|
isValid = false;
|
||||||
|
expect(p.tryRotate( null, null, null)).toBeFalse();
|
||||||
|
|
||||||
|
spy.mockRestore();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
test('toGrid', () => {
|
||||||
|
let x = 0;
|
||||||
|
let y = 0;
|
||||||
|
let spy1 = jest.spyOn(ShapeI.prototype, 'getCellsCoordinates')
|
||||||
|
.mockImplementation(() => {return [{x: x, y: y}];});
|
||||||
|
let spy2 = jest.spyOn(ShapeI.prototype, 'getColor')
|
||||||
|
.mockImplementation(() => {return colors.tetrisI;});
|
||||||
|
let grid = [
|
||||||
|
[{isEmpty: true}, {isEmpty: true}],
|
||||||
|
[{isEmpty: true}, {isEmpty: true}],
|
||||||
|
];
|
||||||
|
let expectedGrid = [
|
||||||
|
[{color: colors.tetrisI, isEmpty: false}, {isEmpty: true}],
|
||||||
|
[{isEmpty: true}, {isEmpty: true}],
|
||||||
|
];
|
||||||
|
|
||||||
|
let p = new Piece(colors);
|
||||||
|
p.toGrid(grid, true);
|
||||||
|
expect(grid).toStrictEqual(expectedGrid);
|
||||||
|
|
||||||
|
spy1.mockRestore();
|
||||||
|
spy2.mockRestore();
|
||||||
|
});
|
Loading…
Reference in a new issue