Skip to content

Commit b49e071

Browse files
mikesherovscottgonzalez
authored andcommitted
Dev: Standardized the selectable test suite. Fixed #8752 - Dev: Get selectable test suite to pass
1 parent f0daa22 commit b49e071

File tree

10 files changed

+74
-64
lines changed

10 files changed

+74
-64
lines changed

build/tasks/testswarm.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ var versions = {
2222
"Position": "position/position.html",
2323
"Progressbar": "progressbar/progressbar.html",
2424
//"Resizable": "resizable/resizable.html",
25-
//"Selectable": "selectable/selectable.html",
25+
"Selectable": "selectable/selectable.html",
2626
//"Slider": "slider/slider.html",
2727
//"Sortable": "sortable/sortable.html",
2828
"Spinner": "spinner/spinner.html",

grunt.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,13 +281,13 @@ grunt.initConfig({
281281
files: grunt.file.expandFiles( "tests/unit/**/*.html" ).filter(function( file ) {
282282
// disabling everything that doesn't (quite) work with PhantomJS for now
283283
// TODO except for all|index|test, try to include more as we go
284-
return !( /(all|all-active|index|test|droppable|selectable|resizable|sortable|dialog|slider|datepicker|tabs|tooltip)\.html$/ ).test( file );
284+
return !( /(all|all-active|index|test|droppable|resizable|sortable|dialog|slider|datepicker|tabs|tooltip)\.html$/ ).test( file );
285285
})
286286
},
287287
lint: {
288288
ui: grunt.file.expandFiles( "ui/*.js" ).filter(function( file ) {
289289
// TODO remove items from this list once rewritten
290-
return !( /(mouse|datepicker|droppable|resizable|selectable|sortable)\.js$/ ).test( file );
290+
return !( /(mouse|datepicker|droppable|resizable|sortable)\.js$/ ).test( file );
291291
}),
292292
grunt: [ "grunt.js", "build/**/*.js" ],
293293
tests: "tests/unit/**/*.js"

tests/unit/all-active.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"position/position.html",
3030
"progressbar/progressbar.html",
3131
//"resizable/resizable.html",
32-
//"selectable/selectable.html",
32+
"selectable/selectable.html",
3333
//"slider/slider.html",
3434
//"sortable/sortable.html",
3535
"spinner/spinner.html",

tests/unit/all.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"position/position.html",
3030
"progressbar/progressbar.html",
3131
//"resizable/resizable.html",
32-
//"selectable/selectable.html",
32+
"selectable/selectable.html",
3333
"slider/slider.html",
3434
//"sortable/sortable.html",
3535
"spinner/spinner.html",

tests/unit/selectable/selectable_common.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ TestHelpers.commonWidgetTests('selectable', {
33
appendTo: 'body',
44
autoRefresh: true,
55
cancel: 'input,textarea,button,select,option',
6+
create: null,
67
delay: 0,
78
disabled: false,
89
distance: 0,

tests/unit/selectable/selectable_core.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
* selectable_core.js
33
*/
44

5-
var el;
6-
7-
TestHelpers.selectableDrag = function drag(dx, dy) {
8-
var off = el.offset(), pos = { clientX: off.left, clientY: off.top };
9-
el.simulate("mousedown", pos);
10-
$(document).simulate("mousemove", pos);
11-
pos.clientX += dx;
12-
pos.clientY += dy;
13-
$(document).simulate("mousemove", pos);
14-
$(document).simulate("mouseup", pos);
15-
};
16-
5+
TestHelpers.selectable = {
6+
drag: function drag(el, dx, dy) {
7+
var off = el.offset(),
8+
pos = { clientX: off.left, clientY: off.top };
9+
el.simulate("mousedown", pos);
10+
$(document).simulate("mousemove", pos);
11+
pos.clientX += dx;
12+
pos.clientY += dy;
13+
$(document).simulate("mousemove", pos);
14+
$(document).simulate("mouseup", pos);
15+
}
16+
};

tests/unit/selectable/selectable_events.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module("selectable: events");
77

88
test("start", function() {
99
expect(2);
10-
el = $("#selectable1");
10+
var el = $("#selectable1");
1111
el.selectable({
1212
start: function() {
1313
ok(true, "drag fired start callback");
@@ -19,7 +19,7 @@ test("start", function() {
1919

2020
test("stop", function() {
2121
expect(2);
22-
el = $("#selectable1");
22+
var el = $("#selectable1");
2323
el.selectable({
2424
start: function() {
2525
ok(true, "drag fired stop callback");

tests/unit/selectable/selectable_methods.js

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
module("selectable: methods");
77

88
test("init", function() {
9-
expect(6);
9+
expect( 5 );
1010

1111
$("<div></div>").appendTo('body').selectable().remove();
1212
ok(true, '.selectable() called on element');
@@ -17,10 +17,7 @@ test("init", function() {
1717
$("<div></div>").selectable().remove();
1818
ok(true, '.selectable() called on disconnected DOMElement');
1919

20-
$("<div></div>").selectable().selectable("foo").remove();
21-
ok(true, 'arbitrary method called after init');
22-
23-
el = $("<div></div>").selectable();
20+
var el = $("<div></div>").selectable();
2421
el.selectable("option", "foo");
2522
el.remove();
2623
ok(true, 'arbitrary option getter after init');
@@ -30,6 +27,8 @@ test("init", function() {
3027
});
3128

3229
test("destroy", function() {
30+
expect( 4 );
31+
3332
$("<div></div>").appendTo('body').selectable().selectable("destroy").remove();
3433
ok(true, '.selectable("destroy") called on element');
3534

@@ -39,9 +38,6 @@ test("destroy", function() {
3938
$("<div></div>").selectable().selectable("destroy").remove();
4039
ok(true, '.selectable("destroy") called on disconnected DOMElement');
4140

42-
$("<div></div>").selectable().selectable("destroy").selectable("foo").remove();
43-
ok(true, 'arbitrary method called after destroy');
44-
4541
var expected = $('<div></div>').selectable(),
4642
actual = expected.selectable('destroy');
4743
equal(actual, expected, 'destroy is chainable');
@@ -50,9 +46,9 @@ test("destroy", function() {
5046
test("enable", function() {
5147
expect(3);
5248
var expected, actual,
53-
fired = false;
49+
fired = false,
50+
el = $("#selectable1");
5451

55-
el = $("#selectable1");
5652
el.selectable({
5753
disabled: true,
5854
start: function() { fired = true; }
@@ -72,9 +68,9 @@ test("enable", function() {
7268
test("disable", function() {
7369
expect(3);
7470
var expected, actual,
75-
fired = false;
71+
fired = false,
72+
el = $("#selectable1");
7673

77-
el = $("#selectable1");
7874
el.selectable({
7975
disabled: false,
8076
start: function() { fired = true; }

tests/unit/selectable/selectable_options.js

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,42 @@ module("selectable: options");
77

88
test("autoRefresh", function() {
99
expect(3);
10-
el = $("#selectable1");
11-
var actual, sel = $("*", el), selected = function() { actual += 1; };
1210

13-
actual = 0;
11+
var actual = 0,
12+
el = $("#selectable1"),
13+
sel = $("*", el),
14+
selected = function() { actual += 1; };
15+
1416
el = $("#selectable1").selectable({ autoRefresh: false, selected: selected });
1517
sel.hide();
16-
TestHelpers.selectableDrag(1000, 1000);
18+
TestHelpers.selectable.drag(el, 1000, 1000);
1719
equal(actual, sel.length);
1820
el.selectable("destroy");
1921

2022
actual = 0;
2123
sel.show();
2224
el = $("#selectable1").selectable({ autoRefresh: true, selected: selected });
2325
sel.hide();
24-
TestHelpers.selectableDrag(1000, 1000);
26+
TestHelpers.selectable.drag(el, 1000, 1000);
2527
equal(actual, 0);
2628
sel.show();
27-
TestHelpers.selectableDrag(1000, 1000);
29+
TestHelpers.selectable.drag(el, 1000, 1000);
2830
equal(actual, sel.length);
2931
el.selectable("destroy");
3032
sel.show();
3133
});
3234

3335
test("filter", function() {
3436
expect(2);
35-
el = $("#selectable1");
36-
var actual, sel = $("*", el), selected = function() { actual += 1; };
3737

38-
actual = 0;
38+
var actual =0,
39+
el = $("#selectable1"),
40+
sel = $("*", el),
41+
selected = function() { actual += 1; };
42+
43+
3944
el = $("#selectable1").selectable({ filter: '.special', selected: selected });
40-
TestHelpers.selectableDrag(1000, 1000);
45+
TestHelpers.selectable.drag(el, 1000, 1000);
4146
ok(sel.length !== 1, "this test assumes more than 1 selectee");
4247
equal(actual, 1);
4348
el.selectable("destroy");

ui/jquery.ui.selectable.js

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,20 @@ $.widget("ui.selectable", $.ui.mouse, {
2525
tolerance: 'touch'
2626
},
2727
_create: function() {
28-
var that = this;
28+
var selectees,
29+
that = this;
2930

3031
this.element.addClass("ui-selectable");
3132

3233
this.dragged = false;
3334

3435
// cache selectee children based on filter
35-
var selectees;
3636
this.refresh = function() {
3737
selectees = $(that.options.filter, that.element[0]);
3838
selectees.addClass("ui-selectee");
3939
selectees.each(function() {
40-
var $this = $(this);
41-
var pos = $this.offset();
40+
var $this = $(this),
41+
pos = $this.offset();
4242
$.data(this, "selectable-item", {
4343
element: this,
4444
$element: $this,
@@ -72,14 +72,14 @@ $.widget("ui.selectable", $.ui.mouse, {
7272
},
7373

7474
_mouseStart: function(event) {
75-
var that = this;
75+
var that = this,
76+
options = this.options;
7677

7778
this.opos = [event.pageX, event.pageY];
7879

79-
if (this.options.disabled)
80+
if (this.options.disabled) {
8081
return;
81-
82-
var options = this.options;
82+
}
8383

8484
this.selectees = $(options.filter, this.element[0]);
8585

@@ -114,9 +114,10 @@ $.widget("ui.selectable", $.ui.mouse, {
114114
});
115115

116116
$(event.target).parents().andSelf().each(function() {
117-
var selectee = $.data(this, "selectable-item");
117+
var doSelect,
118+
selectee = $.data(this, "selectable-item");
118119
if (selectee) {
119-
var doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass('ui-selected');
120+
doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass('ui-selected');
120121
selectee.$element
121122
.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
122123
.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
@@ -140,28 +141,37 @@ $.widget("ui.selectable", $.ui.mouse, {
140141
},
141142

142143
_mouseDrag: function(event) {
143-
var that = this;
144+
144145
this.dragged = true;
145146

146-
if (this.options.disabled)
147+
if (this.options.disabled) {
147148
return;
149+
}
148150

149-
var options = this.options;
151+
var tmp,
152+
that = this,
153+
options = this.options,
154+
x1 = this.opos[0],
155+
y1 = this.opos[1],
156+
x2 = event.pageX,
157+
y2 = event.pageY;
150158

151-
var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY;
152-
if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }
153-
if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }
159+
if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
160+
if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
154161
this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
155162

156163
this.selectees.each(function() {
157-
var selectee = $.data(this, "selectable-item");
164+
var selectee = $.data(this, "selectable-item"),
165+
hit = false;
166+
158167
//prevent helper from being selected if appendTo: selectable
159-
if (!selectee || selectee.element == that.element[0])
168+
if (!selectee || selectee.element === that.element[0]) {
160169
return;
161-
var hit = false;
162-
if (options.tolerance == 'touch') {
170+
}
171+
172+
if (options.tolerance === 'touch') {
163173
hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
164-
} else if (options.tolerance == 'fit') {
174+
} else if (options.tolerance === 'fit') {
165175
hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
166176
}
167177

@@ -228,8 +238,6 @@ $.widget("ui.selectable", $.ui.mouse, {
228238

229239
this.dragged = false;
230240

231-
var options = this.options;
232-
233241
$('.ui-unselecting', this.element[0]).each(function() {
234242
var selectee = $.data(this, "selectable-item");
235243
selectee.$element.removeClass('ui-unselecting');

0 commit comments

Comments
 (0)