|
| 1 | +// Composables |
| 2 | +import { isMaskDelimiter, useMask } from '../mask' |
| 3 | + |
| 4 | +// Types |
| 5 | +import type { MaskProps } from '../mask' |
| 6 | + |
| 7 | +describe('mask', () => { |
| 8 | + it.each([ |
| 9 | + [{ mask: '(#', modelValue: '5' }, '(5'], |
| 10 | + [{ mask: '(#', modelValue: '(' }, '('], |
| 11 | + [{ mask: '(###) #', modelValue: '4567' }, '(456) 7'], |
| 12 | + [{ mask: '#### - #### - #### - ####', modelValue: '444444444' }, '4444 - 4444 - 4'], |
| 13 | + [{ mask: 'A## - ####', modelValue: 'A314444' }, 'A31 - 4444'], |
| 14 | + [{ mask: '## - ##', modelValue: '55' }, '55 - '], |
| 15 | + [{ mask: '## - ##', modelValue: '' }, ''], |
| 16 | + [{ mask: 'Aa', modelValue: 'aa' }, 'Aa'], |
| 17 | + [{ mask: 'aa', modelValue: 'AA' }, 'aa'], |
| 18 | + [{ mask: 'Aa', modelValue: 'A1' }, 'A'], |
| 19 | + [{ mask: 'NnNnNn', modelValue: '12abAB' }, '12AbAb'], |
| 20 | + [{ mask: '#a', modelValue: 'a' }, ''], |
| 21 | + [{ mask: '#)', modelValue: '1' }, '1)'], |
| 22 | + [{ mask: '(###)!!', modelValue: '123' }, '(123)!!'], |
| 23 | + [{ mask: '##.##', modelValue: '1234' }, '12.34'], |
| 24 | + [{ mask: '#', modelValue: null }, ''], |
| 25 | + [{ mask: '\\#(###)', modelValue: '123' }, '#(123)'], |
| 26 | + [{ mask: '\\####', modelValue: '1' }, '#1'], |
| 27 | + [{ mask: '+38(###)', modelValue: '43' }, '+38(43'], |
| 28 | + ])('mask %#', (props, expected) => { |
| 29 | + const { mask } = useMask(props as MaskProps) |
| 30 | + expect(mask(props.modelValue)).toEqual(expected) |
| 31 | + }) |
| 32 | + |
| 33 | + it.each([ |
| 34 | + [{ mask: '(#) (#)', modelValue: ' 5 6 ' }, '(5) (6)'], |
| 35 | + ])('should trim spaces', (props, expected) => { |
| 36 | + const { mask } = useMask(props as MaskProps) |
| 37 | + expect(mask(props.modelValue)).toEqual(expected) |
| 38 | + }) |
| 39 | + |
| 40 | + it.each([ |
| 41 | + [{ mask: '(#', modelValue: '(5' }, '5'], |
| 42 | + [{ mask: '####', modelValue: '1111' }, '1111'], |
| 43 | + [{ mask: '(###)#', modelValue: '(123)4' }, '1234'], |
| 44 | + [{ mask: '(###) #)', modelValue: '(456) 7)' }, '4567'], |
| 45 | + [{ mask: '#### - #### - #', modelValue: '4444 - 4444 - 4' }, '444444444'], |
| 46 | + [{ mask: 'NNN - ####', modelValue: 'A31 - 4444' }, 'A314444'], |
| 47 | + [{ mask: '\\#(###)', modelValue: '#(123)' }, '123'], |
| 48 | + [{ mask: '\\#(###)', modelValue: '123' }, '123'], |
| 49 | + [{ mask: '\\####', modelValue: '#(123)' }, '(123)'], |
| 50 | + [{ mask: '\\####', modelValue: '#1' }, '1'], |
| 51 | + [{ mask: '#-#', modelValue: '2-23' }, '223'], |
| 52 | + [{ mask: '+38(###)', modelValue: '+38(43' }, '43'], |
| 53 | + [{ mask: '+38(###)', modelValue: '43' }, '43'], |
| 54 | + [{ mask: '', modelValue: null }, null], |
| 55 | + ])('unmask %#', (props, expected) => { |
| 56 | + const { unmask } = useMask(props as MaskProps) |
| 57 | + expect(unmask(props.modelValue)).toEqual(expected) |
| 58 | + }) |
| 59 | + |
| 60 | + it.each([ |
| 61 | + ['a', false], |
| 62 | + ['-', true], |
| 63 | + ])('isMaskDelimiter', (input, expected) => { |
| 64 | + expect(isMaskDelimiter(input)).toEqual(expected) |
| 65 | + }) |
| 66 | + |
| 67 | + describe('The test method', () => { |
| 68 | + it.each([ |
| 69 | + [{ mask: '####', text: '1234' }, true], |
| 70 | + [{ mask: '####', text: '123' }, true], |
| 71 | + [{ mask: '####', text: '12345' }, false], |
| 72 | + [{ mask: '##/##/####', text: '12/34/5678' }, true], |
| 73 | + [{ mask: '##/##/####', text: '12345678' }, true], |
| 74 | + [{ mask: '##/##/####', text: '12/34/567' }, true], |
| 75 | + [{ mask: '##/##/####', text: '123456789' }, false], |
| 76 | + [{ mask: '(###) ###-####', text: '(123) 456-7890' }, true], |
| 77 | + [{ mask: '(###) ###-####', text: '1234567890' }, true], |
| 78 | + [{ mask: '(###) ###-####', text: '(123) 456-789' }, true], |
| 79 | + [{ mask: 'A##', text: 'A12' }, true], |
| 80 | + [{ mask: 'A##', text: 'a12' }, false], |
| 81 | + [{ mask: 'A##', text: 'A1' }, true], |
| 82 | + [{ mask: '', text: '' }, false], |
| 83 | + [{ mask: '', text: 'abc' }, true], |
| 84 | + ])('should check if the text is valid for the mask', (props, expected) => { |
| 85 | + const { isValid } = useMask(props as MaskProps) |
| 86 | + expect(isValid(props.text)).toEqual(expected) |
| 87 | + }) |
| 88 | + |
| 89 | + it.each([ |
| 90 | + [{ mask: '####', text: '1234' }, true], |
| 91 | + [{ mask: '####', text: '123' }, false], |
| 92 | + [{ mask: '####', text: '12345' }, false], |
| 93 | + [{ mask: '##/##/####', text: '12/34/5678' }, true], |
| 94 | + [{ mask: '##/##/####', text: '12345678' }, true], |
| 95 | + [{ mask: '##/##/####', text: '12/34/567' }, false], |
| 96 | + [{ mask: '##/##/####', text: '123456789' }, false], |
| 97 | + [{ mask: '(###) ###-####', text: '(123) 456-7890' }, true], |
| 98 | + [{ mask: '(###) ###-####', text: '1234567890' }, true], |
| 99 | + [{ mask: '(###) ###-####', text: '(123) 456-789' }, false], |
| 100 | + [{ mask: 'A##', text: 'A12' }, true], |
| 101 | + [{ mask: 'A##', text: 'a12' }, false], |
| 102 | + [{ mask: 'A##', text: 'A1' }, false], |
| 103 | + [{ mask: '', text: '' }, false], |
| 104 | + [{ mask: '', text: 'abc' }, false], |
| 105 | + ])('should check if the text is complete for the mask', (props, expected) => { |
| 106 | + const { isComplete } = useMask(props as MaskProps) |
| 107 | + expect(isComplete(props.text)).toEqual(expected) |
| 108 | + }) |
| 109 | + |
| 110 | + it('should handle null and undefined text', () => { |
| 111 | + const { isValid } = useMask({ mask: '####' }) |
| 112 | + expect(isValid('')).toBe(false) |
| 113 | + expect(isValid(null as any)).toBe(false) |
| 114 | + expect(isValid(undefined as any)).toBe(false) |
| 115 | + }) |
| 116 | + }) |
| 117 | +}) |
0 commit comments