Skip to content

Commit

Permalink
Added all the tests for isFunction, fixed bug #1026.
Browse files Browse the repository at this point in the history
  • Loading branch information
jeresig committed Mar 16, 2007
1 parent 297a450 commit 7d0a841
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 1 deletion.
76 changes: 76 additions & 0 deletions src/jquery/coreTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,82 @@ test("$()", function() {
$('<p>\r\n</p>');
});

test("isFunction", function() {
expect(20);

// Make sure that false values return false
ok( !jQuery.isFunction(), "No Value" );
ok( !jQuery.isFunction( null ), "null Value" );
ok( !jQuery.isFunction( undefined ), "undefined Value" );
ok( !jQuery.isFunction( "" ), "Empty String Value" );
ok( !jQuery.isFunction( 0 ), "0 Value" );

// Check built-ins
// Safari uses "(Internal Function)"
ok( jQuery.isFunction(String), "String Function" );
ok( jQuery.isFunction(Array), "Array Function" );
ok( jQuery.isFunction(Object), "Object Function" );
ok( jQuery.isFunction(Function), "Function Function" );

// When stringified, this could be misinterpreted
var mystr = "function";
ok( !jQuery.isFunction(mystr), "Function String" );

// When stringified, this could be misinterpreted
var myarr = [ "function" ];
ok( !jQuery.isFunction(myarr), "Function Array" );

// When stringified, this could be misinterpreted
var myfunction = { "function": "test" };
ok( !jQuery.isFunction(myfunction), "Function Object" );

// Make sure normal functions still work
var fn = function(){};
ok( jQuery.isFunction(fn), "Normal Function" );

var obj = document.createElement("object");

// Firefox says this is a function
ok( !jQuery.isFunction(obj), "Object Element" );

// IE says this is an object
ok( jQuery.isFunction(obj.getAttribute), "getAttribute Function" );

var nodes = document.body.childNodes;

// Safari says this is a function
ok( !jQuery.isFunction(nodes), "childNodes Property" );

var first = document.body.firstChild;

// Normal elements are reported ok everywhere
ok( !jQuery.isFunction(first), "A normal DOM Element" );

var input = document.createElement("input");
input.type = "text";
document.body.appendChild( input );

// IE says this is an object
ok( jQuery.isFunction(input.focus), "A default function property" );

document.body.removeChild( input );

// Recursive function calls have lengths and array-like properties
function callme(callback){
function fn(response){
callback(response);
}

ok( jQuery.isFunction(fn), "Recursive Function Call" );

fn({ some: "data" });
};

callme(function(){
callme(function(){});
});
});

test("length", function() {
ok( $("div").length == 2, "Get Number of Elements Found" );
});
Expand Down
2 changes: 1 addition & 1 deletion src/jquery/jquery.js
Original file line number Diff line number Diff line change
Expand Up @@ -1255,7 +1255,7 @@ jQuery.extend({
// is the only cross-browser way to do this. --John
isFunction: function( fn ) {
return !!fn && typeof fn != "string" && !fn.nodeName &&
typeof fn[0] == "undefined" && /function/i.test( fn + "" );
fn.constructor != Array && /function/i.test( fn + "" );
},

// check if an element is in a XML document
Expand Down

0 comments on commit 7d0a841

Please sign in to comment.