mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-11-21 11:04:24 +00:00
248 lines
5.9 KiB
JavaScript
248 lines
5.9 KiB
JavaScript
/*
|
|
* autocomplete_options.js
|
|
*/
|
|
(function($) {
|
|
|
|
module("autocomplete: options", {
|
|
teardown: function() {
|
|
$( ":ui-autocomplete" ).autocomplete( "destroy" );
|
|
}
|
|
});
|
|
|
|
|
|
/* disabled until autocomplete actually has built-in support for caching
|
|
// returns at most 4 items
|
|
function source(request) {
|
|
ok(true, "handling a request");
|
|
switch(request.term) {
|
|
case "cha":
|
|
return ["Common Pochard", "Common Chiffchaff", "Common Chaffinch", "Iberian Chiffchaff"]
|
|
case "chaf":
|
|
case "chaff":
|
|
return ["Common Chiffchaff", "Common Chaffinch", "Iberian Chiffchaff"]
|
|
case "chaffi":
|
|
return ["Common Chaffinch"]
|
|
case "schi":
|
|
return ["schifpre"]
|
|
}
|
|
}
|
|
|
|
function search(input) {
|
|
var autocomplete = input.data("autocomplete");
|
|
autocomplete.search("cha");
|
|
autocomplete.close();
|
|
autocomplete.search("chaf");
|
|
autocomplete.close();
|
|
autocomplete.search("chaff");
|
|
autocomplete.close();
|
|
autocomplete.search("chaffi");
|
|
autocomplete.close();
|
|
autocomplete.search("schi");
|
|
}
|
|
|
|
test("cache: default", function() {
|
|
expect(2);
|
|
search($("#autocomplete").autocomplete({
|
|
source: source
|
|
}));
|
|
});
|
|
|
|
test("cache: {limit:4}", function() {
|
|
expect(3);
|
|
search($("#autocomplete").autocomplete({
|
|
cache: {
|
|
limit: 4
|
|
},
|
|
source: source
|
|
}));
|
|
});
|
|
|
|
test("cache: false", function() {
|
|
expect(5);
|
|
search($("#autocomplete").autocomplete({
|
|
cache: false,
|
|
source: source
|
|
}));
|
|
});
|
|
*/
|
|
|
|
var data = ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby", "python", "c", "scala", "groovy", "haskell", "perl"];
|
|
|
|
test( "appendTo", function() {
|
|
var ac = $( "#autocomplete" ).autocomplete();
|
|
same( ac.autocomplete( "widget" ).parent()[0], document.body, "defaults to body" );
|
|
ac.autocomplete( "destroy" );
|
|
|
|
ac.autocomplete({
|
|
appendTo: "#ac-wrap2"
|
|
});
|
|
same( ac.autocomplete( "widget" ).parent()[0], $( "#ac-wrap2" )[0], "id" );
|
|
ac.autocomplete( "destroy" );
|
|
|
|
ac.autocomplete({
|
|
appendTo: ".ac-wrap"
|
|
});
|
|
same( ac.autocomplete( "widget" ).parent()[0], $( "#ac-wrap1" )[0], "class" );
|
|
same( $( "#ac-wrap2 .ui-autocomplete").length, 0, "class - only appends to one element")
|
|
ac.autocomplete( "destroy" );
|
|
|
|
ac.autocomplete({
|
|
appendTo: null
|
|
});
|
|
same( ac.autocomplete( "widget" ).parent()[0], document.body, "null" );
|
|
ac.autocomplete( "destroy" );
|
|
|
|
ac.autocomplete().autocomplete( "option", "appendTo", "#ac-wrap1" );
|
|
same( ac.autocomplete( "widget" ).parent()[0], $( "#ac-wrap1" )[0], "modified after init" );
|
|
ac.autocomplete( "destroy" );
|
|
});
|
|
|
|
function autoFocusTest( afValue, focusedLength ) {
|
|
var ac = $( "#autocomplete" ).autocomplete({
|
|
autoFocus: afValue,
|
|
delay: 0,
|
|
source: data,
|
|
open: function( event, ui ) {
|
|
equal( ac.autocomplete( "widget" ).children( ".ui-menu-item:first" ).find( ".ui-state-hover" ).length, focusedLength, "first item is " + afValue ? "" : "not" + " auto focused" );
|
|
start();
|
|
}
|
|
});
|
|
ac.val( "ja" ).keydown();
|
|
stop();
|
|
}
|
|
|
|
test( "autoFocus: false", function() {
|
|
autoFocusTest( false, 0 );
|
|
});
|
|
|
|
test( "autoFocus: true", function() {
|
|
autoFocusTest( true, 1 );
|
|
});
|
|
|
|
test("delay", function() {
|
|
var ac = $("#autocomplete").autocomplete({
|
|
source: data,
|
|
delay: 50
|
|
});
|
|
ac.val("ja").keydown();
|
|
|
|
same( $(".ui-menu:visible").length, 0 );
|
|
|
|
// wait half a second for the default delay to open the menu
|
|
stop();
|
|
setTimeout(function() {
|
|
same( $(".ui-menu:visible").length, 1 );
|
|
ac.autocomplete("destroy");
|
|
start();
|
|
}, 100);
|
|
});
|
|
|
|
test("disabled", function() {
|
|
var ac = $("#autocomplete").autocomplete({
|
|
source: data,
|
|
delay: 0,
|
|
disabled: true
|
|
});
|
|
ac.val("ja").keydown();
|
|
|
|
same( $(".ui-menu:visible").length, 0 );
|
|
|
|
stop();
|
|
setTimeout(function() {
|
|
same( $(".ui-menu:visible").length, 0 );
|
|
ac.autocomplete("destroy");
|
|
start();
|
|
}, 50);
|
|
});
|
|
|
|
test("minLength", function() {
|
|
var ac = $("#autocomplete").autocomplete({
|
|
source: data
|
|
});
|
|
ac.autocomplete("search", "");
|
|
same( $(".ui-menu:visible").length, 0, "blank not enough for minLength: 1" );
|
|
|
|
ac.autocomplete("option", "minLength", 0);
|
|
ac.autocomplete("search", "");
|
|
same( $(".ui-menu:visible").length, 1, "blank enough for minLength: 0" );
|
|
ac.autocomplete("destroy");
|
|
});
|
|
|
|
test("source, local string array", function() {
|
|
var ac = $("#autocomplete").autocomplete({
|
|
source: data
|
|
});
|
|
ac.val("ja").autocomplete("search");
|
|
same( $(".ui-menu .ui-menu-item").text(), "javajavascript" );
|
|
ac.autocomplete("destroy");
|
|
});
|
|
|
|
function source_test(source, async) {
|
|
var ac = $("#autocomplete").autocomplete({
|
|
source: source
|
|
});
|
|
ac.val("ja").autocomplete("search");
|
|
function result(){
|
|
same( $(".ui-menu .ui-menu-item").text(), "javajavascript" );
|
|
ac.autocomplete("destroy");
|
|
async && start();
|
|
}
|
|
if (async) {
|
|
stop();
|
|
$(document).one("ajaxStop", result);
|
|
} else {
|
|
result();
|
|
}
|
|
}
|
|
|
|
test("source, local object array, only label property", function() {
|
|
source_test([
|
|
{label:"java"},
|
|
{label:"php"},
|
|
{label:"coldfusion"},
|
|
{label:"javascript"}
|
|
]);
|
|
});
|
|
|
|
test("source, local object array, only value property", function() {
|
|
source_test([
|
|
{value:"java"},
|
|
{value:"php"},
|
|
{value:"coldfusion"},
|
|
{value:"javascript"}
|
|
]);
|
|
});
|
|
|
|
test("source, url string with remote json string array", function() {
|
|
source_test("remote_string_array.txt", true);
|
|
});
|
|
|
|
test("source, url string with remote json object array, only value properties", function() {
|
|
source_test("remote_object_array_values.txt", true);
|
|
});
|
|
|
|
test("source, url string with remote json object array, only label properties", function() {
|
|
source_test("remote_object_array_labels.txt", true);
|
|
});
|
|
|
|
test("source, custom", function() {
|
|
source_test(function(request, response) {
|
|
same( request.term, "ja" );
|
|
response(["java", "javascript"]);
|
|
});
|
|
});
|
|
|
|
test("source, update after init", function() {
|
|
var ac = $("#autocomplete").autocomplete({
|
|
source: ["java", "javascript", "haskell"]
|
|
});
|
|
ac.val("ja").autocomplete("search");
|
|
same( $(".ui-menu .ui-menu-item").text(), "javajavascript" );
|
|
ac.autocomplete("option", "source", ["php", "asp"]);
|
|
ac.val("ph").autocomplete("search");
|
|
same( $(".ui-menu .ui-menu-item").text(), "php" );
|
|
ac.autocomplete("destroy");
|
|
});
|
|
|
|
})(jQuery);
|