UNPKG

react-flex-layout

Version:
255 lines (233 loc) 9.22 kB
import React from 'react' import ReactDOM from 'react-dom' import expect from 'expect' import Layout from './react-flex-layout.jsx' import LayoutSplitter from './react-flex-layout-splitter.jsx' import TestUtils from 'react-addons-test-utils' describe('Layout splitter component', function() { it('Throws when both previous and next are flex on mouse down', function() { var container = document.createElement('div') container.style.height = '500px' container.style.width = '500px' document.body.appendChild(container) var components = <Layout> <Layout layoutWidth='flex' /> <LayoutSplitter /> <Layout layoutWidth='flex' /> </Layout> var rendered = ReactDOM.render(components, container) var splitterNode = ReactDOM.findDOMNode(rendered.refs.layout1) expect(() => TestUtils.Simulate.mouseDown(splitterNode, { clientX: 100, ClientY: 100 })).toThrow() }) it('Fixed panel on left', function() { var container = document.createElement('div') container.style.height = '500px' container.style.width = '500px' document.body.appendChild(container) var mouseMove var fakeDocument = { addEventListener: (e, h) => { if (e === 'mousemove') { mouseMove = h } }} var components = <Layout> <Layout layoutWidth={100} /> <LayoutSplitter document={fakeDocument} /> <Layout layoutWidth='flex' /> </Layout> var rendered = ReactDOM.render(components, container) var splitterNode = ReactDOM.findDOMNode(rendered.refs.layout1) TestUtils.Simulate.mouseDown(splitterNode, { clientX: 100, clientY: 100 }) mouseMove({ clientX: 110, clientY: 100 }) var layout1 = ReactDOM.findDOMNode(rendered.refs.layout0) var layout2 = ReactDOM.findDOMNode(rendered.refs.layout2) expect(layout1.offsetWidth).toBe(110) expect(layout2.offsetWidth).toBe(390 - 11) }) it('Will inform the user when resizing begins', function() { var container = document.createElement('div') container.style.height = '500px' container.style.width = '500px' document.body.appendChild(container) var mouseMove var fakeDocument = { addEventListener: (e, h) => { if (e === 'mousemove') { mouseMove = h } }} var resizeCalled = false; function onResizing(){ resizeCalled = true; } var components = <Layout> <Layout layoutWidth={100} /> <LayoutSplitter onResizing={onResizing} document={fakeDocument} /> <Layout layoutWidth='flex' /> </Layout> var rendered = ReactDOM.render(components, container) var splitterNode = ReactDOM.findDOMNode(rendered.refs.layout1) TestUtils.Simulate.mouseDown(splitterNode, { clientX: 100, clientY: 100 }) mouseMove({ clientX: 110, clientY: 100 }) //expect resizeCalled to be true expect(resizeCalled).toBe(true); }) it('Will inform the user when resizing completes', function() { var container = document.createElement('div') container.style.height = '500px' container.style.width = '500px' document.body.appendChild(container) var mouseMove var mouseUp var fakeDocument = { addEventListener: (e, h) => { if (e === 'mousemove') { mouseMove = h } if (e=== 'mouseup') { mouseUp = h } }} var resizeCalled = false; function onResizeComplete(){ resizeCalled = true; } var components = <Layout> <Layout layoutWidth={100} /> <LayoutSplitter onResizeComplete={onResizeComplete} document={fakeDocument} /> <Layout layoutWidth='flex' /> </Layout> var rendered = ReactDOM.render(components, container) var splitterNode = ReactDOM.findDOMNode(rendered.refs.layout1) TestUtils.Simulate.mouseDown(splitterNode, { clientX: 100, clientY: 100 }) mouseMove({ clientX: 110, clientY: 100 }) //let go mouseUp() //expect resizeCalled to be true expect(resizeCalled).toBe(true); }) it('Fixed panel on right', function() { var container = document.createElement('div') container.style.height = '500px' container.style.width = '500px' document.body.appendChild(container) var mouseMove var fakeDocument = { addEventListener: (e, h) => { if (e === 'mousemove') { mouseMove = h } }} var components = <Layout> <Layout layoutWidth='flex' /> <LayoutSplitter document={fakeDocument} /> <Layout layoutWidth={100} /> </Layout> var rendered = ReactDOM.render(components, container) var splitterNode = ReactDOM.findDOMNode(rendered.refs.layout1) TestUtils.Simulate.mouseDown(splitterNode, { clientX: 100, clientY: 100 }) mouseMove({ clientX: 110, clientY: 100 }) var layout1 = ReactDOM.findDOMNode(rendered.refs.layout0) var layout2 = ReactDOM.findDOMNode(rendered.refs.layout2) expect(layout1.offsetWidth).toBe(410 - 11) expect(layout2.offsetWidth).toBe(90) }) it('Horizontal with both fixed', function() { var container = document.createElement('div') container.style.height = '500px' container.style.width = '500px' document.body.appendChild(container) var mouseMove var fakeDocument = { addEventListener: (e, h) => { if (e === 'mousemove') { mouseMove = h } }} var components = <Layout> <Layout layoutWidth={100} /> <LayoutSplitter document={fakeDocument} /> <Layout layoutWidth={100} /> </Layout> var rendered = ReactDOM.render(components, container) var splitterNode = ReactDOM.findDOMNode(rendered.refs.layout1) TestUtils.Simulate.mouseDown(splitterNode, { clientX: 100, clientY: 100 }) mouseMove({ clientX: 110, clientY: 100 }) var layout1 = ReactDOM.findDOMNode(rendered.refs.layout0) var layout2 = ReactDOM.findDOMNode(rendered.refs.layout2) expect(layout1.offsetWidth).toBe(110) expect(layout2.offsetWidth).toBe(90) }) it('Fixed panel on top', function() { var container = document.createElement('div') container.style.height = '500px' container.style.width = '500px' document.body.appendChild(container) var mouseMove var fakeDocument = { addEventListener: (e, h) => { if (e === 'mousemove') { mouseMove = h } }} var components = <Layout> <Layout layoutHeight={100} /> <LayoutSplitter document={fakeDocument} /> <Layout layoutHeight='flex' /> </Layout> var rendered = ReactDOM.render(components, container) var splitterNode = ReactDOM.findDOMNode(rendered.refs.layout1) TestUtils.Simulate.mouseDown(splitterNode, { clientX: 100, clientY: 100 }) mouseMove({ clientX: 100, clientY: 110 }) var layout1 = ReactDOM.findDOMNode(rendered.refs.layout0) var layout2 = ReactDOM.findDOMNode(rendered.refs.layout2) expect(layout1.offsetHeight).toBe(110) expect(layout2.offsetHeight).toBe(390 - 11) }) it('Fixed panel on bottom', function() { var container = document.createElement('div') container.style.height = '500px' container.style.width = '500px' document.body.appendChild(container) var mouseMove var fakeDocument = { addEventListener: (e, h) => { if (e === 'mousemove') { mouseMove = h } }} var components = <Layout> <Layout layoutHeight='flex' /> <LayoutSplitter document={fakeDocument} /> <Layout layoutHeight={100} /> </Layout> var rendered = ReactDOM.render(components, container) var splitterNode = ReactDOM.findDOMNode(rendered.refs.layout1) TestUtils.Simulate.mouseDown(splitterNode, { clientX: 100, clientY: 100 }) mouseMove({ clientX: 100, clientY: 110 }) var layout1 = ReactDOM.findDOMNode(rendered.refs.layout0) var layout2 = ReactDOM.findDOMNode(rendered.refs.layout2) expect(layout1.offsetHeight).toBe(410 - 11) expect(layout2.offsetHeight).toBe(90) }) it('Vertical with both fixed', function() { var container = document.createElement('div') container.style.height = '500px' container.style.width = '500px' document.body.appendChild(container) var mouseMove var fakeDocument = { addEventListener: (e, h) => { if (e === 'mousemove') { mouseMove = h } }} var components = <Layout> <Layout layoutHeight={100} /> <LayoutSplitter document={fakeDocument} /> <Layout layoutHeight={100} /> </Layout> var rendered = ReactDOM.render(components, container) var splitterNode = ReactDOM.findDOMNode(rendered.refs.layout1) TestUtils.Simulate.mouseDown(splitterNode, { clientX: 100, clientY: 100 }) mouseMove({ clientX: 100, clientY: 110 }) var layout1 = ReactDOM.findDOMNode(rendered.refs.layout0) var layout2 = ReactDOM.findDOMNode(rendered.refs.layout2) expect(layout1.offsetHeight).toBe(110) expect(layout2.offsetHeight).toBe(90) }) }) // TODO Hides selection