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); }); }); });