import test from 'node:test'; import assert from 'node:assert/strict'; import { openness, haze, END } from '../src/engine/risveglio.js'; import { Game } from '../src/engine/game.js'; import { story } from '../src/story/story.js'; import { settle } from './helpers.mjs'; test('il risveglio: gli occhi chiusi, due tentativi che ricascano, poi aperti; la nebbia si dirada', () => { assert.equal(openness(0), 0); assert.ok(openness(2.1) > 0.15 && openness(2.7) < 0.1, 'il primo tentativo ricasca'); assert.ok(openness(3.8) > openness(4.15), 'il secondo pure'); assert.equal(openness(END), 1); assert.equal(haze(0), 1); assert.equal(haze(END), 0); }); test('la partita comincia sulla panchina: le battute a occhi semichiusi, poi i vecchietti col palio sparito', () => { const g = new Game(story); g.go(story.start.scene, story.start.at, story.start.face); g.update(0); assert.equal(g.closeup?.id, 'risveglio'); const said = []; for (let i = 0; i < 2000 && (g.closeup || g.speech || g.queue.length); i++) { if (g.speech) { said.push([g.speech.who, g.closeup ? openness(g.closeup.t) : 1]); g.skip(); } g.update(0.05); } assert.deepEqual(said.slice(0, 3).map(s => s[0]), ['andrea', 'andrea', 'andrea']); assert.ok(said[0][1] < 0.05, 'la prima battuta a occhi chiusi'); assert.ok(said.some(([who]) => who === 'vecchietto'), 'il vecchietto dà la notizia'); assert.ok(g.state.flags.intro && !g.closeup); // Rientrando in piazza non si risveglia più. g.go('via_cipriani'); settle(g); g.go('piazza'); g.update(0); assert.equal(g.closeup, null); }); test('saltando il risveglio (Esc) le battute arrivano lo stesso', () => { const g = new Game(story); g.go(story.start.scene, story.start.at); g.update(0); assert.ok(g.closeupClose()); const said = settle(g).map(s => s.text); assert.ok(said.includes('Mmmh... che botta.') && said.some(t => t.includes('Il palio è sparito'))); });