123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- 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 spy1 = jest.spyOn(Piece.prototype, 'isPositionValid')
- .mockImplementation(() => {return isValid;});
- let spy2 = jest.spyOn(Piece.prototype, 'removeFromGrid')
- .mockImplementation(() => {});
- let spy3 = jest.spyOn(Piece.prototype, 'toGrid')
- .mockImplementation(() => {});
-
- 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);
-
- expect(spy2).toBeCalledTimes(4);
- expect(spy3).toBeCalledTimes(4);
-
- spy1.mockRestore();
- spy2.mockRestore();
- spy3.mockRestore();
- });
-
- test('tryRotate', () => {
- let p = new Piece(colors);
- let isValid = true;
- let spy1 = jest.spyOn(Piece.prototype, 'isPositionValid')
- .mockImplementation(() => {return isValid;});
- let spy2 = jest.spyOn(Piece.prototype, 'removeFromGrid')
- .mockImplementation(() => {});
- let spy3 = jest.spyOn(Piece.prototype, 'toGrid')
- .mockImplementation(() => {});
-
- expect(p.tryRotate( null, null, null)).toBeTrue();
- isValid = false;
- expect(p.tryRotate( null, null, null)).toBeFalse();
-
- expect(spy2).toBeCalledTimes(2);
- expect(spy3).toBeCalledTimes(2);
-
- spy1.mockRestore();
- spy2.mockRestore();
- spy3.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();
- });
-
- test('removeFromGrid', () => {
- let gridOld = [
- [
- {color: colors.tetrisI, isEmpty: false},
- {color: colors.tetrisI, isEmpty: false},
- {color: colors.tetrisBackground, isEmpty: true},
- ],
- ];
- let gridNew = [
- [
- {color: colors.tetrisBackground, isEmpty: true},
- {color: colors.tetrisBackground, isEmpty: true},
- {color: colors.tetrisBackground, isEmpty: true},
- ],
- ];
- let oldCoord = [{x: 0, y: 0}, {x: 1, y: 0}];
- let spy1 = jest.spyOn(ShapeI.prototype, 'getCellsCoordinates')
- .mockImplementation(() => {return oldCoord;});
- let spy2 = jest.spyOn(ShapeI.prototype, 'getColor')
- .mockImplementation(() => {return colors.tetrisI;});
- let p = new Piece(colors);
- p.removeFromGrid(gridOld);
- expect(gridOld).toStrictEqual(gridNew);
-
- spy1.mockRestore();
- spy2.mockRestore();
- });
|