224 lines
8.1 KiB
JavaScript
224 lines
8.1 KiB
JavaScript
import { Ball } from '../../entities/ball/ball';
|
|
import { Paddle } from '../../entities/paddle/paddle';
|
|
import { processReflection } from './processReflection';
|
|
|
|
describe('processReflection', () => {
|
|
it('Корректно обрабатывает неверное значения аргумента paddle', () => {
|
|
const ball = new Ball(0, 0, 1, 1, 0);
|
|
const sectorAmount = 1;
|
|
const minAngle = 1;
|
|
const maxAngle = 179;
|
|
const speed = 1;
|
|
|
|
const ballX = ball.x;
|
|
const ballY = ball.y;
|
|
const verticalSpeed = ball.verticalSpeed;
|
|
const horizontalSpeed = ball.horizontalSpeed;
|
|
|
|
const result = processReflection(null, ball, sectorAmount, minAngle, maxAngle, speed);
|
|
|
|
expect(result).toBeNull();
|
|
expect(ball.x).toEqual(ballX);
|
|
expect(ball.y).toEqual(ballY);
|
|
expect(ball.verticalSpeed).toEqual(verticalSpeed);
|
|
expect(ball.horizontalSpeed).toEqual(horizontalSpeed);
|
|
});
|
|
|
|
it('Корректно обрабатывает неверное значения аргумента ball', () => {
|
|
const paddle = new Paddle(0, 0, 2, 1);
|
|
const sectorAmount = 1;
|
|
const minAngle = 1;
|
|
const maxAngle = 179;
|
|
const speed = 1;
|
|
|
|
const result = processReflection(paddle, null, sectorAmount, minAngle, maxAngle, speed);
|
|
|
|
expect(result).toBeNull();
|
|
});
|
|
|
|
it('Корректно обрабатывает неверное значения аргумента paddleSectorAmount', () => {
|
|
const paddle = new Paddle(0, 0, 2, 1);
|
|
const ball = new Ball(0, 0, 1, 1, 0);
|
|
const minAngle = 1;
|
|
const maxAngle = 179;
|
|
const speed = 1;
|
|
|
|
const ballX = ball.x;
|
|
const ballY = ball.y;
|
|
const verticalSpeed = ball.verticalSpeed;
|
|
const horizontalSpeed = ball.horizontalSpeed;
|
|
|
|
const result = processReflection(paddle, ball, null, minAngle, maxAngle, speed);
|
|
|
|
expect(result).toBeNull();
|
|
expect(ball.x).toEqual(ballX);
|
|
expect(ball.y).toEqual(ballY);
|
|
expect(ball.verticalSpeed).toEqual(verticalSpeed);
|
|
expect(ball.horizontalSpeed).toEqual(horizontalSpeed);
|
|
|
|
expect(processReflection(paddle, ball, 0, minAngle, maxAngle, speed)).toBeNull();
|
|
expect(processReflection(paddle, ball, -1, minAngle, maxAngle, speed)).toBeNull();
|
|
expect(processReflection(paddle, ball, 1.5, minAngle, maxAngle, speed)).toBeNull();
|
|
});
|
|
|
|
it('Корректно обрабатывает неверное значения аргумента minAngle', () => {
|
|
const paddle = new Paddle(0, 0, 2, 1);
|
|
const ball = new Ball(0, 0, 1, 1, 0);
|
|
const sectorAmount = 1;
|
|
const maxAngle = 178;
|
|
const speed = 1;
|
|
|
|
const ballX = ball.x;
|
|
const ballY = ball.y;
|
|
const verticalSpeed = ball.verticalSpeed;
|
|
const horizontalSpeed = ball.horizontalSpeed;
|
|
|
|
const result = processReflection(paddle, ball, sectorAmount, null, maxAngle, speed);
|
|
|
|
expect(result).toBeNull();
|
|
expect(ball.x).toEqual(ballX);
|
|
expect(ball.y).toEqual(ballY);
|
|
expect(ball.verticalSpeed).toEqual(verticalSpeed);
|
|
expect(ball.horizontalSpeed).toEqual(horizontalSpeed);
|
|
|
|
expect(processReflection(paddle, ball, sectorAmount, -1, maxAngle, speed)).toBeNull();
|
|
expect(processReflection(paddle, ball, sectorAmount, 360, maxAngle, speed)).toBeNull();
|
|
|
|
const minAngleBiggerThanMaxAngle = 179;
|
|
expect(processReflection(paddle, ball, sectorAmount, minAngleBiggerThanMaxAngle, maxAngle, speed)).toBeNull();
|
|
});
|
|
|
|
it('Корректно обрабатывает неверное значения аргумента maxAngle', () => {
|
|
const paddle = new Paddle(0, 0, 2, 1);
|
|
const ball = new Ball(0, 0, 1, 1, 0);
|
|
const sectorAmount = 1;
|
|
const minAngle = 1;
|
|
const speed = 1;
|
|
|
|
const ballX = ball.x;
|
|
const ballY = ball.y;
|
|
const verticalSpeed = ball.verticalSpeed;
|
|
const horizontalSpeed = ball.horizontalSpeed;
|
|
|
|
const result = processReflection(paddle, ball, sectorAmount, minAngle, null, speed);
|
|
|
|
expect(result).toBeNull();
|
|
expect(ball.x).toEqual(ballX);
|
|
expect(ball.y).toEqual(ballY);
|
|
expect(ball.verticalSpeed).toEqual(verticalSpeed);
|
|
expect(ball.horizontalSpeed).toEqual(horizontalSpeed);
|
|
|
|
expect(processReflection(paddle, ball, sectorAmount, minAngle, -1, speed)).toBeNull();
|
|
expect(processReflection(paddle, ball, sectorAmount, minAngle, 360, speed)).toBeNull();
|
|
});
|
|
|
|
it('Корректно обрабатывает неверное значения аргумента speed', () => {
|
|
const paddle = new Paddle(0, 0, 2, 1);
|
|
const ball = new Ball(0, 0, 1, 1, 0);
|
|
const sectorAmount = 1;
|
|
const minAngle = 1;
|
|
const maxAngle = 179;
|
|
|
|
const ballX = ball.x;
|
|
const ballY = ball.y;
|
|
const verticalSpeed = ball.verticalSpeed;
|
|
const horizontalSpeed = ball.horizontalSpeed;
|
|
|
|
const result = processReflection(paddle, ball, sectorAmount, minAngle, maxAngle, null);
|
|
|
|
expect(result).toBeNull();
|
|
expect(ball.x).toEqual(ballX);
|
|
expect(ball.y).toEqual(ballY);
|
|
expect(ball.verticalSpeed).toEqual(verticalSpeed);
|
|
expect(ball.horizontalSpeed).toEqual(horizontalSpeed);
|
|
|
|
expect(processReflection(paddle, ball, sectorAmount, minAngle, maxAngle, -1)).toBeNull();
|
|
});
|
|
|
|
it('Корректно обрабатывает неверное значения аргумента speed', () => {
|
|
const paddle = new Paddle(0, 0, 2, 1);
|
|
const ball = new Ball(0, 0, 1, 1, 0);
|
|
const sectorAmount = 1;
|
|
const minAngle = 1;
|
|
const maxAngle = 179;
|
|
|
|
const ballX = ball.x;
|
|
const ballY = ball.y;
|
|
const verticalSpeed = ball.verticalSpeed;
|
|
const horizontalSpeed = ball.horizontalSpeed;
|
|
|
|
const result = processReflection(paddle, ball, sectorAmount, minAngle, maxAngle, null);
|
|
|
|
expect(result).toBeNull();
|
|
expect(ball.x).toEqual(ballX);
|
|
expect(ball.y).toEqual(ballY);
|
|
expect(ball.verticalSpeed).toEqual(verticalSpeed);
|
|
expect(ball.horizontalSpeed).toEqual(horizontalSpeed);
|
|
|
|
expect(processReflection(paddle, ball, sectorAmount, minAngle, maxAngle, -1)).toBeNull();
|
|
});
|
|
|
|
it('Ничего не изменяет при отсутствии столкновения ракетки и мяча', () => {
|
|
const paddle = new Paddle(0, 0, 2, 1);
|
|
const ball = new Ball(10, 10, 1, 1, 0);
|
|
const sectorAmount = 1;
|
|
const minAngle = 1;
|
|
const maxAngle = 179;
|
|
const speed = 1;
|
|
|
|
const ballX = ball.x;
|
|
const ballY = ball.y;
|
|
const verticalSpeed = ball.verticalSpeed;
|
|
const horizontalSpeed = ball.horizontalSpeed;
|
|
|
|
const result = processReflection(paddle, ball, sectorAmount, minAngle, maxAngle, speed);
|
|
|
|
expect(ball.x).toEqual(ballX);
|
|
expect(ball.y).toEqual(ballY);
|
|
expect(ball.verticalSpeed).toEqual(verticalSpeed);
|
|
expect(ball.horizontalSpeed).toEqual(horizontalSpeed);
|
|
});
|
|
|
|
it('Отражает мяч влево при попадании в левый сектор ракетки', () => {
|
|
const paddle = new Paddle(0, 100, 90, 10);
|
|
const ball = new Ball(5, 99, 1, 5, 0); // левый край, летит вниз
|
|
const sectorAmount = 3;
|
|
const minAngle = 30;
|
|
const maxAngle = 150;
|
|
const speed = 10;
|
|
|
|
processReflection(paddle, ball, sectorAmount, minAngle, maxAngle, speed);
|
|
|
|
expect(ball.horizontalSpeed).toBeLessThan(0);
|
|
expect(ball.verticalSpeed).toBeLessThan(0);
|
|
});
|
|
|
|
it('Отражает мяч вправо при попадании в правый сектор ракетки', () => {
|
|
const paddle = new Paddle(0, 100, 90, 10);
|
|
const ball = new Ball(85, 99, 1, 5, 0);
|
|
const sectorAmount = 3;
|
|
const minAngle = 30;
|
|
const maxAngle = 150;
|
|
const speed = 10;
|
|
|
|
processReflection(paddle, ball, sectorAmount, minAngle, maxAngle, speed);
|
|
|
|
expect(ball.horizontalSpeed).toBeGreaterThan(0);
|
|
expect(ball.verticalSpeed).toBeLessThan(0);
|
|
});
|
|
|
|
it('Отражает мяч вертикально вверх при попадании в центральный сектор', () => {
|
|
const paddle = new Paddle(0, 100, 90, 10);
|
|
const ball = new Ball(45, 99, 1, 5, 0);
|
|
const sectorAmount = 3;
|
|
const minAngle = 30;
|
|
const maxAngle = 150;
|
|
const speed = 10;
|
|
|
|
processReflection(paddle, ball, sectorAmount, minAngle, maxAngle, speed);
|
|
|
|
expect(ball.horizontalSpeed).toBeCloseTo(0);
|
|
expect(ball.verticalSpeed).toBeCloseTo(-speed);
|
|
});
|
|
});
|