85 lines
2.9 KiB
JavaScript
85 lines
2.9 KiB
JavaScript
|
|
const { Train } = require('../js/train.js');
|
||
|
|
const { TrainController } = require('../js/trainController.js');
|
||
|
|
|
||
|
|
describe('Train Module', () => {
|
||
|
|
describe('Train Class', () => {
|
||
|
|
test('should create train with default properties', () => {
|
||
|
|
const train = new Train();
|
||
|
|
expect(train.id).toBeDefined();
|
||
|
|
expect(train.speed).toBe(0);
|
||
|
|
expect(train.maxSpeed).toBeGreaterThan(0);
|
||
|
|
expect(train.position).toBeDefined();
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should initialize with custom properties', () => {
|
||
|
|
const train = new Train({ id: 'TEST', speed: 10, maxSpeed: 20 });
|
||
|
|
expect(train.id).toBe('TEST');
|
||
|
|
expect(train.speed).toBe(10);
|
||
|
|
expect(train.maxSpeed).toBe(20);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should accelerate and brake', () => {
|
||
|
|
const train = new Train({ speed: 0, maxSpeed: 10 });
|
||
|
|
|
||
|
|
train.accelerate();
|
||
|
|
expect(train.speed).toBeGreaterThan(0);
|
||
|
|
|
||
|
|
train.brake();
|
||
|
|
expect(train.speed).toBeLessThan(10);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should not exceed maxSpeed', () => {
|
||
|
|
const train = new Train({ maxSpeed: 10 });
|
||
|
|
|
||
|
|
train.speed = 15;
|
||
|
|
train.accelerate();
|
||
|
|
expect(train.speed).toBeLessThanOrEqual(10);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should reverse direction', () => {
|
||
|
|
const train = new Train({ speed: 10, direction: 1 });
|
||
|
|
|
||
|
|
train.reverse();
|
||
|
|
expect(train.direction).toBe(-1);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('TrainController Class', () => {
|
||
|
|
test('should create controller with default config', () => {
|
||
|
|
const controller = new TrainController();
|
||
|
|
expect(controller.trackPath).toEqual([]);
|
||
|
|
expect(controller.progress).toBe(0);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should accept track path configuration', () => {
|
||
|
|
const path = [
|
||
|
|
{ x: 0, y: 0 },
|
||
|
|
{ x: 10, y: 0 },
|
||
|
|
{ x: 10, y: 10 }
|
||
|
|
];
|
||
|
|
|
||
|
|
const controller = new TrainController(path);
|
||
|
|
expect(controller.trackPath.length).toBe(3);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should calculate progress along track', () => {
|
||
|
|
const path = [{ x: 0, y: 0 }, { x: 10, y: 0 }];
|
||
|
|
const controller = new TrainController(path);
|
||
|
|
|
||
|
|
controller.setDistance(5);
|
||
|
|
expect(controller.progress).toBeGreaterThanOrEqual(0);
|
||
|
|
expect(controller.progress).toBeLessThan(1);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should return current position on track', () => {
|
||
|
|
const path = [{ x: 0, y: 0 }, { x: 10, y: 0 }];
|
||
|
|
const controller = new TrainController(path);
|
||
|
|
|
||
|
|
const position = controller.getCurrentPosition();
|
||
|
|
expect(position).toBeDefined();
|
||
|
|
expect(position.x).toBeGreaterThanOrEqual(0);
|
||
|
|
expect(position.x).toBeLessThanOrEqual(10);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|