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

196 lines
5.5 KiB
JavaScript
Raw Normal View History

define( [
2016-04-03 14:51:14 +00:00
"qunit",
"jquery",
"lib/helper",
"ui/widgets/autocomplete"
], function( QUnit, $, helper ) {
"use strict";
2010-01-20 14:00:14 +00:00
QUnit.module( "autocomplete: events", { afterEach: helper.moduleAfterEach } );
2010-01-20 14:00:14 +00:00
var data = [ "Clojure", "COBOL", "ColdFusion", "Java", "JavaScript", "Scala", "Scheme" ];
2010-01-20 14:00:14 +00:00
$.each( [
{
type: "input",
selector: "#autocomplete",
valueMethod: "val"
},
{
type: "textarea",
selector: "#autocomplete-textarea",
valueMethod: "val"
},
{
type: "contenteditable",
selector: "#autocomplete-contenteditable",
valueMethod: "text"
}
], function( i, settings ) {
2016-04-03 14:51:14 +00:00
QUnit.test( "all events - " + settings.type, function( assert ) {
var ready = assert.async();
assert.expect( 13 );
var element = $( settings.selector )
.autocomplete( {
autoFocus: false,
delay: 0,
source: data,
search: function( event ) {
2016-04-03 14:51:14 +00:00
assert.equal( event.originalEvent.type, "keydown", "search originalEvent" );
},
response: function( event, ui ) {
2016-04-03 14:51:14 +00:00
assert.deepEqual( ui.content, [
{ label: "Clojure", value: "Clojure" },
{ label: "Java", value: "Java" },
{ label: "JavaScript", value: "JavaScript" }
], "response ui.content" );
ui.content.splice( 0, 1 );
},
open: function() {
2016-04-03 14:51:14 +00:00
assert.ok( menu.is( ":visible" ), "menu open on open" );
},
focus: function( event, ui ) {
2016-04-03 14:51:14 +00:00
assert.equal( event.originalEvent.type, "menufocus", "focus originalEvent" );
assert.deepEqual( ui.item, { label: "Java", value: "Java" }, "focus ui.item" );
},
close: function( event ) {
2016-04-03 14:51:14 +00:00
assert.equal( event.originalEvent.type, "menuselect", "close originalEvent" );
assert.ok( menu.is( ":hidden" ), "menu closed on close" );
},
select: function( event, ui ) {
2016-04-03 14:51:14 +00:00
assert.equal( event.originalEvent.type, "menuselect", "select originalEvent" );
assert.deepEqual( ui.item, { label: "Java", value: "Java" }, "select ui.item" );
},
change: function( event, ui ) {
2016-04-03 14:51:14 +00:00
assert.equal( event.originalEvent.type, "blur", "change originalEvent" );
assert.deepEqual( ui.item, { label: "Java", value: "Java" }, "change ui.item" );
assert.ok( menu.is( ":hidden" ), "menu closed on change" );
ready();
}
} ),
menu = element.autocomplete( "widget" );
element.simulate( "focus" )[ settings.valueMethod ]( "j" ).trigger( "keydown" );
setTimeout( function() {
2016-04-03 14:51:14 +00:00
assert.ok( menu.is( ":visible" ), "menu is visible after delay" );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
// Blur must be async for IE to handle it properly
setTimeout( function() {
element.simulate( "blur" );
} );
} );
} );
} );
2010-01-20 14:00:14 +00:00
2016-04-03 14:51:14 +00:00
QUnit.test( "change without selection", function( assert ) {
var ready = assert.async();
assert.expect( 1 );
var element = $( "#autocomplete" ).autocomplete( {
delay: 0,
source: data,
2011-06-13 18:09:44 +00:00
change: function( event, ui ) {
2016-04-03 14:51:14 +00:00
assert.strictEqual( ui.item, null );
ready();
}
} );
2011-06-13 18:09:44 +00:00
element.triggerHandler( "focus" );
element.val( "ja" ).triggerHandler( "blur" );
} );
2016-04-03 14:51:14 +00:00
QUnit.test( "cancel search", function( assert ) {
var ready = assert.async();
assert.expect( 6 );
2011-06-13 18:09:44 +00:00
var first = true,
element = $( "#autocomplete" ).autocomplete( {
2011-06-13 18:09:44 +00:00
delay: 0,
source: data,
search: function() {
if ( first ) {
2016-04-03 14:51:14 +00:00
assert.equal( element.val(), "ja", "val on first search" );
2011-06-13 18:09:44 +00:00
first = false;
return false;
}
2016-04-03 14:51:14 +00:00
assert.equal( element.val(), "java", "val on second search" );
2011-06-13 18:09:44 +00:00
},
open: function() {
2016-04-03 14:51:14 +00:00
assert.ok( true, "menu opened" );
2010-01-20 14:00:14 +00:00
}
} ),
2011-06-13 18:09:44 +00:00
menu = element.autocomplete( "widget" );
element.val( "ja" ).trigger( "keydown" );
setTimeout( function() {
2016-04-03 14:51:14 +00:00
assert.ok( menu.is( ":hidden" ), "menu is hidden after first search" );
element.val( "java" ).trigger( "keydown" );
setTimeout( function() {
2016-04-03 14:51:14 +00:00
assert.ok( menu.is( ":visible" ), "menu is visible after second search" );
assert.equal( menu.find( ".ui-menu-item" ).length, 2, "# of menu items" );
ready();
} );
} );
} );
2010-01-20 14:00:14 +00:00
2016-04-03 14:51:14 +00:00
QUnit.test( "cancel focus", function( assert ) {
var ready = assert.async();
assert.expect( 1 );
2012-04-19 14:50:09 +00:00
var customVal = "custom value",
element = $( "#autocomplete" ).autocomplete( {
2011-06-13 18:09:44 +00:00
delay: 0,
source: data,
focus: function() {
2011-06-13 18:09:44 +00:00
$( this ).val( customVal );
return false;
}
} );
element.val( "ja" ).trigger( "keydown" );
setTimeout( function() {
2011-06-13 18:09:44 +00:00
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
2016-04-03 14:51:14 +00:00
assert.equal( element.val(), customVal );
ready();
} );
} );
2010-01-20 14:00:14 +00:00
2016-04-03 14:51:14 +00:00
QUnit.test( "cancel select", function( assert ) {
var ready = assert.async();
assert.expect( 1 );
2011-06-13 18:09:44 +00:00
var customVal = "custom value",
element = $( "#autocomplete" ).autocomplete( {
2011-06-13 18:09:44 +00:00
delay: 0,
source: data,
select: function() {
2011-06-13 18:09:44 +00:00
$( this ).val( customVal );
return false;
}
} );
element.val( "ja" ).trigger( "keydown" );
setTimeout( function() {
2011-06-13 18:09:44 +00:00
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
2016-04-03 14:51:14 +00:00
assert.equal( element.val(), customVal );
ready();
} );
} );
2010-01-20 14:00:14 +00:00
2016-04-03 14:51:14 +00:00
QUnit.test( "blur during remote search", function( assert ) {
var ready = assert.async();
assert.expect( 1 );
var ac = $( "#autocomplete" ).autocomplete( {
delay: 0,
source: function( request, response ) {
2016-04-03 14:51:14 +00:00
assert.ok( true, "trigger request" );
ac.simulate( "blur" );
setTimeout( function() {
response( [ "result" ] );
2016-04-03 14:51:14 +00:00
ready();
}, 25 );
},
open: function() {
2016-04-03 14:51:14 +00:00
assert.ok( false, "opened after a blur" );
}
} );
ac.val( "ro" ).trigger( "keydown" );
} );
} );