import test from 'node:test'; import assert from 'node:assert/strict'; import { story } from '../src/story/story.js'; import { Game } from '../src/engine/game.js'; import { Command } from '../src/engine/command.js'; import { settle } from './helpers.mjs'; const center = h => [h.box[0] + h.box[2] / 2, h.box[1] + h.box[3] / 2]; const setup = () => { const g = new Game(story); return { g, c: new Command(g), at: id => center(g.hotspot(id)) }; }; test('clic intelligente: parla con le persone, guarda le cose, attraversa le uscite', () => { const { g, c, at } = setup(); assert.equal(c.sentence('vecchietti'), 'Parla con vecchietti'); assert.equal(c.sentence('manifesto'), 'Guarda manifesto del Palio'); assert.equal(c.sentence('vicolo'), 'Vai a vicolo verso la Fortezza'); assert.equal(c.clickScene(at('vecchietti')), 'act'); settle(g); assert.equal(g.dialogue?.id, 'vecchietti'); }); test('verbo scelto, poi bersaglio; il verbo si azzera dopo il comando', () => { const { g, c, at } = setup(); c.pickVerb('take'); assert.equal(c.sentence(), 'Prendi…'); assert.equal(c.sentence('colonna'), 'Prendi colonna'); c.clickScene(at('colonna')); assert.equal(c.verb, null); assert.match(settle(g)[0].text, /come la chiamano/); }); test('pressione lunga o clic destro guarda', () => { const { g, c, at } = setup(); c.clickScene(at('vecchietti'), { look: true }); assert.match(settle(g)[0].text, /panchina/); assert.equal(g.dialogue, null); }); test('un clic sul vuoto cammina; un clic mentre si parla salta la battuta', () => { const { g, c } = setup(); assert.equal(c.clickScene([300, 330]), 'walk'); settle(g); assert.deepEqual([g.state.x, g.state.y], [300, 330]); g.queue.push({ say: 'Una battuta lunga.' }); g.update(0.01); assert.equal(c.clickScene([10, 330]), 'skip'); assert.equal(g.speech, null); }); test('oggetto dell\'inventario: usa con, dai a, guarda', () => { const { g, c, at } = setup(); g.state.inventory.push('squama'); assert.equal(c.clickItem('squama'), 'select'); assert.equal(c.sentence('vecchietti'), 'Usa squama con vecchietti'); c.reset(); c.pickVerb('give'); c.clickItem('squama'); assert.equal(c.sentence('vecchietti'), 'Dai squama a vecchietti'); c.clickScene(at('vecchietti')); assert.deepEqual(settle(g).map(s => s.who), ['andrea', 'vecchioA', 'vecchioB', 'andrea']); assert.deepEqual(g.state.inventory, ['squama'], 'nessun vicolo cieco: la squama resta'); c.clickItem('squama', { look: true }); assert.match(settle(g)[0].text, /cantina/); });