You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
3.6 KiB
159 lines
3.6 KiB
import createTextMaskInputElement from '../../core/src/createTextMaskInputElement'
|
|
|
|
const emailMask = (isVerify()) ?
|
|
require('../dist/emailMask.js').default :
|
|
require('../src/emailMask.js').default
|
|
|
|
describe('emailMask', () => {
|
|
let inputElement
|
|
let textMaskInputElement
|
|
|
|
beforeEach(() => {
|
|
inputElement = document.createElement('input')
|
|
textMaskInputElement = createTextMaskInputElement({inputElement, mask: emailMask})
|
|
})
|
|
|
|
it('masks initial input as follows `a@ .`', () => {
|
|
input('a', 1)
|
|
expectResults('a@ .', 1)
|
|
})
|
|
|
|
it('allows a dot at the end of the local part', () => {
|
|
input('a', 1)
|
|
expectResults('a@ .', 1)
|
|
|
|
input('a.@ .', 2)
|
|
expectResults('a.@ .', 2)
|
|
})
|
|
|
|
it('moves the caret to after the @ symbol when user enters an @ symbol where the current @ symbol is', () => {
|
|
input('a', 1)
|
|
expectResults('a@ .', 1)
|
|
|
|
input('a@@ .', 2)
|
|
expectResults('a@.', 2)
|
|
})
|
|
|
|
it('moves the caret to after the TLD dot when user enters a dot where the current TLD dot is', () => {
|
|
input('a@a.com', 7)
|
|
expectResults('a@a.com', 7)
|
|
|
|
input('a@a..com', 4)
|
|
expectResults('a@a.com', 4)
|
|
})
|
|
|
|
it('limits the number of @ symbols in input to 1', () => {
|
|
input('a@a.com', 7)
|
|
expectResults('a@a.com', 7)
|
|
input('@a@a.com', 1)
|
|
expectResults('@aa.com', 1)
|
|
|
|
input('a@a.com', 7)
|
|
expectResults('a@a.com', 7)
|
|
input('a@a@.com', 4)
|
|
expectResults('a@a.com', 3)
|
|
|
|
input('a@a.com', 7)
|
|
expectResults('a@a.com', 7)
|
|
input('a@a.co@m', 7)
|
|
expectResults('a@a.com', 6)
|
|
})
|
|
|
|
it('does not add a placeholder in the end when user types a dot after the TLD dot when there is no TLD', () => {
|
|
input('a@a.', 4)
|
|
expectResults('a@a.', 4)
|
|
|
|
input('a@a..', 5)
|
|
expectResults('a@a.', 4)
|
|
})
|
|
|
|
it('removes the dot in the end if the domain part already contains a dot', () => {
|
|
input('a@acom.', 7)
|
|
expectResults('a@acom.', 7)
|
|
|
|
input('a@a.com.', 4)
|
|
expectResults('a@a.com', 4)
|
|
})
|
|
|
|
it('prevents two consecutive dots', () => {
|
|
input('a@a.a.com', 9)
|
|
expectResults('a@a.a.com', 9)
|
|
|
|
input('a@a..a.com', 5)
|
|
expectResults('a@a.a.com', 4)
|
|
})
|
|
|
|
it('just moves the caret over when user enters a dot before the TLD dot', () => {
|
|
input('a@a.com', 7)
|
|
expectResults('a@a.com', 7)
|
|
|
|
input('a@a..com', 4)
|
|
expectResults('a@a.com', 4)
|
|
})
|
|
|
|
it('works as expected', () => {
|
|
input('a', 1)
|
|
expectResults('a@ .', 1)
|
|
|
|
input('@ .', 0)
|
|
expectResults('', 0)
|
|
|
|
input('a', 1)
|
|
expectResults('a@ .', 1)
|
|
|
|
input('a@@ .', 2)
|
|
expectResults('a@.', 2)
|
|
|
|
input('a@f_.', 3)
|
|
expectResults('a@f.', 3)
|
|
|
|
input('af.', 1)
|
|
expectResults('a@f.', 1)
|
|
|
|
input('a.@f.', 2)
|
|
expectResults('a.@f.', 2)
|
|
|
|
input('m', 1)
|
|
expectResults('m@ .', 1)
|
|
|
|
input('m@k .', 3)
|
|
expectResults('m@k.', 3)
|
|
|
|
input('m@.k.', 3)
|
|
expectResults('m@k.', 2)
|
|
|
|
input('m@k', 3)
|
|
expectResults('m@k.', 3)
|
|
|
|
input('m@k..', 5)
|
|
expectResults('m@k.', 4)
|
|
|
|
input('m@k.s', 5)
|
|
expectResults('m@k.s', 5)
|
|
|
|
input('m@ks', 3)
|
|
expectResults('m@ks.', 3)
|
|
|
|
input('m@ks.a', 6)
|
|
expectResults('m@ks.a', 6)
|
|
|
|
input('m.@ks.a', 2)
|
|
expectResults('m.@ks.a', 2)
|
|
|
|
input('m.o@ks.a', 3)
|
|
expectResults('m.o@ks.a', 3)
|
|
})
|
|
|
|
function input(rawValue, currentCaretPosition) {
|
|
inputElement.focus()
|
|
inputElement.value = rawValue
|
|
inputElement.selectionStart = currentCaretPosition
|
|
textMaskInputElement.update()
|
|
}
|
|
|
|
function expectResults(conformedValue, adjustedCaretPosition) {
|
|
expect(inputElement.value).to.equal(conformedValue)
|
|
expect(inputElement.selectionStart).to.equal(adjustedCaretPosition)
|
|
}
|
|
})
|