Files
arkanoid/src/lib/tick/tick.test.js
T

85 lines
3.1 KiB
JavaScript
Raw Normal View History

import { CONTAINER_HEIGHT, CONTAINER_WIDTH } from '../../config';
import { Game } from '../../game';
import { tick } from './tick';
describe('tick', () => {
it('Возвращает корректное значние при неверных типах аргументов', () => {
expect(tick(null, 1, 1, 1)).toBeNull();
expect(tick(1, null, 1, 1)).toBeNull();
expect(tick(1, 1, null, 1)).toBeNull();
expect(tick(1, 1, 1, null)).toBeNull();
});
it('Возвращает корректное значние и не изменяет свойства game при неверых размерах контейнера', () => {
const levels = [[[1]]];
const game = new Game(levels);
const ballX = game.ball.x;
const ballY = game.ball.y;
expect(tick(game, -1, -1, 1)).toBeNull();
expect(game.ball.x).toBe(ballX);
expect(game.ball.y).toBe(ballY);
});
it('Возвращает корректное значние и не изменяет свойства game при неверном значении времени', () => {
const levels = [[[1]]];
const game = new Game(levels);
const ballX = game.ball.x;
const ballY = game.ball.y;
expect(tick(game, 1, 1, -1)).toBeNull();
expect(game.ball.x).toBe(ballX);
expect(game.ball.y).toBe(ballY);
});
it('Меняет направление мяча при столкновении со стеной', () => {
const levels = [[[1]]];
const game = new Game(levels);
game.ball.x = 0;
game.ball.horizontalSpeed = -10;
tick(game, CONTAINER_WIDTH, CONTAINER_HEIGHT, 1);
expect(game.ball.x).toBe(10);
expect(game.ball.horizontalSpeed).toBe(10);
});
it('Меняет направление мяча при столкновении с потолком', () => {
const levels = [[[1]]];
const game = new Game(1);
game.ball.y = 0;
game.ball.verticalSpeed = -10;
tick(game, CONTAINER_WIDTH, CONTAINER_HEIGHT, 1);
expect(game.ball.y).toBe(game.ball.radius);
expect(game.ball.verticalSpeed).toBe(10);
});
it('Убивает кирпич при столкновении и отражает мяч', () => {
const levels = [[[1]]];
const game = new Game(levels);
const brick = game.bricks[0];
game.ball.x = brick.x + game.ball.radius + 1;
game.ball.y = brick.y + brick.height + game.ball.radius + 1;
game.ball.horizontalSpeed = 0;
game.ball.verticalSpeed = -10;
tick(game, CONTAINER_WIDTH, CONTAINER_HEIGHT, 0.1);
expect(brick.alive).toBe(false);
expect(game.ball.verticalSpeed).toBe(10);
});
it('Убивает только один кирпич за тик', () => {
const levels = [[[1, 1]]];
const game = new Game(levels);
const [firstBrick, secondBrick] = game.bricks;
game.ball.x = firstBrick.x + game.ball.radius + 1;
game.ball.y = firstBrick.y + firstBrick.height + game.ball.radius + 1;
game.ball.horizontalSpeed = 0;
game.ball.verticalSpeed = -10;
tick(game, CONTAINER_WIDTH, CONTAINER_HEIGHT, 0.1);
const killedCount = game.bricks.filter((b) => !b.alive).length;
expect(killedCount).toBe(1);
});
});