Files
HexTrails/tests/tap-queue.test.js
T

23 lines
1.2 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { TapQueue } from '../src/tap-queue.js';
import { Game, available } from '../src/core.js';
import { LEVELS } from '../src/levels.js';
test('rapid taps retain order, ignore duplicate/active pieces, and discard stale IDs',()=>{
const queue=new TapQueue();
assert.equal(queue.add('a','a'),false);
queue.add('b');queue.add('gone');queue.add('c');assert.equal(queue.add('b'),false);
const tiles=[{id:'c'},{id:'b'}];
assert.equal(queue.take(tiles).id,'b');assert.equal(queue.take(tiles).id,'c');assert.equal(queue.take(tiles),null);
queue.add('b');queue.clear();assert.equal(queue.take(tiles),null);
});
test('buffered removals are evaluated in order against the updated game, with undo intact',()=>{
const game=new Game(LEVELS[0]),queue=new TapQueue();
const free=available(game.level,game.tiles).slice(0,3);assert.ok(free.length>=2);
for(const tile of free)queue.add(tile.id);
const start=game.moves;
while(queue.ids.length){const tile=queue.take(game.tiles);assert.equal(game.tap(tile.id).status,'exit');}
assert.equal(game.moves,start-free.length);
assert.ok(game.undo());assert.equal(game.moves,start-free.length+1);
});