Python 64.6%
TypeScript 33.7%
CSS 0.8%
1import { describe, expect, it } from 'vitest';2import { guardCurrency } from './math-guard';34describe('guardCurrency', () => {5 it('escapes French currency signs', () => {6 expect(guardCurrency('Recevoir 1 500 $ dans 5 ans équivaut à 1 120,89 $ aujourd’hui.')).toBe(7 'Recevoir 1 500 \\$ dans 5 ans équivaut à 1 120,89 \\$ aujourd’hui.',8 );9 });10 it('keeps inline math', () => {11 expect(guardCurrency('La formule $V = V_T + C_N - D$ structure tout.')).toBe('La formule $V = V_T + C_N - D$ structure tout.');12 expect(guardCurrency('Donc $D = 80\\,500$ et fini.')).toBe('Donc $D = 80\\,500$ et fini.');13 });14 it('keeps display math and code untouched', () => {15 const md = '$$V = 120\\,000 + (322\\,000 - 80\\,500)$$\n\n`prix = 5 $`\n\n```python\nx = "5 $"\n```';16 expect(guardCurrency(md)).toBe(md);17 });18 it('escapes an opener left unmatched at a paragraph break', () => {19 expect(guardCurrency('Coût : 322 000 $\n\nSuite $x$.')).toBe('Coût : 322 000 \\$\n\nSuite $x$.');20 // « 5$/m² et 7$/m² » (sans espace) reste ambigu : la règle Pandoc y voit une formule valide.21 expect(guardCurrency('prix de 5 $/m² et 7 $/m²')).toBe('prix de 5 \\$/m² et 7 \\$/m²');22 });23});24