/* global describe, it */ import expect from 'expect' import NumericInput from '../src/NumericInput.jsx' import React from 'react' import TestUtils from 'react-dom/test-utils' const KEYCODE_UP = 38; const KEYCODE_DOWN = 40; describe('NumericInput', function() { it('calls onChange when user types in something valid', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) // Press "5" widget.refsInput.value = "5" TestUtils.Simulate.change(widget.refsInput) // Rendering must bring the focus to the input setTimeout(() => { expect(onChangeCalls).toEqual(1) expect(lastChange).toEqual(5) done() }, 50) }) it('does not call onChange when user types in something invalid', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) // Press "r" TestUtils.Simulate.keyDown(widget.refsInput, { keyCode: 114 }) setTimeout(() => { expect(onChangeCalls).toEqual(0) expect(lastChange).toEqual(undefined) done() }, 50) }) it('calls onChange when user the up arrow key', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) TestUtils.Simulate.keyDown(widget.refsInput, { keyCode: KEYCODE_UP }) setTimeout(() => { expect(onChangeCalls).toEqual(1) expect(lastChange).toEqual(1) done() }, 50) }) it('calls onChange when user the Ctrl+up', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) TestUtils.Simulate.keyDown(widget.refsInput, { keyCode: KEYCODE_UP, ctrlKey: true }) setTimeout(() => { expect(onChangeCalls).toEqual(1) expect(lastChange).toEqual(0.1) done() }, 50) }) it('calls onChange when user the Command+up', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) TestUtils.Simulate.keyDown(widget.refsInput, { keyCode: KEYCODE_UP, metaKey: true }) setTimeout(() => { expect(onChangeCalls).toEqual(1) expect(lastChange).toEqual(0.1) done() }, 50) }) it('calls onChange when user the Shift+up', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) TestUtils.Simulate.keyDown(widget.refsInput, { keyCode : KEYCODE_UP, shiftKey: true }) setTimeout(() => { expect(onChangeCalls).toEqual(1) expect(lastChange).toEqual(10) done() }, 50) }) it('calls onChange when user the down arrow key', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) TestUtils.Simulate.keyDown(widget.refsInput, { keyCode: KEYCODE_DOWN }) setTimeout(() => { expect(onChangeCalls).toEqual(1) expect(lastChange).toEqual(-1) done() }, 50) }) it('calls onChange when user the Ctrl+down', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) TestUtils.Simulate.keyDown(widget.refsInput, { keyCode: KEYCODE_DOWN, ctrlKey: true }) setTimeout(() => { expect(onChangeCalls).toEqual(1) expect(lastChange).toEqual(-0.1) done() }, 50) }) it('calls onChange when user the Command+down', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) TestUtils.Simulate.keyDown(widget.refsInput, { keyCode: KEYCODE_DOWN, metaKey: true }) setTimeout(() => { expect(onChangeCalls).toEqual(1) expect(lastChange).toEqual(-0.1) done() }, 50) }) it('calls onChange when user the Shift+down', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) TestUtils.Simulate.keyDown(widget.refsInput, { keyCode : KEYCODE_DOWN, shiftKey: true }) setTimeout(() => { expect(onChangeCalls).toEqual(1) expect(lastChange).toEqual(-10) done() }, 50) }) it('calls onChange when user hits the up button', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) // Press "5" TestUtils.Simulate.mouseDown(widget.refsInput.nextElementSibling) // Rendering must bring the focus to the input setTimeout(() => { expect(onChangeCalls).toEqual(1) expect(lastChange).toEqual(1) done() }, 50) }) it('calls onChange when user hits the down button', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) // Press "5" TestUtils.Simulate.mouseDown(widget.refsInput.nextElementSibling.nextElementSibling) // Rendering must bring the focus to the input setTimeout(() => { expect(onChangeCalls).toEqual(1) expect(lastChange).toEqual(-1) done() }, 50) }) it('calls onChange due to auto-increase', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) TestUtils.Simulate.mouseDown(widget.refsInput.nextElementSibling) setTimeout(() => { expect(onChangeCalls).toEqual(2) expect(lastChange).toEqual(2) done() }, NumericInput.DELAY + Math.round(NumericInput.SPEED/2)) }) it('calls onChange due to auto-decrease', (done) => { let onChangeCalls = 0 let lastChange function onChange(x) { onChangeCalls += 1 lastChange = x } let widget = TestUtils.renderIntoDocument( ) TestUtils.Simulate.mouseDown(widget.refsInput.nextElementSibling.nextElementSibling) setTimeout(() => { expect(onChangeCalls).toEqual(2) expect(lastChange).toEqual(-2) done() }, NumericInput.DELAY + Math.round(NumericInput.SPEED/2)) }) })