/* global describe, it */ import expect from 'expect' import NumericInput from '../src/NumericInput.jsx' import React from 'react' import TestUtils from 'react-dom/test-utils' describe('NumericInput', function() { it('passes focus events to "onFocus" prop', (done) => { let onFocusCalls = 0, widget function onFocus(event) { onFocusCalls += 1 expect(this).toEqual(null) expect(typeof event).toEqual("object") } widget = TestUtils.renderIntoDocument( ) // Rendering must not bring the focus to the input expect(onFocusCalls).toEqual(0) setTimeout(() => { window.focus() // Trigger a focus on the input and assert that // the onFocus callback receives it TestUtils.Simulate.focus(widget.refsInput) setTimeout(() => { expect(onFocusCalls).toEqual(1) // Now blur and then click on the up button. That should return // the focus back to the input and call the onFocus callback again TestUtils.Simulate.blur(widget.refsInput) setTimeout(() => { TestUtils.Simulate.mouseDown(widget.refsInput.nextElementSibling) setTimeout(() => { expect(onFocusCalls).toEqual(2) done() }, 50) }, 150) }, 150) }, 50) }); it('passes blur events to "onBlur" prop', (done) => { let onBlurCalls = 0 let widget = TestUtils.renderIntoDocument( ) // Rendering must not trigger any blur on the input expect(onBlurCalls).toEqual(0) window.focus() // Start by focusing the input TestUtils.Simulate.focus(widget.refsInput) // Test again to see if after focus the input didn't blur somehow setTimeout(() => { expect(onBlurCalls).toEqual(0) // Trigger a blur on the input and assert that // the onBlur callback receives it TestUtils.Simulate.blur(widget.refsInput) setTimeout(() => { expect(onBlurCalls).toEqual(1) // Hit the up button. This should bring the focus back to the // input TestUtils.Simulate.mouseDown(widget.refsInput.nextElementSibling) setTimeout(() => { // Now blur it again and see if it counts TestUtils.Simulate.blur(widget.refsInput) setTimeout(() => { expect(onBlurCalls).toEqual(2) done() }, 150) }, 150) }, 150) }, 150) }); it('respects the "autoFocus" prop', (done) => { let onFocusCalls = 0 let widget = TestUtils.renderIntoDocument( onFocusCalls += 1 } /> ) // window.blur() // window.focus() // Rendering must bring the focus to the input setTimeout(() => { if (document.activeElement === widget.refsInput) { expect(onFocusCalls).toEqual(1) done() } else { console.log("Unable to test autoFocus") done(/*new Error("Unable to autoFocus")*/) } }, 1000) }) });