Fixes #7229 and #5803
[jquery.git] / test / unit / event.js
index a51659c..5efa0ec 100644 (file)
@@ -1,5 +1,25 @@
 module("event");
 
+test("null or undefined handler", function() {
+       expect(2);
+  // Supports Fixes bug #7229
+  try {
+  
+    jQuery("#firstp").click(null);
+  
+    ok(true, "Passing a null handler will not throw an exception");
+
+  } catch (e) {}  
+
+  try {
+  
+    jQuery("#firstp").click(undefined);
+  
+    ok(true, "Passing an undefined handler will not throw an exception");
+
+  } catch (e) {}  
+});
+
 test("bind(), with data", function() {
        expect(3);
        var handler = function(event) {
@@ -1238,6 +1258,8 @@ test("live with namespaces", function(){
 });
 
 test("live with change", function(){
+       expect(8);
+
        var selectChange = 0, checkboxChange = 0;
        
        var select = jQuery("select[name='S1']")
@@ -1269,28 +1291,13 @@ test("live with change", function(){
        checkbox.trigger("change");
        equals( checkboxChange, 1, "Change on checkbox." );
        
-       // test before activate on radio
-       
-       // test blur/focus on textarea
-       var textarea = jQuery("#area1"), textareaChange = 0, oldVal = textarea.val();
-       textarea.live("change", function() {
-               textareaChange++;
-       });
-
-       textarea.val(oldVal + "foo");
-       textarea.trigger("change");
-       equals( textareaChange, 1, "Change on textarea." );
-
-       textarea.val(oldVal);
-       textarea.die("change");
-       
        // test blur/focus on text
        var text = jQuery("#name"), textChange = 0, oldTextVal = text.val();
        text.live("change", function() {
                textChange++;
        });
 
-       text.val(oldVal+"foo");
+       text.val(oldTextVal+"foo");
        text.trigger("change");
        equals( textChange, 1, "Change on text input." );
 
@@ -1707,6 +1714,8 @@ test("delegate with multiple events", function(){
 });
 
 test("delegate with change", function(){
+       expect(8);
+
        var selectChange = 0, checkboxChange = 0;
        
        var select = jQuery("select[name='S1']");
@@ -1738,28 +1747,13 @@ test("delegate with change", function(){
        checkbox.trigger("change");
        equals( checkboxChange, 1, "Change on checkbox." );
        
-       // test before activate on radio
-       
-       // test blur/focus on textarea
-       var textarea = jQuery("#area1"), textareaChange = 0, oldVal = textarea.val();
-       jQuery("#body").delegate("#area1", "change", function() {
-               textareaChange++;
-       });
-
-       textarea.val(oldVal + "foo");
-       textarea.trigger("change");
-       equals( textareaChange, 1, "Change on textarea." );
-
-       textarea.val(oldVal);
-       jQuery("#body").undelegate("#area1", "change");
-       
        // test blur/focus on text
        var text = jQuery("#name"), textChange = 0, oldTextVal = text.val();
        jQuery("#body").delegate("#name", "change", function() {
                textChange++;
        });
 
-       text.val(oldVal+"foo");
+       text.val(oldTextVal+"foo");
        text.trigger("change");
        equals( textChange, 1, "Change on text input." );
 
@@ -1844,6 +1838,26 @@ test("window resize", function() {
        ok( !jQuery(window).data("__events__"), "Make sure all the events are gone." );
 });
 
+test("focusin bubbles", function() {
+       //create an input and focusin on it
+       var input = jQuery("<input/>"), order = 0;
+
+       input.prependTo("body");
+
+       jQuery("body").bind("focusin.focusinBubblesTest",function(){
+               equals(1,order++,"focusin on the body second")
+       });
+
+       input.bind("focusin.focusinBubblesTest",function(){
+               equals(0,order++,"focusin on the element first")
+       });
+
+       input[0].focus();
+       input.remove();
+
+       jQuery("body").unbind("focusin.focusinBubblesTest");
+});
+
 /*
 test("jQuery(function($) {})", function() {
        stop();