]> source.dussan.org Git - jquery.git/commitdiff
Fix #13150, .has() w/o args checks for any callbacks. Close gh-1111.
authoradamcoulombe <adamcoulombe187@hotmail.com>
Thu, 3 Jan 2013 22:05:00 +0000 (17:05 -0500)
committerDave Methvin <dave.methvin@gmail.com>
Sun, 27 Jan 2013 18:35:30 +0000 (13:35 -0500)
src/callbacks.js
test/unit/callbacks.js

index 58f1402a842ae07fba5a7826ba073eb01909fc82..2bb378047804002991ef484d45917cbb19a931e2 100644 (file)
@@ -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() {
index bd61207ae3d1f16af90730ec3c7e26810130a1bf..9482832db23950a4ccba40577a8c32a266df93d3 100644 (file)
@@ -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 );