const { JSDOM } = require('jsdom'); describe('MG.geom utilities', () => { beforeAll(() => { // préparer un window global minimal const dom = new JSDOM(``); global.window = dom.window; global.document = dom.window.document; global.window.MG = global.window.MG || {}; // injecter l'implémentation à tester depuis le fichier source const geomSrc = require('fs').readFileSync(require('path').resolve(__dirname, '../../public/assets/js/core/geom.js'), 'utf8'); // exécuter le code pour qu'il attache window.MG.geom const fn = new Function('window', 'document', geomSrc + '\n return window.MG.geom;'); const geom = fn(global.window, global.document); global.window.MG.geom = geom; }); test('axialToPixel returns expected values for simple coords', () => { const size = 10; const p00 = global.window.MG.geom.axialToPixel(size, 0, 0); expect(p00.x).toBeCloseTo(0); expect(p00.y).toBeCloseTo(0); const p10 = global.window.MG.geom.axialToPixel(size, 1, 0); expect(p10.x).toBeGreaterThan(0); expect(p10.y).toBeCloseTo(0); const p01 = global.window.MG.geom.axialToPixel(size, 0, 1); expect(p01.y).toBeGreaterThan(0); }); test('computeZoom clamps values', () => { expect(global.window.MG.geom.computeZoom(1, 10)).toBeLessThanOrEqual(5); expect(global.window.MG.geom.computeZoom(0.01, 0.01)).toBeGreaterThanOrEqual(0.1); }); test('computePanOffset adds deltas', () => { const off = { x: 5, y: 7 }; const r = global.window.MG.geom.computePanOffset(off, 3, -2); expect(r.x).toBe(8); expect(r.y).toBe(5); }); });