jquery-ui/tests/unit/sortable/events.js

385 lines
10 KiB
JavaScript
Raw Normal View History

define( [
2016-04-06 13:22:59 +00:00
"qunit",
"jquery",
"lib/helper",
2015-04-07 14:55:52 +00:00
"./helper",
"ui/widgets/sortable",
"ui/widgets/draggable"
], function( QUnit, $, helper, testHelper ) {
"use strict";
QUnit.module( "sortable: events", { afterEach: helper.moduleAfterEach } );
2016-04-06 13:22:59 +00:00
QUnit.test( "start", function( assert ) {
assert.expect( 7 );
2012-04-19 02:46:39 +00:00
var hash;
2015-08-24 12:57:53 +00:00
$( "#sortable" ).sortable( {
start: function( e, ui ) {
hash = ui;
}
} ).find( "li" ).eq( 0 ).simulate( "drag", {
dy: 10
2015-08-24 12:57:53 +00:00
} );
2012-04-19 02:46:39 +00:00
2016-04-06 13:22:59 +00:00
assert.ok( hash, "start event triggered" );
assert.ok( hash.helper, "UI hash includes: helper" );
assert.ok( hash.placeholder, "UI hash includes: placeholder" );
assert.ok( hash.item, "UI hash includes: item" );
assert.ok( !hash.sender, "UI hash does not include: sender" );
// Todo: see if these events should actually have sane values in them
2016-04-06 13:22:59 +00:00
assert.ok( "position" in hash, "UI hash includes: position" );
assert.ok( "offset" in hash, "UI hash includes: offset" );
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
QUnit.test( "sort", function( assert ) {
assert.expect( 7 );
2012-04-19 02:46:39 +00:00
var hash;
2015-08-24 12:57:53 +00:00
$( "#sortable" ).sortable( {
sort: function( e, ui ) {
hash = ui;
}
} ).find( "li" ).eq( 0 ).simulate( "drag", {
dy: 10
2015-08-24 12:57:53 +00:00
} );
2012-04-19 02:46:39 +00:00
2016-04-06 13:22:59 +00:00
assert.ok( hash, "sort event triggered" );
assert.ok( hash.helper, "UI hash includes: helper" );
assert.ok( hash.placeholder, "UI hash includes: placeholder" );
assert.ok( hash.position && ( "top" in hash.position && "left" in hash.position ), "UI hash includes: position" );
assert.ok( hash.offset && ( hash.offset.top && hash.offset.left ), "UI hash includes: offset" );
assert.ok( hash.item, "UI hash includes: item" );
assert.ok( !hash.sender, "UI hash does not include: sender" );
2012-04-19 02:46:39 +00:00
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
QUnit.test( "change", function( assert ) {
assert.expect( 8 );
2012-04-19 02:46:39 +00:00
var hash;
2015-08-24 12:57:53 +00:00
$( "#sortable" ).sortable( {
change: function( e, ui ) {
hash = ui;
}
} ).find( "li" ).eq( 0 ).simulate( "drag", {
dx: 1,
dy: 1
2015-08-24 12:57:53 +00:00
} );
2012-04-19 02:46:39 +00:00
2016-04-06 13:22:59 +00:00
assert.ok( !hash, "1px drag, change event should not be triggered" );
2012-04-19 02:46:39 +00:00
2015-08-24 12:57:53 +00:00
$( "#sortable" ).sortable( {
change: function( e, ui ) {
hash = ui;
}
} ).find( "li" ).eq( 0 ).simulate( "drag", {
dy: 22
2015-08-24 12:57:53 +00:00
} );
2012-04-19 02:46:39 +00:00
2016-04-06 13:22:59 +00:00
assert.ok( hash, "change event triggered" );
assert.ok( hash.helper, "UI hash includes: helper" );
assert.ok( hash.placeholder, "UI hash includes: placeholder" );
assert.ok( hash.position && ( "top" in hash.position && "left" in hash.position ), "UI hash includes: position" );
assert.ok( hash.offset && ( hash.offset.top && hash.offset.left ), "UI hash includes: offset" );
assert.ok( hash.item, "UI hash includes: item" );
assert.ok( !hash.sender, "UI hash does not include: sender" );
2012-04-19 02:46:39 +00:00
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
QUnit.test( "beforeStop", function( assert ) {
assert.expect( 7 );
2012-04-19 02:46:39 +00:00
var hash;
2015-08-24 12:57:53 +00:00
$( "#sortable" ).sortable( {
beforeStop: function( e, ui ) {
hash = ui;
}
} ).find( "li" ).eq( 0 ).simulate( "drag", {
dy: 20
2015-08-24 12:57:53 +00:00
} );
2012-04-19 02:46:39 +00:00
2016-04-06 13:22:59 +00:00
assert.ok( hash, "beforeStop event triggered" );
assert.ok( hash.helper, "UI hash includes: helper" );
assert.ok( hash.placeholder, "UI hash includes: placeholder" );
assert.ok( hash.position && ( "top" in hash.position && "left" in hash.position ), "UI hash includes: position" );
assert.ok( hash.offset && ( hash.offset.top && hash.offset.left ), "UI hash includes: offset" );
assert.ok( hash.item, "UI hash includes: item" );
assert.ok( !hash.sender, "UI hash does not include: sender" );
2012-04-19 02:46:39 +00:00
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
QUnit.test( "stop", function( assert ) {
assert.expect( 7 );
2012-04-19 02:46:39 +00:00
var hash;
2015-08-24 12:57:53 +00:00
$( "#sortable" ).sortable( {
stop: function( e, ui ) {
hash = ui;
}
} ).find( "li" ).eq( 0 ).simulate( "drag", {
dy: 20
2015-08-24 12:57:53 +00:00
} );
2012-04-19 02:46:39 +00:00
2016-04-06 13:22:59 +00:00
assert.ok( hash, "stop event triggered" );
assert.ok( !hash.helper, "UI should not include: helper" );
assert.ok( hash.placeholder, "UI hash includes: placeholder" );
assert.ok( hash.position && ( "top" in hash.position && "left" in hash.position ), "UI hash includes: position" );
assert.ok( hash.offset && ( hash.offset.top && hash.offset.left ), "UI hash includes: offset" );
assert.ok( hash.item, "UI hash includes: item" );
assert.ok( !hash.sender, "UI hash does not include: sender" );
2012-04-19 02:46:39 +00:00
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
QUnit.test( "update", function( assert ) {
assert.expect( 8 );
2012-04-19 02:46:39 +00:00
var hash;
2015-08-24 12:57:53 +00:00
$( "#sortable" ).sortable( {
update: function( e, ui ) {
hash = ui;
}
} ).find( "li" ).eq( 0 ).simulate( "drag", {
dx: 1,
dy: 1
2015-08-24 12:57:53 +00:00
} );
2012-04-19 02:46:39 +00:00
2016-04-06 13:22:59 +00:00
assert.ok( !hash, "1px drag, update event should not be triggered" );
2012-04-19 02:46:39 +00:00
2015-08-24 12:57:53 +00:00
$( "#sortable" ).sortable( {
update: function( e, ui ) {
hash = ui;
}
} ).find( "li" ).eq( 0 ).simulate( "drag", {
dy: 22
2015-08-24 12:57:53 +00:00
} );
2012-04-19 02:46:39 +00:00
2016-04-06 13:22:59 +00:00
assert.ok( hash, "update event triggered" );
assert.ok( !hash.helper, "UI hash should not include: helper" );
assert.ok( hash.placeholder, "UI hash includes: placeholder" );
assert.ok( hash.position && ( "top" in hash.position && "left" in hash.position ), "UI hash includes: position" );
assert.ok( hash.offset && ( hash.offset.top && hash.offset.left ), "UI hash includes: offset" );
assert.ok( hash.item, "UI hash includes: item" );
assert.ok( !hash.sender, "UI hash does not include: sender" );
2012-04-19 02:46:39 +00:00
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
QUnit.test( "#3019: Stop fires too early", function( assert ) {
assert.expect( 2 );
var helper = null,
2015-08-24 12:57:53 +00:00
el = $( "#sortable" ).sortable( {
stop: function( event, ui ) {
helper = ui.helper;
}
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
testHelper.sort( assert, $( "li", el )[ 0 ], 0, 44, 2, "Dragging the sortable" );
assert.equal( helper, null, "helper should be false" );
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
QUnit.test( "#4752: link event firing on sortable with connect list", function( assert ) {
assert.expect( 10 );
var fired = {},
hasFired = function( type ) {
return ( type in fired ) && ( true === fired[ type ] );
};
2015-08-24 12:57:53 +00:00
$( "#sortable" ).clone().attr( "id", "sortable2" ).insertAfter( "#sortable" );
2015-08-24 12:57:53 +00:00
$( "#qunit-fixture ul" ).sortable( {
connectWith: "#qunit-fixture ul",
2015-08-24 12:57:53 +00:00
change: function() {
fired.change = true;
},
2015-08-24 12:57:53 +00:00
receive: function() {
fired.receive = true;
},
2015-08-24 12:57:53 +00:00
remove: function() {
fired.remove = true;
}
2015-08-24 12:57:53 +00:00
} );
2015-08-24 12:57:53 +00:00
$( "#qunit-fixture ul" ).on( "click.ui-sortable-test", function() {
fired.click = true;
2015-08-24 12:57:53 +00:00
} );
$( "#sortable li" ).eq( 0 ).simulate( "click" );
2016-04-06 13:22:59 +00:00
assert.ok( !hasFired( "change" ), "Click only, change event should not have fired" );
assert.ok( hasFired( "click" ), "Click event should have fired" );
// Drag an item within the first list
fired = {};
$( "#sortable li" ).eq( 0 ).simulate( "drag", { dx: 0, dy: 40 } );
2016-04-06 13:22:59 +00:00
assert.ok( hasFired( "change" ), "40px drag, change event should have fired" );
assert.ok( !hasFired( "receive" ), "Receive event should not have fired" );
assert.ok( !hasFired( "remove" ), "Remove event should not have fired" );
assert.ok( !hasFired( "click" ), "Click event should not have fired" );
// Drag an item from the first list to the second, connected list
fired = {};
$( "#sortable li" ).eq( 0 ).simulate( "drag", { dx: 0, dy: 150 } );
2016-04-06 13:22:59 +00:00
assert.ok( hasFired( "change" ), "150px drag, change event should have fired" );
assert.ok( hasFired( "receive" ), "Receive event should have fired" );
assert.ok( hasFired( "remove" ), "Remove event should have fired" );
assert.ok( !hasFired( "click" ), "Click event should not have fired" );
2015-08-24 12:57:53 +00:00
} );
/*
2016-04-06 13:22:59 +00:00
Test("receive", function() {
ok(false, "missing test - untested code is broken code.");
});
test("remove", function() {
ok(false, "missing test - untested code is broken code.");
});
*/
2016-04-06 13:22:59 +00:00
QUnit.test( "over", function( assert ) {
assert.expect( 8 );
var hash,
overCount = 0;
2015-08-24 12:57:53 +00:00
$( "#sortable" ).sortable( {
over: function( e, ui ) {
hash = ui;
overCount++;
}
} ).find( "li" ).eq( 0 ).simulate( "drag", {
dy: 20
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
assert.ok( hash, "over event triggered" );
assert.ok( hash.helper, "UI includes: helper" );
assert.ok( hash.placeholder, "UI hash includes: placeholder" );
assert.ok( hash.position && ( "top" in hash.position && "left" in hash.position ), "UI hash includes: position" );
assert.ok( hash.offset && ( hash.offset.top && hash.offset.left ), "UI hash includes: offset" );
assert.ok( hash.item, "UI hash includes: item" );
assert.ok( hash.sender, "UI hash includes: sender" );
assert.equal( overCount, 1, "over fires only once" );
2015-08-24 12:57:53 +00:00
} );
// https://bugs.jqueryui.com/ticket/9335
// Sortable: over & out events does not consistently fire
2016-04-06 13:22:59 +00:00
QUnit.test( "over, fires with draggable connected to sortable", function( assert ) {
assert.expect( 3 );
var hash,
overCount = 0,
item = $( "<div></div>" ).text( "6" ).insertAfter( "#sortable" );
2015-08-24 12:57:53 +00:00
item.draggable( {
connectToSortable: "#sortable"
2015-08-24 12:57:53 +00:00
} );
$( ".connectWith" ).sortable( {
connectWith: ".connectWith",
over: function( event, ui ) {
hash = ui;
overCount++;
}
2015-08-24 12:57:53 +00:00
} );
item.simulate( "drag", {
dy: -20
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
assert.ok( hash, "over event triggered" );
assert.ok( !hash.sender, "UI should not include: sender" );
assert.equal( overCount, 1, "over fires only once" );
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
QUnit.test( "over, with connected sortable", function( assert ) {
assert.expect( 3 );
var hash,
overCount = 0;
2015-08-24 12:57:53 +00:00
$( ".connectWith" ).sortable( {
connectWith: ".connectWith"
2015-08-24 12:57:53 +00:00
} );
$( "#sortable2" ).on( "sortover", function( event, ui ) {
hash = ui;
overCount++;
2015-08-24 12:57:53 +00:00
} );
$( "#sortable" ).find( "li" ).eq( 0 ).simulate( "drag", {
dy: 102
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
assert.ok( hash, "over event triggered" );
assert.equal( hash.sender[ 0 ], $( " #sortable" )[ 0 ], "UI includes: sender" );
assert.equal( overCount, 1, "over fires only once" );
2015-08-24 12:57:53 +00:00
} );
/*
2016-04-06 13:22:59 +00:00
Test("out", function() {
ok(false, "missing test - untested code is broken code.");
});
*/
2016-04-06 13:22:59 +00:00
QUnit.test( "out, with connected sortable", function( assert ) {
assert.expect( 2 );
var hash,
outCount = 0;
2015-08-24 12:57:53 +00:00
$( ".connectWith" ).sortable( {
connectWith: ".connectWith"
2015-08-24 12:57:53 +00:00
} );
$( "#sortable" ).on( "sortout", function( event, ui ) {
hash = ui;
outCount++;
2015-08-24 12:57:53 +00:00
} );
$( "#sortable" ).find( "li" ).last().simulate( "drag", {
dy: 40
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
assert.ok( hash, "out event triggered" );
assert.equal( outCount, 1, "out fires only once" );
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
QUnit.test( "repeated out & over between connected sortables", function( assert ) {
assert.expect( 2 );
var outCount = 0,
overCount = 0;
2015-08-24 12:57:53 +00:00
$( ".connectWith" ).sortable( {
connectWith: ".connectWith",
over: function() {
overCount++;
},
out: function( event, ui ) {
2015-08-24 12:57:53 +00:00
// Ignore events that trigger when an item has dropped
// checking for the presence of the helper.
if ( !ui.helper ) {
outCount++;
}
}
2015-08-24 12:57:53 +00:00
} );
$( "#sortable" ).find( "li" ).last().simulate( "drag", {
dy: 40
2015-08-24 12:57:53 +00:00
} ).simulate( "drag", {
dy: -40
2015-08-24 12:57:53 +00:00
} );
2016-04-06 13:22:59 +00:00
assert.equal( outCount, 2, "out fires twice" );
assert.equal( overCount, 4, "over fires four times" );
2015-08-24 12:57:53 +00:00
} );
/*
2016-04-06 13:22:59 +00:00
Test("activate", function() {
ok(false, "missing test - untested code is broken code.");
});
test("deactivate", function() {
ok(false, "missing test - untested code is broken code.");
});
*/
} );