Skip to content

Commit c278a44

Browse files
committed
Draggable Tests: Add test coverage for supported options
1 parent 6d3a1e1 commit c278a44

10 files changed

+898
-253
lines changed

tests/.jshintrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"Globalize",
2424
"module",
2525
"notEqual",
26+
"notDeepEqual",
2627
"notStrictEqual",
2728
"ok",
2829
"QUnit",

tests/jquery.simulate.js

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -277,18 +277,30 @@ function findCenter( elem ) {
277277
};
278278
}
279279

280+
function findCorner( elem ) {
281+
var offset,
282+
document = $( elem.ownerDocument );
283+
elem = $( elem );
284+
offset = elem.offset();
285+
286+
return {
287+
x: offset.left - document.scrollLeft(),
288+
y: offset.top - document.scrollTop()
289+
};
290+
}
291+
280292
$.extend( $.simulate.prototype, {
281293
simulateDrag: function() {
282294
var i = 0,
283295
target = this.target,
284296
options = this.options,
285-
center = findCenter( target ),
297+
center = options.handle === "corner" ? findCorner( target ) : findCenter( target ),
286298
x = Math.floor( center.x ),
287299
y = Math.floor( center.y ),
288-
dx = options.dx || 0,
289-
dy = options.dy || 0,
290-
moves = options.moves || 3,
291-
coord = { clientX: x, clientY: y };
300+
coord = { clientX: x, clientY: y },
301+
dx = options.dx || ( options.x !== undefined ? options.x - x : 0 ),
302+
dy = options.dy || ( options.y !== undefined ? options.y - y : 0 ),
303+
moves = options.moves || 3;
292304

293305
this.simulateEvent( target, "mousedown", coord );
294306

tests/unit/draggable/draggable.html

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66

77
<script src="../../jquery.js"></script>
88
<link rel="stylesheet" href="../../../external/qunit.css">
9-
9+
1010
<style>
1111
/* See #9077 */
1212
#draggable3, #draggable4 { z-index: 100; }
1313
</style>
14-
14+
1515
<script src="../../../external/qunit.js"></script>
1616
<script src="../../jquery.simulate.js"></script>
1717
<script src="../testsuite.js"></script>
@@ -23,7 +23,8 @@
2323
"ui/jquery.ui.widget.js",
2424
"ui/jquery.ui.mouse.js",
2525
"ui/jquery.ui.resizable.js",
26-
"ui/jquery.ui.draggable.js"
26+
"ui/jquery.ui.draggable.js",
27+
"ui/jquery.ui.droppable.js"
2728
]
2829
});
2930
</script>
@@ -45,15 +46,12 @@ <h2 id="qunit-banner"></h2>
4546
<h2 id="qunit-userAgent"></h2>
4647
<ol id="qunit-tests"></ol>
4748
<div id="qunit-fixture">
48-
<div id="main"></div>
49-
50-
<div id="draggable1" style="background: green; width: 200px; height: 100px;">Relative</div>
51-
<div id="draggable2" style="background: green; width: 200px; height: 100px; position: absolute; top: 10px; left: 10px;"><span>Absolute</span></div>
52-
<div style='width: 1px; height: 1000px;'></div>
53-
<div style="position: absolute; width: 1px; height: 2000px;"></div>
54-
<div id="draggable3"></div>
55-
<div id="draggable4"></div>
56-
49+
<div id="main"></div>
50+
<div id="draggable1" style="background: green; width: 200px; height: 100px;">Relative</div>
51+
<div id="draggable2" style="background: green; width: 200px; height: 100px; position: absolute; top: 10px; left: 10px;"><span>Absolute</span></div>
52+
<div id="droppable" style="background: green; width: 200px; height: 100px; position: absolute; top: 110px; left: 110px;"><span>Absolute</span></div>
53+
<div style="width: 1px; height: 1000px;"></div>
54+
<div style="position: absolute; width: 1px; height: 2000px;"></div>
5755
</div>
5856

5957
</body>

tests/unit/draggable/draggable_common.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
11
TestHelpers.commonWidgetTests( "draggable", {
22
defaults: {
3-
addClasses: true,
43
appendTo: "parent",
54
axis: false,
65
cancel: "input,textarea,button,select,option",
76
connectToSortable: false,
87
containment: false,
98
cursor: "auto",
109
cursorAt: false,
11-
delay: 0,
1210
disabled: false,
13-
distance: 1,
1411
grid: false,
1512
handle: false,
1613
helper: "original",
17-
iframeFix: false,
1814
opacity: false,
1915
refreshPositions: false,
2016
revert: false,
@@ -29,6 +25,12 @@ TestHelpers.commonWidgetTests( "draggable", {
2925
stack: false,
3026
zIndex: false,
3127

28+
//todo: remove the following option checks when interactions are rewritten:
29+
addClasses: true,
30+
delay: 0,
31+
distance: 1,
32+
iframeFix: false,
33+
3234
// callbacks
3335
create: null,
3436
drag: null,

tests/unit/draggable/draggable_core.js

Lines changed: 42 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,64 +2,79 @@
22
* draggable_core.js
33
*/
44

5-
(function($) {
5+
(function( $ ) {
66

7-
module("draggable");
7+
var relativeElement, absoluteElement;
88

9-
test("element types", function() {
10-
var typeNames = ("p,h1,h2,h3,h4,h5,h6,blockquote,ol,ul,dl,div,form" +
11-
",table,fieldset,address,ins,del,em,strong,q,cite,dfn,abbr" +
12-
",acronym,code,samp,kbd,var,img,hr" +
13-
",input,button,label,select,iframe").split(",");
9+
module( "draggable: core", {
10+
setup: function() {
11+
relativeElement = $("<div style='width: 200px; height: 100px;'>Relative</div>").appendTo("#qunit-fixture");
12+
absoluteElement = $("<div style='background: green; width: 200px; height: 100px; position: absolute; top: 10px; left: 10px;'><span>Absolute</span></div>").appendTo("#qunit-fixture");
13+
},
14+
teardown: function() {
15+
relativeElement.remove();
16+
absoluteElement.remove();
17+
}
18+
});
19+
20+
test( "element types", function() {
21+
var typeNames = (
22+
"p,h1,h2,h3,h4,h5,h6,blockquote,ol,ul,dl,div,form" +
23+
",table,fieldset,address,ins,del,em,strong,q,cite,dfn,abbr" +
24+
",acronym,code,samp,kbd,var,img,hr" +
25+
",input,button,label,select,iframe"
26+
).split(",");
1427

1528
expect( typeNames.length * 2 );
1629

17-
$.each(typeNames, function(i) {
30+
$.each( typeNames, function( i ) {
1831
var offsetBefore, offsetAfter,
19-
typeName = typeNames[i],
20-
el = $(document.createElement(typeName)).appendTo("#qunit-fixture");
32+
typeName = typeNames[ i ],
33+
el = $( document.createElement( typeName ) ).appendTo("#qunit-fixture");
34+
35+
if ( typeName === "table" ) {
36+
el.append("<tr><td>content</td></tr>");
37+
}
2138

22-
(typeName === "table" && el.append("<tr><td>content</td></tr>"));
2339
el.draggable({ cancel: "" });
2440
offsetBefore = el.offset();
2541
el.simulate( "drag", {
2642
dx: 50,
2743
dy: 50
2844
});
2945
offsetAfter = el.offset();
30-
// there are some rounding errors in FF, Chrome, and IE9, so we can't say equal, we have to settle for close enough
31-
closeEnough(offsetBefore.left, offsetAfter.left - 50, 1, "dragged[50, 50] " + "<" + typeName + ">");
32-
closeEnough(offsetBefore.top, offsetAfter.top - 50, 1, "dragged[50, 50] " + "<" + typeName + ">");
46+
47+
// Support: FF, Chrome, and IE9,
48+
// there are some rounding errors in so we can't say equal, we have to settle for close enough
49+
closeEnough( offsetBefore.left, offsetAfter.left - 50, 1, "dragged[50, 50] " + "<" + typeName + ">" );
50+
closeEnough( offsetBefore.top, offsetAfter.top - 50, 1, "dragged[50, 50] " + "<" + typeName + ">" );
3351
el.draggable("destroy");
3452
el.remove();
3553
});
3654
});
3755

38-
test("No options, relative", function() {
56+
test( "No options, relative", function() {
3957
expect( 1 );
40-
var el = $("#draggable1").draggable();
41-
TestHelpers.draggable.shouldMove(el);
58+
TestHelpers.draggable.shouldMove( relativeElement.draggable() );
4259
});
4360

44-
test("No options, absolute", function() {
61+
test( "No options, absolute", function() {
4562
expect( 1 );
46-
var el = $("#draggable2").draggable();
47-
TestHelpers.draggable.shouldMove(el);
63+
TestHelpers.draggable.shouldMove( absoluteElement.draggable() );
4864
});
4965

50-
test("resizable handle with complex markup (#8756 / #8757)", function() {
66+
test( "resizable handle with complex markup (#8756 / #8757)", function() {
5167
expect( 2 );
5268

53-
$("#draggable1")
69+
relativeElement
5470
.append(
5571
$("<div>")
56-
.addClass("ui-resizable-handle")
57-
.addClass("ui-resizable-w")
58-
.append($("<div>"))
72+
.addClass("ui-resizable-handle ui-resizable-w")
73+
.append( $("<div>") )
5974
);
6075

6176
var handle = $(".ui-resizable-w div"),
62-
target = $("#draggable1").draggable().resizable({ handles: "all" });
77+
target = relativeElement.draggable().resizable({ handles: "all" });
6378

6479
// todo: fix resizable so it doesn't require a mouseover
6580
handle.simulate("mouseover").simulate( "drag", { dx: -50 } );
@@ -70,4 +85,4 @@ test("resizable handle with complex markup (#8756 / #8757)", function() {
7085
equal( target.width(), 200, "compare width" );
7186
});
7287

73-
})(jQuery);
88+
})( jQuery );

0 commit comments

Comments
 (0)