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
						
					
					
				| 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')
 | |
|   })
 | |
| })
 |