geom.test.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. const { JSDOM } = require('jsdom');
  2. describe('MG.geom utilities', () => {
  3. beforeAll(() => {
  4. // préparer un window global minimal
  5. const dom = new JSDOM(`<!doctype html><html><body></body></html>`);
  6. global.window = dom.window;
  7. global.document = dom.window.document;
  8. global.window.MG = global.window.MG || {};
  9. // injecter l'implémentation à tester depuis le fichier source
  10. const geomSrc = require('fs').readFileSync(require('path').resolve(__dirname, '../../public/assets/js/core/geom.js'), 'utf8');
  11. // exécuter le code pour qu'il attache window.MG.geom
  12. const fn = new Function('window', 'document', geomSrc + '\n return window.MG.geom;');
  13. const geom = fn(global.window, global.document);
  14. global.window.MG.geom = geom;
  15. });
  16. test('axialToPixel returns expected values for simple coords', () => {
  17. const size = 10;
  18. const p00 = global.window.MG.geom.axialToPixel(size, 0, 0);
  19. expect(p00.x).toBeCloseTo(0);
  20. expect(p00.y).toBeCloseTo(0);
  21. const p10 = global.window.MG.geom.axialToPixel(size, 1, 0);
  22. expect(p10.x).toBeGreaterThan(0);
  23. expect(p10.y).toBeCloseTo(0);
  24. const p01 = global.window.MG.geom.axialToPixel(size, 0, 1);
  25. expect(p01.y).toBeGreaterThan(0);
  26. });
  27. test('computeZoom clamps values', () => {
  28. expect(global.window.MG.geom.computeZoom(1, 10)).toBeLessThanOrEqual(5);
  29. expect(global.window.MG.geom.computeZoom(0.01, 0.01)).toBeGreaterThanOrEqual(0.1);
  30. });
  31. test('computePanOffset adds deltas', () => {
  32. const off = { x: 5, y: 7 };
  33. const r = global.window.MG.geom.computePanOffset(off, 3, -2);
  34. expect(r.x).toBe(8);
  35. expect(r.y).toBe(5);
  36. });
  37. });