import { describe, expect, it } from 'vitest'; import { guardCurrency } from './math-guard'; describe('guardCurrency', () => { it('escapes French currency signs', () => { expect(guardCurrency('Recevoir 1 500 $ dans 5 ans équivaut à 1 120,89 $ aujourd’hui.')).toBe( 'Recevoir 1 500 \\$ dans 5 ans équivaut à 1 120,89 \\$ aujourd’hui.', ); }); it('keeps inline math', () => { expect(guardCurrency('La formule $V = V_T + C_N - D$ structure tout.')).toBe('La formule $V = V_T + C_N - D$ structure tout.'); expect(guardCurrency('Donc $D = 80\\,500$ et fini.')).toBe('Donc $D = 80\\,500$ et fini.'); }); it('keeps display math and code untouched', () => { const md = '$$V = 120\\,000 + (322\\,000 - 80\\,500)$$\n\n`prix = 5 $`\n\n```python\nx = "5 $"\n```'; expect(guardCurrency(md)).toBe(md); }); it('escapes an opener left unmatched at a paragraph break', () => { expect(guardCurrency('Coût : 322 000 $\n\nSuite $x$.')).toBe('Coût : 322 000 \\$\n\nSuite $x$.'); // « 5$/m² et 7$/m² » (sans espace) reste ambigu : la règle Pandoc y voit une formule valide. expect(guardCurrency('prix de 5 $/m² et 7 $/m²')).toBe('prix de 5 \\$/m² et 7 \\$/m²'); }); });