import {describe, it, expect} from 'vitest' import {buildBoundedMask} from './maskTemplate' describe('buildBoundedMask', () => { it('borne la dizaine du jour à 0-3 (bloque la saisie de 9 → 99 impossible)', () => { const {mask, tokens} = buildBoundedMask('JJ/MM/AAAA') const dayTens = tokens[mask[0]] expect(dayTens.pattern.test('9')).toBe(false) expect(dayTens.pattern.test('3')).toBe(true) expect(dayTens.pattern.test('0')).toBe(true) }) it('borne la dizaine du mois à 0-1 (bloque 9x)', () => { const {mask, tokens} = buildBoundedMask('JJ/MM/AAAA') const monthTens = tokens[mask[3]] expect(monthTens.pattern.test('9')).toBe(false) expect(monthTens.pattern.test('1')).toBe(true) expect(monthTens.pattern.test('0')).toBe(true) }) it('laisse l’année libre et conserve les séparateurs', () => { const {mask} = buildBoundedMask('JJ/MM/AAAA') expect(mask).toBe('d#/m#/####') }) it('borne l’heure à 0-2 et la minute à 0-5 (datetime), sans confondre minute et mois', () => { const {mask, tokens} = buildBoundedMask('JJ/MM/AAAA HH:MM') expect(mask).toBe('d#/m#/#### h#:n#') const hourTens = tokens[mask[11]] expect(hourTens.pattern.test('2')).toBe(true) expect(hourTens.pattern.test('9')).toBe(false) const minuteTens = tokens[mask[14]] // La minute doit monter jusqu’à 5 — surtout PAS bornée comme un mois (0-1). expect(minuteTens.pattern.test('5')).toBe(true) expect(minuteTens.pattern.test('2')).toBe(true) expect(minuteTens.pattern.test('9')).toBe(false) }) it('ne borne que le premier chiffre de chaque champ (les unités restent 0-9)', () => { const {mask} = buildBoundedMask('JJ/MM/AAAA') // unités jour (index 1) et mois (index 4) = chiffre libre '#' expect(mask[1]).toBe('#') expect(mask[4]).toBe('#') }) })