47e1e64b8c
- Added Train and TrainController classes in train.js - Created TrainRenderer for Three.js visualization - Integrated train controls into game.js - Updated index.html with train UI controls - Added train control styles to css/styles.css - Created test file for train module - Train can accelerate, brake, reverse and stop - Keyboard controls: W/↑ accelerate, S/↓ brake, R/D reverse, SPACE stop
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);
|
|
});
|
|
});
|
|
});
|