feat: Implement intro screen with retro 80s aesthetic and unit tests
Run Tests / test (pull_request) Failing after 40s
Run Tests / test (pull_request) Failing after 40s
This commit is contained in:
@@ -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();
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user