feat: Implement intro screen with retro 80s aesthetic and unit tests
Run Tests / test (pull_request) Failing after 40s

This commit is contained in:
User
2026-03-22 13:21:20 +00:00
parent cc22cf4301
commit 1626989bd7
4 changed files with 250 additions and 0 deletions
+85
View File
@@ -0,0 +1,85 @@
const IntroScreen = require('../../src/js/screens/intro');
describe('IntroScreen', () => {
let introScreen;
beforeEach(() => {
introScreen = new IntroScreen();
});
describe('constructor', () => {
it('should initialize with correct default values', () => {
expect(introScreen.title).toBe('WINGS88');
expect(introScreen.credits).toBe('A RetroWeb Games Production');
expect(introScreen.instructions).toBe('Use arrow keys to fly\nPress SPACE to start');
expect(introScreen.options).toEqual(['Start Game', 'Instructions', 'Quit']);
expect(introScreen.selectedOption).toBe(0);
expect(introScreen.audioContext).toBeNull();
expect(introScreen.musicTrack).toBeNull();
});
});
describe('moveSelection', () => {
it('should move selection up', () => {
introScreen.selectedOption = 1;
// Mock render to prevent DOM access
introScreen.render = jest.fn();
introScreen.moveSelection(-1);
expect(introScreen.selectedOption).toBe(0);
expect(introScreen.render).toHaveBeenCalled();
});
it('should move selection down', () => {
introScreen.selectedOption = 0;
// Mock render to prevent DOM access
introScreen.render = jest.fn();
introScreen.moveSelection(1);
expect(introScreen.selectedOption).toBe(1);
expect(introScreen.render).toHaveBeenCalled();
});
it('should wrap around from last to first', () => {
introScreen.selectedOption = 2;
// Mock render to prevent DOM access
introScreen.render = jest.fn();
introScreen.moveSelection(1);
expect(introScreen.selectedOption).toBe(0);
expect(introScreen.render).toHaveBeenCalled();
});
it('should wrap around from first to last', () => {
introScreen.selectedOption = 0;
// Mock render to prevent DOM access
introScreen.render = jest.fn();
introScreen.moveSelection(-1);
expect(introScreen.selectedOption).toBe(2);
expect(introScreen.render).toHaveBeenCalled();
});
});
describe('selectOption', () => {
it('should handle Start Game selection', () => {
introScreen.selectedOption = 0;
const logSpy = jest.spyOn(console, 'log');
introScreen.selectOption();
expect(logSpy).toHaveBeenCalledWith('Starting game...');
logSpy.mockRestore();
});
it('should handle Instructions selection', () => {
introScreen.selectedOption = 1;
const logSpy = jest.spyOn(console, 'log');
introScreen.selectOption();
expect(logSpy).toHaveBeenCalledWith('Showing instructions...');
logSpy.mockRestore();
});
it('should handle Quit selection', () => {
introScreen.selectedOption = 2;
const logSpy = jest.spyOn(console, 'log');
introScreen.selectOption();
expect(logSpy).toHaveBeenCalledWith('Quitting game...');
logSpy.mockRestore();
});
});
});