apple2js/test/js/debugger.spec.ts

110 lines
3.8 KiB
TypeScript

import { CPU6502 } from '@whscullin/cpu6502';
import Debugger, { DebuggerContainer } from '../../js/debugger';
import { MemoryPages } from '../../js/types';
import { TestMemory } from '../util/memory';
import { bios } from '../util/bios';
describe('Debugger', () => {
let cpu: CPU6502;
let debuggerContainer: DebuggerContainer;
let theDebugger: Debugger;
let memory: MemoryPages;
beforeEach(() => {
cpu = new CPU6502();
memory = new TestMemory(4);
cpu.addPageHandler(memory);
cpu.addPageHandler(bios);
debuggerContainer = {
run: jest.fn(),
stop: jest.fn(),
isRunning: jest.fn(),
};
theDebugger = new Debugger(cpu, debuggerContainer);
});
describe('#utility', () => {
it('should list without symbols', () => {
const listing = theDebugger.list(0xff00);
expect(listing[0]).toEqual(
'FF00- 00 00 BRK #$00'
);
});
it('should list with symbols', () => {
theDebugger.addSymbols({0x00: 'ZERO', 0xFF00: 'ENTRY'});
const listing = theDebugger.list(0xff00);
expect(listing[0]).toEqual(
'FF00- ENTRY 00 00 BRK #ZERO'
);
});
it('should dump page', () => {
const page = theDebugger.dumpPage(0xff);
expect(page).toContain(
'FF80: 48 45 4C 4C 4F 0D 00 00 00 00 00 00 00 00 00 00 HELLO...........'
);
});
it('should dump registers', () => {
const regs = theDebugger.dumpRegisters();
expect(regs).toEqual(
'A=00 X=00 Y=00 P=20 S=FF --X-----'
);
});
it('should dump the stack,', () => {
const stack = theDebugger.getStack();
const lines = stack.split('\n');
expect(lines).toHaveLength(256);
expect(lines[0]).toMatch('* $01FF 00');
expect(lines[1]).toMatch(' $01FE 00');
expect(lines[254]).toMatch(' $0101 00');
expect(lines[255]).toMatch(' $0100 00');
});
it('should dump the stack with size', () => {
const stack = theDebugger.getStack(32);
const lines = stack.split('\n');
expect(lines).toHaveLength(32);
expect(lines[0]).toMatch('* $01FF 00');
expect(lines[1]).toMatch(' $01FE 00');
expect(lines[30]).toMatch(' $01E1 00');
expect(lines[31]).toMatch(' $01E0 00');
});
it('should dump the stack within size', () => {
const registers = cpu.getState();
registers.sp = 0xE3;
cpu.setState(registers);
const stack = theDebugger.getStack(32);
const lines = stack.split('\n');
expect(lines).toHaveLength(32);
expect(lines[0]).toMatch(' $01FF 00');
expect(lines[1]).toMatch(' $01FE 00');
expect(lines[28]).toMatch('* $01E3 00');
expect(lines[29]).toMatch(' $01E2 00');
expect(lines[30]).toMatch(' $01E1 00');
expect(lines[31]).toMatch(' $01E0 00');
});
it('should dump the stack with size and move the window', () => {
const registers = cpu.getState();
registers.sp = 0xC3;
cpu.setState(registers);
const stack = theDebugger.getStack(32);
const lines = stack.split('\n');
expect(lines).toHaveLength(32);
expect(lines[0]).toMatch(' $01DF 00');
expect(lines[1]).toMatch(' $01DE 00');
expect(lines[28]).toMatch('* $01C3 00');
expect(lines[29]).toMatch(' $01C2 00');
expect(lines[30]).toMatch(' $01C1 00');
expect(lines[31]).toMatch(' $01C0 00');
});
});
});