Skip to content
Permalink
Browse files

Fix #13150, .has() w/o args checks for any callbacks. Close gh-1111.

  • Loading branch information...
adamcoulombe authored and dmethvin committed Jan 3, 2013
1 parent 64b55f0 commit 54fc5fdfa2e07fb08f2652f4b48d51ffc2999938
Showing with 50 additions and 2 deletions.
  1. +3 −2 src/callbacks.js
  2. +47 −0 test/unit/callbacks.js
@@ -137,9 +137,10 @@ jQuery.Callbacks = function( options ) {
}
return this;
},
// Control if a given callback is in the list
// Check if a given callback is in the list.
// If no argument is given, return whether or not list has callbacks attached.
has: function( fn ) {
return jQuery.inArray( fn, list ) > -1;
return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
},
// Remove all callbacks from the list
empty: function() {
@@ -269,6 +269,53 @@ test( "jQuery.Callbacks.remove - should remove all instances", function() {
}).remove( fn ).fire();
});

test( "jQuery.Callbacks.has", function() {

expect( 13 );

var cb = jQuery.Callbacks();
function getA() {
return "A";
}
function getB() {
return "B";
}
function getC() {
return "C";
}
cb.add(getA, getB, getC);
strictEqual( cb.has(), true, "No arguments to .has() returns whether callback function(s) are attached or not" );
strictEqual( cb.has(getA), true, "Check if a specific callback function is in the Callbacks list" );

cb.remove(getB);
strictEqual( cb.has(getB), false, "Remove a specific callback function and make sure its no longer there" );
strictEqual( cb.has(getA), true, "Remove a specific callback function and make sure other callback function is still there" );

cb.empty();
strictEqual( cb.has(), false, "Empty list and make sure there are no callback function(s)" );
strictEqual( cb.has(getA), false, "Check for a specific function in an empty() list" );

cb.add(getA, getB, function(){
strictEqual( cb.has(), true, "Check if list has callback function(s) from within a callback function" );
strictEqual( cb.has(getA), true, "Check if list has a specific callback from within a callback function" );
}).fire();

strictEqual( cb.has(), true, "Callbacks list has callback function(s) after firing" );

cb.disable();
strictEqual( cb.has(), false, "disabled() list has no callback functions (returns false)" );
strictEqual( cb.has(getA), false, "Check for a specific function in a disabled() list" );

cb = jQuery.Callbacks("unique");
cb.add(getA);
cb.add(getA);
strictEqual( cb.has(), true, "Check if unique list has callback function(s) attached" );
cb.lock();
strictEqual( cb.has(), false, "locked() list is empty and returns false" );


});

test( "jQuery.Callbacks() - adding a string doesn't cause a stack overflow", function() {

expect( 1 );

0 comments on commit 54fc5fd

Please sign in to comment.
You can’t perform that action at this time.