Skip to content

Commit 9137b6b

Browse files
committed
Add tests for axis
1 parent 2fdd59e commit 9137b6b

File tree

1 file changed

+64
-26
lines changed

1 file changed

+64
-26
lines changed

specs/draggable.spec.jsx

Lines changed: 64 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)