a574100e25
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { opponentStartPosition, deserializePhantoms } from '../src/phantoms.js';
|
|
|
|
describe('opponentStartPosition', () => {
|
|
it('seeds 16 black pieces on ranks 7-8', () => {
|
|
const p = opponentStartPosition('b');
|
|
expect(Object.keys(p).length).toBe(16);
|
|
expect(p.e8).toEqual({ color: 'b', type: 'k' });
|
|
expect(p.d8).toEqual({ color: 'b', type: 'q' });
|
|
expect(p.a8).toEqual({ color: 'b', type: 'r' });
|
|
expect(p.h7).toEqual({ color: 'b', type: 'p' });
|
|
});
|
|
|
|
it('seeds 16 white pieces on ranks 1-2', () => {
|
|
const p = opponentStartPosition('w');
|
|
expect(Object.keys(p).length).toBe(16);
|
|
expect(p.e1).toEqual({ color: 'w', type: 'k' });
|
|
expect(p.a2).toEqual({ color: 'w', type: 'p' });
|
|
});
|
|
});
|
|
|
|
describe('deserializePhantoms', () => {
|
|
it('returns {} for null or invalid JSON', () => {
|
|
expect(deserializePhantoms(null)).toEqual({});
|
|
expect(deserializePhantoms('not json')).toEqual({});
|
|
expect(deserializePhantoms('[]')).toEqual({});
|
|
});
|
|
|
|
it('keeps valid entries and drops invalid ones', () => {
|
|
const raw = JSON.stringify({
|
|
e5: { color: 'b', type: 'n' },
|
|
zz: { color: 'b', type: 'p' }, // invalid square
|
|
a1: { color: 'x', type: 'p' }, // invalid colour
|
|
b2: { color: 'b', type: 'z' }, // invalid type
|
|
});
|
|
expect(deserializePhantoms(raw)).toEqual({ e5: { color: 'b', type: 'n' } });
|
|
});
|
|
});
|