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.
614 lines
23 KiB
614 lines
23 KiB
3 years ago
|
import React from 'react'
|
||
|
import ReactTestUtils from 'react-addons-test-utils'
|
||
|
import packageJson from '../package.json'
|
||
|
|
||
|
const ReactTextMask = (isVerify()) ?
|
||
|
require(`../${packageJson.main}`) :
|
||
|
require('../src/reactTextMask.js')
|
||
|
|
||
|
const MaskedInput = ReactTextMask.default
|
||
|
const conformToMask = ReactTextMask.conformToMask
|
||
|
|
||
|
const emailMask = (isVerify()) ?
|
||
|
require('../../addons/dist/emailMask.js').default :
|
||
|
require('../../addons/src/emailMask.js').default
|
||
|
|
||
|
describe('MaskedInput', () => {
|
||
|
it('does not throw when instantiated', () => {
|
||
|
expect(() => ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={true}/>
|
||
|
)).not.to.throw()
|
||
|
})
|
||
|
|
||
|
it('renders a single input element', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={true}/>
|
||
|
)
|
||
|
|
||
|
expect(
|
||
|
() => ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
).not.to.throw()
|
||
|
})
|
||
|
|
||
|
it('renders correctly with an undefined value', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={true}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
expect(renderedDOMComponent.value).to.equal('')
|
||
|
})
|
||
|
|
||
|
it('renders correctly with an initial value', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
value='123'
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={true}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
expect(renderedDOMComponent.value).to.equal('(123) ___-____')
|
||
|
})
|
||
|
|
||
|
it('renders mask instead of empty string when showMask is true', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
showMask={true}
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={true}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
expect(renderedDOMComponent.value).to.equal('(___) ___-____')
|
||
|
})
|
||
|
|
||
|
it('does not render mask instead of empty string when showMask is false', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
showMask={false}
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={true}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
expect(renderedDOMComponent.value).to.equal('')
|
||
|
})
|
||
|
|
||
|
it('calls createTextMaskInputElement with the correct config', () => {
|
||
|
const mask = ['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]
|
||
|
const guide = true
|
||
|
const placeholderChar = '*'
|
||
|
const keepCharPositions = true
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
mask={mask}
|
||
|
guide={guide}
|
||
|
placeholderChar={placeholderChar}
|
||
|
keepCharPositions={keepCharPositions}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
|
||
|
// stub the createTextMaskInputElement method
|
||
|
maskedInput.createTextMaskInputElement = (config) => {
|
||
|
expect(typeof config).to.equal('object')
|
||
|
expect(config.inputElement).to.equal(renderedDOMComponent)
|
||
|
expect(config.mask).to.equal(mask)
|
||
|
expect(config.guide).to.equal(guide)
|
||
|
expect(config.placeholderChar).to.equal(placeholderChar)
|
||
|
expect(config.keepCharPositions).to.equal(keepCharPositions)
|
||
|
return {
|
||
|
update() {}
|
||
|
}
|
||
|
}
|
||
|
maskedInput.initTextMask()
|
||
|
})
|
||
|
|
||
|
it('sets textMaskInputElement and calls textMaskInputElement.update with the correct value', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
value='123'
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
/>
|
||
|
)
|
||
|
|
||
|
// stub the createTextMaskInputElement method
|
||
|
maskedInput.createTextMaskInputElement = () => {
|
||
|
return {
|
||
|
update(value) {
|
||
|
expect(value).to.equal('123')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
maskedInput.initTextMask()
|
||
|
expect(typeof maskedInput.textMaskInputElement).to.equal('object')
|
||
|
})
|
||
|
|
||
|
it('initializes textMaskInputElement property', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={true}/>
|
||
|
)
|
||
|
expect(typeof maskedInput.textMaskInputElement).to.equal('object')
|
||
|
expect(typeof maskedInput.textMaskInputElement.state).to.equal('object')
|
||
|
expect(typeof maskedInput.textMaskInputElement.state.previousConformedValue).to.equal('string')
|
||
|
expect(typeof maskedInput.textMaskInputElement.update).to.equal('function')
|
||
|
})
|
||
|
|
||
|
it('does not render masked characters', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
value='abc'
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={true}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
expect(renderedDOMComponent.value).to.equal('')
|
||
|
})
|
||
|
|
||
|
it('does not allow masked characters', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={true}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
|
||
|
expect(renderedDOMComponent.value).to.equal('')
|
||
|
maskedInput.textMaskInputElement.update('abc')
|
||
|
expect(renderedDOMComponent.value).to.equal('')
|
||
|
})
|
||
|
|
||
|
it('can be disabled by setting the mask to false', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
value='123abc'
|
||
|
mask={false}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
expect(renderedDOMComponent.value).to.equal('123abc')
|
||
|
})
|
||
|
|
||
|
it('can call textMaskInputElement.update to update the inputElement.value', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
|
||
|
expect(renderedDOMComponent.value).to.equal('')
|
||
|
|
||
|
renderedDOMComponent.value = '12345'
|
||
|
maskedInput.textMaskInputElement.update()
|
||
|
expect(renderedDOMComponent.value).to.equal('(123) 45_-____')
|
||
|
})
|
||
|
|
||
|
it('can pass value to textMaskInputElement.update method', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
value='123'
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
|
||
|
expect(renderedDOMComponent.value).to.equal('(123) ___-____')
|
||
|
maskedInput.textMaskInputElement.update('1234')
|
||
|
expect(renderedDOMComponent.value).to.equal('(123) 4__-____')
|
||
|
})
|
||
|
|
||
|
it('can pass textMaskConfig to textMaskInputElement.update method', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
value='123'
|
||
|
mask={false}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
|
||
|
expect(renderedDOMComponent.value).to.equal('123')
|
||
|
|
||
|
maskedInput.textMaskInputElement.update('1234', {
|
||
|
inputElement: renderedDOMComponent,
|
||
|
mask: ['(', /[1-9]/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]
|
||
|
})
|
||
|
expect(renderedDOMComponent.value).to.equal('(123) 4__-____')
|
||
|
})
|
||
|
|
||
|
it('accepts function as mask property', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
value='1234'
|
||
|
mask={(value) => {
|
||
|
expect(value).to.equal('1234')
|
||
|
return ['(', /[1-9]/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]
|
||
|
}}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
expect(renderedDOMComponent.value).to.equal('(123) 4__-____')
|
||
|
})
|
||
|
|
||
|
it('accepts object as mask property', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
value='abc'
|
||
|
mask={emailMask}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
expect(renderedDOMComponent.value).to.equal('abc@ .')
|
||
|
})
|
||
|
|
||
|
it('accepts pipe function', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
value='1234'
|
||
|
mask={['(', /[1-9]/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
pipe={(value) => {
|
||
|
expect(value).to.equal('(123) 4__-____')
|
||
|
return 'abc'
|
||
|
}}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
expect(renderedDOMComponent.value).to.equal('abc')
|
||
|
})
|
||
|
|
||
|
it('calls textMaskInputElement.update and props.onChange when a change event is received', () => {
|
||
|
const onChangeSpy = sinon.spy((event) => {
|
||
|
expect(event.target.value).to.equal('123')
|
||
|
})
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
value='123'
|
||
|
onChange={onChangeSpy}
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={true}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
maskedInput.textMaskInputElement.update = sinon.spy(() => {})
|
||
|
ReactTestUtils.Simulate.change(renderedDOMComponent, {target: {value: '123'}})
|
||
|
expect(onChangeSpy.callCount).to.equal(1)
|
||
|
expect(maskedInput.textMaskInputElement.update.callCount).to.equal(1)
|
||
|
})
|
||
|
|
||
|
it('calls props.onBlur when a change event is received', () => {
|
||
|
const onBlurSpy = sinon.spy((event) => {
|
||
|
expect(event.target.value).to.equal('(123) ___-____')
|
||
|
})
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
value='123'
|
||
|
onBlur={onBlurSpy}
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={true}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
ReactTestUtils.Simulate.blur(renderedDOMComponent)
|
||
|
expect(onBlurSpy.callCount).to.equal(1)
|
||
|
})
|
||
|
|
||
|
it('calls textMaskInputElement.update when an input event is received when props.onChange is not set', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
value='123'
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={true}/>
|
||
|
)
|
||
|
const renderedDOMComponent = ReactTestUtils.findRenderedDOMComponentWithTag(maskedInput, 'input')
|
||
|
maskedInput.textMaskInputElement.update = sinon.spy(() => {})
|
||
|
|
||
|
ReactTestUtils.Simulate.change(renderedDOMComponent, {target: {value: '456'}})
|
||
|
expect(maskedInput.textMaskInputElement.update.callCount).to.equal(1)
|
||
|
})
|
||
|
|
||
|
it('calls textMaskInputElement.update via onChange method', () => {
|
||
|
const maskedInput = ReactTestUtils.renderIntoDocument(
|
||
|
<MaskedInput
|
||
|
value='123'
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={true}/>
|
||
|
)
|
||
|
maskedInput.textMaskInputElement.update = sinon.spy(() => {})
|
||
|
maskedInput.onChange()
|
||
|
expect(maskedInput.textMaskInputElement.update.callCount).to.equal(1)
|
||
|
})
|
||
|
|
||
|
// test fix for issues #230, #483, #778 etc.
|
||
|
it('works correct in stateful Component', () => {
|
||
|
class StatefulComponent extends React.Component {
|
||
|
constructor(...args) {
|
||
|
super(...args)
|
||
|
|
||
|
this.state = {value: '1234'}
|
||
|
this.onChange = this.onChange.bind(this)
|
||
|
}
|
||
|
|
||
|
onChange(e) {
|
||
|
this.setState({value: e.target.value})
|
||
|
}
|
||
|
|
||
|
render() {
|
||
|
return <MaskedInput
|
||
|
onChange={this.onChange}
|
||
|
value={this.state.value}
|
||
|
mask={['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
|
||
|
guide={false}/>
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const statefulComponent = ReactTestUtils.renderIntoDocument(
|
||
|
<StatefulComponent/>
|
||
|
)
|
||
|
const renderedDOMInput = ReactTestUtils.findRenderedDOMComponentWithTag(statefulComponent, 'input')
|
||
|
|
||
|
// Initial value "1234" from StatefulComponent is masked correct
|
||
|
expect(renderedDOMInput.value).to.equal('(123) 4')
|
||
|
|
||
|
// Simulate deleting last char "4" from input
|
||
|
renderedDOMInput.value = '(123'
|
||
|
|
||
|
// Simulate onChange event with current value "(123"
|
||
|
ReactTestUtils.Simulate.change(renderedDOMInput, {target: {value: '(123'}})
|
||
|
|
||
|
// Now we expect to see value "(123" instead of "(123) "
|
||
|
expect(renderedDOMInput.value).to.equal('(123')
|
||
|
})
|
||
|
})
|
||
|
|
||
|
// Test for issue #806
|
||
|
describe('MaskedInput as controlled component', () => {
|
||
|
class StatefulComponent extends React.Component {
|
||
|
constructor(...args) {
|
||
|
super(...args)
|
||
|
|
||
|
this.state = {
|
||
|
value: '',
|
||
|
mask: ['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/],
|
||
|
guide: false,
|
||
|
placeholderChar: '_',
|
||
|
showMask: false,
|
||
|
pipe: undefined
|
||
|
}
|
||
|
|
||
|
this.onChange = this.onChange.bind(this)
|
||
|
this.onMaskArray = this.onMaskArray.bind(this)
|
||
|
this.onMaskFunction = this.onMaskFunction.bind(this)
|
||
|
this.onGuideOn = this.onGuideOn.bind(this)
|
||
|
this.onPlaceholderChar = this.onPlaceholderChar.bind(this)
|
||
|
this.onShowMaskOn = this.onShowMaskOn.bind(this)
|
||
|
this.onPipeOn = this.onPipeOn.bind(this)
|
||
|
this.onPipeOff = this.onPipeOff.bind(this)
|
||
|
this.onPipeAnother = this.onPipeAnother.bind(this)
|
||
|
}
|
||
|
|
||
|
onChange(e) {
|
||
|
this.setState({value: e.target.value})
|
||
|
}
|
||
|
|
||
|
onMaskArray() {
|
||
|
this.setState({mask: ['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/]})
|
||
|
}
|
||
|
|
||
|
onMaskFunction() {
|
||
|
this.setState({mask: () => [/\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]})
|
||
|
}
|
||
|
|
||
|
onGuideOn() {
|
||
|
this.setState({guide: true})
|
||
|
}
|
||
|
|
||
|
onPlaceholderChar() {
|
||
|
this.setState({placeholderChar: '*'})
|
||
|
}
|
||
|
|
||
|
onShowMaskOn() {
|
||
|
this.setState({
|
||
|
guide: undefined,
|
||
|
showMask: true
|
||
|
})
|
||
|
}
|
||
|
|
||
|
onPipeOn() {
|
||
|
this.setState({
|
||
|
pipe: (conformedValue) => ({value: `Tel. ${conformedValue}`, indexesOfPipedChars: [0, 1, 2, 3, 4]})
|
||
|
})
|
||
|
}
|
||
|
|
||
|
onPipeOff() {
|
||
|
this.setState({
|
||
|
pipe: undefined
|
||
|
})
|
||
|
}
|
||
|
|
||
|
onPipeAnother() {
|
||
|
this.setState({
|
||
|
pipe: (conformedValue) => ({value: `Tel: ${conformedValue}`, indexesOfPipedChars: [0, 1, 2, 3, 4]})
|
||
|
})
|
||
|
}
|
||
|
|
||
|
render() {
|
||
|
return (
|
||
|
<div>
|
||
|
<input onChange={this.onChange} value={this.state.value} className={'user-input'}/>
|
||
|
<MaskedInput
|
||
|
value={this.state.value}
|
||
|
mask={this.state.mask}
|
||
|
guide={this.state.guide}
|
||
|
placeholderChar={this.state.placeholderChar}
|
||
|
showMask={this.state.showMask}
|
||
|
pipe={this.state.pipe}
|
||
|
className={'masked-input'}
|
||
|
/>
|
||
|
<button className='mask-array-button' onClick={this.onMaskArray}>Change mask array</button>
|
||
|
<button className='mask-function-button' onClick={this.onMaskFunction}>Change mask function</button>
|
||
|
<button className='guide-on-button' onClick={this.onGuideOn}>Guide On</button>
|
||
|
<button className='placeholderChar-button' onClick={this.onPlaceholderChar}>
|
||
|
Change placeholderChar
|
||
|
</button>
|
||
|
<button className='showMask-on-button' onClick={this.onShowMaskOn}>ShowMask On</button>
|
||
|
<button className='pipe-on-button' onClick={this.onPipeOn}>Pipe On</button>
|
||
|
<button className='pipe-off-button' onClick={this.onPipeOff}>Pipe Off</button>
|
||
|
<button className='pipe-another-button' onClick={this.onPipeAnother}>Pipe Another</button>
|
||
|
</div>
|
||
|
)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
it('works if value prop was changed', () => {
|
||
|
const statefulComponent = ReactTestUtils.renderIntoDocument(
|
||
|
<StatefulComponent/>
|
||
|
)
|
||
|
|
||
|
// Find inputs
|
||
|
const renderedDOMUserInput = ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'user-input')
|
||
|
const renderedDOMMaskedInput = ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'masked-input')
|
||
|
|
||
|
// Check value changing
|
||
|
ReactTestUtils.Simulate.change(renderedDOMUserInput, {target: {value: '123'}})
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('(123) ')
|
||
|
ReactTestUtils.Simulate.change(renderedDOMUserInput, {target: {value: '12345678901234567890'}})
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('(123) 456-7890')
|
||
|
ReactTestUtils.Simulate.change(renderedDOMUserInput, {target: {value: ''}})
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('')
|
||
|
})
|
||
|
|
||
|
it('works if showMask prop was changed', () => {
|
||
|
const statefulComponent = ReactTestUtils.renderIntoDocument(
|
||
|
<StatefulComponent/>
|
||
|
)
|
||
|
|
||
|
// Find inputs
|
||
|
const renderedDOMMaskedInput = ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'masked-input')
|
||
|
|
||
|
// Find buttons
|
||
|
const renderedDOMButtonShowMaskOn =
|
||
|
ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'showMask-on-button')
|
||
|
|
||
|
// Check showMask changing
|
||
|
ReactTestUtils.Simulate.click(renderedDOMButtonShowMaskOn)
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('(___) ___-____')
|
||
|
})
|
||
|
|
||
|
it('works if guide prop was changed', () => {
|
||
|
const statefulComponent = ReactTestUtils.renderIntoDocument(
|
||
|
<StatefulComponent/>
|
||
|
)
|
||
|
|
||
|
// Find inputs
|
||
|
const renderedDOMUserInput = ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'user-input')
|
||
|
const renderedDOMMaskedInput = ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'masked-input')
|
||
|
|
||
|
// Find buttons
|
||
|
const renderedDOMButtonGuideOn =
|
||
|
ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'guide-on-button')
|
||
|
|
||
|
// Check guide on changing
|
||
|
ReactTestUtils.Simulate.change(renderedDOMUserInput, {target: {value: '(123) '}})
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('(123) ')
|
||
|
ReactTestUtils.Simulate.click(renderedDOMButtonGuideOn)
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('(123) ___-____')
|
||
|
})
|
||
|
|
||
|
it('works if placeholderChar prop was changed', () => {
|
||
|
const statefulComponent = ReactTestUtils.renderIntoDocument(
|
||
|
<StatefulComponent/>
|
||
|
)
|
||
|
|
||
|
// Find inputs
|
||
|
const renderedDOMUserInput = ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'user-input')
|
||
|
const renderedDOMMaskedInput = ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'masked-input')
|
||
|
|
||
|
// Find buttons
|
||
|
const renderedDOMButtonGuideOn =
|
||
|
ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'guide-on-button')
|
||
|
const renderedDOMButtonPlaceholderChar =
|
||
|
ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'placeholderChar-button')
|
||
|
|
||
|
// Check placeholderChar changing
|
||
|
ReactTestUtils.Simulate.click(renderedDOMButtonGuideOn)
|
||
|
ReactTestUtils.Simulate.change(renderedDOMUserInput, {target: {value: '(123) ___-____'}})
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('(123) ___-____')
|
||
|
ReactTestUtils.Simulate.click(renderedDOMButtonPlaceholderChar)
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('(123) ***-****')
|
||
|
})
|
||
|
|
||
|
it('works if mask as array prop was changed', () => {
|
||
|
const statefulComponent = ReactTestUtils.renderIntoDocument(
|
||
|
<StatefulComponent/>
|
||
|
)
|
||
|
|
||
|
// Find inputs
|
||
|
const renderedDOMUserInput = ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'user-input')
|
||
|
const renderedDOMMaskedInput = ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'masked-input')
|
||
|
|
||
|
// Find buttons
|
||
|
const renderedDOMButtonMaskArray =
|
||
|
ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'mask-array-button')
|
||
|
|
||
|
// Check mask as array changing
|
||
|
ReactTestUtils.Simulate.change(renderedDOMUserInput, {target: {value: '(123) 456-7890'}})
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('(123) 456-7890')
|
||
|
ReactTestUtils.Simulate.click(renderedDOMButtonMaskArray)
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('(123) 456-78-90')
|
||
|
})
|
||
|
|
||
|
it('works if mask as function prop was changed', () => {
|
||
|
const statefulComponent = ReactTestUtils.renderIntoDocument(
|
||
|
<StatefulComponent/>
|
||
|
)
|
||
|
|
||
|
// Find inputs
|
||
|
const renderedDOMUserInput = ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'user-input')
|
||
|
const renderedDOMMaskedInput = ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'masked-input')
|
||
|
|
||
|
// Find buttons
|
||
|
const renderedDOMButtonMaskFunction =
|
||
|
ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'mask-function-button')
|
||
|
|
||
|
// Check mask as function changing
|
||
|
ReactTestUtils.Simulate.change(renderedDOMUserInput, {target: {value: '(123) 456-7890'}})
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('(123) 456-7890')
|
||
|
ReactTestUtils.Simulate.click(renderedDOMButtonMaskFunction)
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('123 456-7890')
|
||
|
})
|
||
|
|
||
|
it('works if pipe prop was changed', () => {
|
||
|
const statefulComponent = ReactTestUtils.renderIntoDocument(
|
||
|
<StatefulComponent/>
|
||
|
)
|
||
|
|
||
|
// Find inputs
|
||
|
const renderedDOMUserInput = ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'user-input')
|
||
|
const renderedDOMMaskedInput = ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'masked-input')
|
||
|
|
||
|
// Find buttons
|
||
|
const renderedDOMButtonPipeOn =
|
||
|
ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'pipe-on-button')
|
||
|
const renderedDOMButtonPipeOff =
|
||
|
ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'pipe-off-button')
|
||
|
const renderedDOMButtonPipeAnother =
|
||
|
ReactTestUtils.findRenderedDOMComponentWithClass(statefulComponent, 'pipe-another-button')
|
||
|
|
||
|
// Check pipe changing
|
||
|
// `pipe` undefined to function
|
||
|
ReactTestUtils.Simulate.change(renderedDOMUserInput, {target: {value: '(123) 456-7890'}})
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('(123) 456-7890')
|
||
|
ReactTestUtils.Simulate.click(renderedDOMButtonPipeOn)
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('Tel. (123) 456-7890')
|
||
|
// `pipe` function to another function
|
||
|
ReactTestUtils.Simulate.change(renderedDOMUserInput, {target: {value: 'Tel. (123) 456-7890'}})
|
||
|
ReactTestUtils.Simulate.click(renderedDOMButtonPipeAnother)
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('Tel: (123) 456-7890')
|
||
|
// `pipe` function to undefined
|
||
|
ReactTestUtils.Simulate.change(renderedDOMUserInput, {target: {value: 'Tel: (123) 456-7890'}})
|
||
|
ReactTestUtils.Simulate.click(renderedDOMButtonPipeOff)
|
||
|
expect(renderedDOMMaskedInput.value).to.equal('(123) 456-7890')
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('conformToMask', () => {
|
||
|
it('is a function', () => {
|
||
|
expect(typeof conformToMask).to.equal('function')
|
||
|
})
|
||
|
})
|