mirror of
https://github.com/whscullin/apple2js.git
synced 2024-01-12 14:14:38 +00:00
8087294456
* Switch modules to `esnext` to allow `webpack` to see import statements * Pass rom names into Apple2 class * Move ROMs into `system` and `character` directories to allow webpack bundle appropriate ROMs. * Wait for ROMs to load before completing initialization.
259 lines
8.3 KiB
TypeScript
259 lines
8.3 KiB
TypeScript
/** @fileoverview Test for canvas.ts. */
|
|
|
|
import { VideoPage } from 'js/videomodes';
|
|
import { LoresPage2D, HiresPage2D, VideoModes2D } from 'js/canvas';
|
|
import apple2enh_char from 'js/roms/character/apple2enh_char';
|
|
import { createImageFromImageData } from 'test/util/image';
|
|
|
|
function checkImageData(page: VideoPage) {
|
|
page.refresh();
|
|
const img = createImageFromImageData(page.imageData);
|
|
expect(img).toMatchImageSnapshot();
|
|
}
|
|
|
|
describe('canvas', () => {
|
|
|
|
describe('LoresPage', () => {
|
|
let canvas: HTMLCanvasElement;
|
|
let lores1: LoresPage2D;
|
|
let vm: VideoModes2D;
|
|
|
|
beforeEach(() => {
|
|
canvas = document.createElement('canvas');
|
|
vm = new VideoModes2D(canvas, true);
|
|
lores1 = new LoresPage2D(vm, 1, apple2enh_char, true);
|
|
vm.reset();
|
|
vm.hires(false);
|
|
});
|
|
|
|
describe('text mode', () => {
|
|
describe('40 column', () => {
|
|
it('renders', () => {
|
|
for (let page = 0x4; page < 0x8; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
lores1.write(page, off, off);
|
|
}
|
|
}
|
|
|
|
checkImageData(lores1);
|
|
});
|
|
|
|
it('renders alt chars', () => {
|
|
vm.altChar(true);
|
|
for (let page = 0x4; page < 0x8; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
lores1.write(page, off, off);
|
|
}
|
|
}
|
|
|
|
checkImageData(lores1);
|
|
});
|
|
});
|
|
|
|
describe('80 column', () => {
|
|
it('renders', () => {
|
|
vm._80col(true);
|
|
const bank0 = lores1.bank0();
|
|
const bank1 = lores1.bank1();
|
|
for (let page = 0x4; page < 0x8; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
bank0.write(page, off, off);
|
|
bank1.write(page, off, 255 - off);
|
|
}
|
|
}
|
|
|
|
checkImageData(lores1);
|
|
});
|
|
|
|
it('renders alt chars', () => {
|
|
vm.altChar(true);
|
|
vm._80col(true);
|
|
const bank0 = lores1.bank0();
|
|
const bank1 = lores1.bank1();
|
|
for (let page = 0x4; page < 0x8; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
bank0.write(page, off, off);
|
|
bank1.write(page, off, 255 - off);
|
|
}
|
|
}
|
|
|
|
checkImageData(lores1);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('graphics mode', () => {
|
|
describe('lores', () => {
|
|
it('renders', () => {
|
|
vm.text(false);
|
|
for (let page = 0x4; page < 0x8; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
lores1.write(page, off, off);
|
|
}
|
|
}
|
|
|
|
checkImageData(lores1);
|
|
});
|
|
|
|
it('renders mixed', () => {
|
|
vm.text(false);
|
|
vm.mixed(true);
|
|
|
|
for (let page = 0x4; page < 0x8; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
lores1.write(page, off, off);
|
|
}
|
|
}
|
|
|
|
checkImageData(lores1);
|
|
});
|
|
|
|
it('renders mono', () => {
|
|
vm.text(false);
|
|
vm.mono(true);
|
|
|
|
for (let page = 0x4; page < 0x8; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
lores1.write(page, off, off);
|
|
}
|
|
}
|
|
|
|
checkImageData(lores1);
|
|
});
|
|
});
|
|
|
|
describe('double lores', () => {
|
|
it('renders', () => {
|
|
vm.text(false);
|
|
vm._80col(true);
|
|
vm.an3(false);
|
|
|
|
const bank0 = lores1.bank0();
|
|
const bank1 = lores1.bank1();
|
|
for (let page = 0x4; page < 0x8; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
bank0.write(page, off, off);
|
|
bank1.write(page, off, 255 - off);
|
|
}
|
|
}
|
|
|
|
checkImageData(lores1);
|
|
});
|
|
|
|
it('renders mixed', () => {
|
|
vm.text(false);
|
|
vm.mixed(true);
|
|
vm._80col(true);
|
|
vm.an3(false);
|
|
|
|
const bank0 = lores1.bank0();
|
|
const bank1 = lores1.bank1();
|
|
for (let page = 0x4; page < 0x8; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
bank0.write(page, off, off);
|
|
bank1.write(page, off, 255 - off);
|
|
}
|
|
}
|
|
|
|
checkImageData(lores1);
|
|
});
|
|
|
|
it('renders mono', () => {
|
|
vm.text(false);
|
|
vm._80col(true);
|
|
vm.an3(false);
|
|
vm.mono(true);
|
|
|
|
const bank0 = lores1.bank0();
|
|
const bank1 = lores1.bank1();
|
|
for (let page = 0x4; page < 0x8; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
bank0.write(page, off, off);
|
|
bank1.write(page, off, 255 - off);
|
|
}
|
|
}
|
|
|
|
checkImageData(lores1);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('HiresPage', () => {
|
|
let canvas: HTMLCanvasElement;
|
|
let hires1: HiresPage2D;
|
|
let vm: VideoModes2D;
|
|
|
|
beforeEach(() => {
|
|
canvas = document.createElement('canvas');
|
|
vm = new VideoModes2D(canvas, true);
|
|
hires1 = new HiresPage2D(vm, 1);
|
|
vm.reset();
|
|
vm.hires(true);
|
|
});
|
|
|
|
describe('hires', () => {
|
|
it('renders', () => {
|
|
vm.text(false);
|
|
for (let page = 0x20; page < 0x40; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
hires1.write(page, off, off);
|
|
}
|
|
}
|
|
|
|
checkImageData(hires1);
|
|
});
|
|
|
|
it('renders mono', () => {
|
|
vm.text(false);
|
|
vm.mono(true);
|
|
|
|
for (let page = 0x20; page < 0x40; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
hires1.write(page, off, off);
|
|
}
|
|
}
|
|
|
|
checkImageData(hires1);
|
|
});
|
|
});
|
|
|
|
describe('double lores', () => {
|
|
it('renders', () => {
|
|
vm.text(false);
|
|
vm._80col(true);
|
|
vm.an3(false);
|
|
|
|
const bank0 = hires1.bank0();
|
|
const bank1 = hires1.bank1();
|
|
for (let page = 0x20; page < 0x40; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
bank0.write(page, off, off);
|
|
bank1.write(page, off, 255 - off);
|
|
}
|
|
}
|
|
|
|
checkImageData(hires1);
|
|
});
|
|
|
|
it('renders mono', () => {
|
|
vm.text(false);
|
|
vm._80col(true);
|
|
vm.an3(false);
|
|
vm.mono(true);
|
|
|
|
const bank0 = hires1.bank0();
|
|
const bank1 = hires1.bank1();
|
|
for (let page = 0x20; page < 0x40; page++) {
|
|
for (let off = 0; off < 0x100; off++) {
|
|
bank0.write(page, off, off);
|
|
bank1.write(page, off, 255 - off);
|
|
}
|
|
}
|
|
|
|
checkImageData(hires1);
|
|
});
|
|
});
|
|
});
|
|
});
|