@@ -173,23 +173,62 @@ describe('react-draggable', function () {
173173 ) ;
174174
175175 var node = ReactDOM . findDOMNode ( drag ) ;
176-
177- TestUtils . Simulate . mouseDown ( node , { clientX : 0 , clientY : 0 } ) ;
178- // Simulate a movement; can't use TestUtils here because it uses react's event system only,
179- // but <DraggableCore> attaches event listeners directly to the document.
180- // Would love to new MouseEvent() here but it doesn't work with PhantomJS / old browsers.
181- // var e = new MouseEvent('mousemove', {clientX: 100, clientY: 100});
182- var evt = document . createEvent ( 'MouseEvents' ) ;
183- evt . initMouseEvent ( 'mousemove' , true , true , window ,
184- 0 , 0 , 0 , 100 , 100 , false , false , false , false , 0 , null ) ;
185- document . dispatchEvent ( evt ) ;
186- TestUtils . Simulate . mouseUp ( node ) ;
176+ simulateMovementFromTo ( drag , 0 , 0 , 100 , 100 ) ;
187177
188178 var style = node . getAttribute ( 'style' ) ;
189179 expect ( dragged ) . toEqual ( true ) ;
190180 expect ( style . indexOf ( 'transform: translate(100px, 100px);' ) ) . not . toEqual ( - 1 ) ;
191181 } ) ;
192182
183+ it ( 'should honor "x" axis' , function ( ) {
184+ var dragged = false ;
185+ drag = TestUtils . renderIntoDocument (
186+ < Draggable onDrag = { function ( ) { dragged = true ; } } axis = "x" >
187+ < div />
188+ </ Draggable >
189+ ) ;
190+
191+ var node = ReactDOM . findDOMNode ( drag ) ;
192+ simulateMovementFromTo ( drag , 0 , 0 , 100 , 100 ) ;
193+
194+ var style = node . getAttribute ( 'style' ) ;
195+ expect ( dragged ) . toEqual ( true ) ;
196+ expect ( style . indexOf ( 'transform: translate(100px, 0px);' ) ) . not . toEqual ( - 1 ) ;
197+ } ) ;
198+
199+ it ( 'should honor "y" axis' , function ( ) {
200+ var dragged = false ;
201+ drag = TestUtils . renderIntoDocument (
202+ < Draggable onDrag = { function ( ) { dragged = true ; } } axis = "y" >
203+ < div />
204+ </ Draggable >
205+ ) ;
206+
207+ var node = ReactDOM . findDOMNode ( drag ) ;
208+ simulateMovementFromTo ( drag , 0 , 0 , 100 , 100 ) ;
209+
210+ var style = node . getAttribute ( 'style' ) ;
211+ expect ( dragged ) . toEqual ( true ) ;
212+ expect ( style . indexOf ( 'transform: translate(0px, 100px);' ) ) . not . toEqual ( - 1 ) ;
213+ } ) ;
214+
215+ it ( 'should honor "none" axis' , function ( ) {
216+ var dragged = false ;
217+ drag = TestUtils . renderIntoDocument (
218+ < Draggable onDrag = { function ( ) { dragged = true ; } } axis = "none" >
219+ < div />
220+ </ Draggable >
221+ ) ;
222+
223+ var node = ReactDOM . findDOMNode ( drag ) ;
224+ simulateMovementFromTo ( drag , 0 , 0 , 100 , 100 ) ;
225+
226+ var style = node . getAttribute ( 'style' ) ;
227+ expect ( dragged ) . toEqual ( true ) ;
228+ // No idea why the spacing is different here
229+ expect ( style . indexOf ( 'transform:translate(0px,0px);' ) ) . not . toEqual ( - 1 ) ;
230+ } ) ;
231+
193232 it ( 'should detect if an element is instanceof SVGElement and set state.isElementSVG to true' , function ( ) {
194233 drag = TestUtils . renderIntoDocument (
195234 < Draggable >
@@ -218,10 +257,7 @@ describe('react-draggable', function () {
218257 ) ;
219258
220259 var node = ReactDOM . findDOMNode ( drag ) ;
221-
222- TestUtils . Simulate . mouseDown ( node , { clientX : 0 , clientY : 0 } ) ;
223- mouseMove ( node , 100 , 100 ) ;
224- TestUtils . Simulate . mouseUp ( node ) ;
260+ simulateMovementFromTo ( drag , 0 , 0 , 100 , 100 ) ;
225261
226262 var transform = node . getAttribute ( 'transform' ) ;
227263 expect ( transform . indexOf ( 'translate(100,100)' ) ) . not . toEqual ( - 1 ) ;
@@ -360,11 +396,8 @@ describe('react-draggable', function () {
360396 </ Draggable >
361397 ) ;
362398
363- var node = ReactDOM . findDOMNode ( drag ) ;
364-
365- TestUtils . Simulate . mouseDown ( node , { clientX : 0 , clientY : 0 } ) ;
366- var moveEvt = mouseMove ( node , 100 , 100 ) ;
367- TestUtils . Simulate . mouseUp ( node ) ;
399+ // (element, fromX, fromY, toX, toY)
400+ simulateMovementFromTo ( drag , 0 , 0 , 100 , 100 ) ;
368401 } ) ;
369402
370403 it ( 'should call back with offset left/top, not client' , function ( ) {
@@ -380,11 +413,7 @@ describe('react-draggable', function () {
380413 </ Draggable >
381414 ) ;
382415
383- var node = ReactDOM . findDOMNode ( drag ) ;
384-
385- TestUtils . Simulate . mouseDown ( node , { clientX : 200 , clientY : 200 } ) ;
386- var moveEvt = mouseMove ( node , 300 , 300 ) ;
387- TestUtils . Simulate . mouseUp ( node ) ;
416+ simulateMovementFromTo ( drag , 200 , 200 , 300 , 300 ) ;
388417 } ) ;
389418 } ) ;
390419
@@ -425,10 +454,19 @@ function renderToHTML(component) {
425454// but <DraggableCore> attaches event listeners directly to the document.
426455// Would love to new MouseEvent() here but it doesn't work with PhantomJS / old browsers.
427456// var e = new MouseEvent('mousemove', {clientX: 100, clientY: 100});
428- function mouseMove ( node , x , y ) {
457+ function mouseMove ( x , y ) {
429458 var evt = document . createEvent ( 'MouseEvents' ) ;
430459 evt . initMouseEvent ( 'mousemove' , true , true , window ,
431460 0 , 0 , 0 , x , y , false , false , false , false , 0 , null ) ;
432461 document . dispatchEvent ( evt ) ;
433462 return evt ;
434463}
464+
465+
466+ function simulateMovementFromTo ( drag , fromX , fromY , toX , toY ) {
467+ var node = ReactDOM . findDOMNode ( drag ) ;
468+
469+ TestUtils . Simulate . mouseDown ( node , { clientX : fromX , clientY : fromX } ) ;
470+ mouseMove ( toX , toY ) ;
471+ TestUtils . Simulate . mouseUp ( node ) ;
472+ }
0 commit comments