UNPKG

react-widgets

Version:
146 lines (112 loc) 5.16 kB
require('../vendor/phantomjs-shim') var React = require('react/addons'); var Dropdown = require('../src/dropdowns/dropdown-list.jsx') , _ = require('lodash'); //console.log(sinon) var TestUtils = React.addons.TestUtils , render = TestUtils.renderIntoDocument , findTag = TestUtils.findRenderedDOMComponentWithTag , findClass = TestUtils.findRenderedDOMComponentWithClass , findAllTag = TestUtils.scryRenderedDOMComponentsWithTag , findAllClass = TestUtils.scryRenderedDOMComponentsWithClass , findType = TestUtils.findRenderedComponentWithType , findAllType = TestUtils.scryRenderedComponentWithType , trigger = TestUtils.Simulate; describe('DROPDOWNS', function(){ var data = [ { label: 'jimmy', id: 0 }, { label: 'sally', id: 1 }, { label: 'pat', id: 2 } ]; it('should set initial values', function(){ var dropdown = render( <Dropdown value={'hello'} onChange={_.noop} />); expect( findClass(dropdown, 'rw-input').getDOMNode().textContent).to.be('hello'); }) it('should respect textField and valueFields', function(){ var dropdown = render( <Dropdown value={0} data={data} textField='label' valueField='id' />); expect(findClass(dropdown, 'rw-input').getDOMNode().textContent) .to.be('jimmy'); }) it('should start closed', function(done){ var dropdown = render(<Dropdown value={0} data={data} textField='label' valueField='id' />); var popup = findType(dropdown, require('../src/popup/popup.jsx')); expect(dropdown.state.open).to.be(false) expect(dropdown.getDOMNode().className).to.not.match(/\brw-open\b/) expect(dropdown.getDOMNode().getAttribute('aria-expanded')).to.be('false') setTimeout(function(){ expect(popup.getDOMNode().style.display).to.be('none') done() }, 0) }) it('should use a value template', function(){ var templ = React.createClass({ render: function() { return (<span>{"hello - " + this.props.item}</span>); } }); var dropdown = render(<Dropdown value={'jimmy'} valueComponent={templ} />); expect( findClass(dropdown, 'rw-input').getDOMNode().textContent).to.be('hello - jimmy'); }) it('should open when clicked', function(done){ var dropdown = render(<Dropdown value={'jimmy'} data={data} duration={0}/>); var popup = findType(dropdown, require('../src/popup/popup.jsx')) trigger.click(dropdown.getDOMNode()) setTimeout(function() { expect(dropdown.state.open).to.be(true) expect(dropdown.getDOMNode().className).to.match(/\brw-open\b/) expect(dropdown.getDOMNode().getAttribute('aria-expanded')).to.be('true') expect(popup.props.open).to.be(true) done() }, 0) }) it('should do nothing when disabled', function(done){ var dropdown = render(<Dropdown value={'jimmy'} data={data} duration={0} disabled={true}/>) , input = dropdown.getDOMNode(); expect( input.className).to.not.match(/\brw-state-focus\b/) expect( input.className).to.match(/\brw-state-disabled\b/) expect( input.hasAttribute('aria-disabled')).to.be(true) expect( input.getAttribute('aria-disabled')).to.be('true') trigger.click(dropdown.getDOMNode()) setTimeout(function() { expect(dropdown.state.open).to.be(false) done() }, 0) }) it('should do nothing when readonly', function(done){ var dropdown = render(<Dropdown value={'jimmy'} data={data} duration={0} readOnly={true}/>) , input = dropdown.getDOMNode(); expect( input.hasAttribute('aria-readonly')).to.be(true) expect( input.getAttribute('aria-readonly')).to.be('true') trigger.click(input) trigger.focus(input) setTimeout(function() { expect(input.className).to.match(/\brw-state-focus\b/) expect(dropdown.state.open).to.be(false) done() }, 0) }) it('should change values on key down', function(){ var change = sinon.spy() , dropdown = render(<Dropdown value={data[1]} data={data} duration={0} onChange={change}/>); trigger.keyDown(dropdown.getDOMNode(), { key: 'ArrowDown'}) expect(change.calledOnce).to.be(true) expect(change.calledWith(data[2])).to.be(true) dropdown = render(<Dropdown value={data[1]} data={data} duration={0} onChange={change}/>) change.reset() trigger.keyDown(dropdown.getDOMNode(), { key: 'ArrowUp'}) expect(change.calledOnce).to.be(true) expect(change.calledWith(data[0])).to.be(true) dropdown = render(<Dropdown value={data[1]} data={data} duration={0} onChange={change}/>) change.reset() trigger.keyDown(dropdown.getDOMNode(), { key: 'Home'}) expect(change.calledOnce).to.be(true) expect(change.calledWith(data[0])).to.be(true) dropdown = render(<Dropdown value={data[1]} data={data} duration={0} onChange={change}/>) change.reset() trigger.keyDown(dropdown.getDOMNode(), { key: 'End'}) expect(change.calledOnce).to.be(true) expect(change.calledWith(data[2])).to.be(true) }) })