Rewrote the live/delegate submit tests to be more generic.
[jquery.git] / test / unit / event.js
index a9c8815..3d401ba 100644 (file)
@@ -978,17 +978,20 @@ test(".live()/.die()", function() {
        jQuery("#nothiddendiv").trigger("click");
        equals( called, 1, "Verify that only one click occurred." );
 
+       called = 0;
        jQuery("#anchor2").trigger("click");
-       equals( called, 2, "Verify that only one click occurred." );
+       equals( called, 1, "Verify that only one click occurred." );
 
        // Make sure that only one callback is removed
        jQuery("#anchor2").die("click", callback);
 
+       called = 0;
        jQuery("#nothiddendiv").trigger("click");
-       equals( called, 3, "Verify that only one click occurred." );
+       equals( called, 1, "Verify that only one click occurred." );
 
+       called = 0;
        jQuery("#anchor2").trigger("click");
-       equals( called, 3, "Verify that no click occurred." );
+       equals( called, 0, "Verify that no click occurred." );
 
        // Make sure that it still works if the selector is the same,
        // but the event type is different
@@ -997,11 +1000,13 @@ test(".live()/.die()", function() {
        // Cleanup
        jQuery("#nothiddendiv").die("click", callback);
 
+       called = 0;
        jQuery("#nothiddendiv").trigger("click");
-       equals( called, 3, "Verify that no click occurred." );
+       equals( called, 0, "Verify that no click occurred." );
 
+       called = 0;
        jQuery("#nothiddendiv").trigger("foo");
-       equals( called, 4, "Verify that one foo occurred." );
+       equals( called, 1, "Verify that one foo occurred." );
 
        // Cleanup
        jQuery("#nothiddendiv").die("foo", callback);
@@ -1135,41 +1140,55 @@ test("live with multiple events", function(){
 });
 
 test("live with namespaces", function(){
-       expect(6);
+       expect(12);
 
        var count1 = 0, count2 = 0;
 
-       jQuery("#liveSpan1").live("foo.bar", function(){
+       jQuery("#liveSpan1").live("foo.bar", function(e){
                count1++;
        });
 
-       jQuery("#liveSpan2").live("foo.zed", function(){
+       jQuery("#liveSpan1").live("foo.zed", function(e){
                count2++;
        });
 
        jQuery("#liveSpan1").trigger("foo.bar");
        equals( count1, 1, "Got live foo.bar" );
+       equals( count2, 0, "Got live foo.bar" );
 
-       jQuery("#liveSpan2").trigger("foo.zed");
+       count1 = 0, count2 = 0;
+
+       jQuery("#liveSpan1").trigger("foo.zed");
+       equals( count1, 0, "Got live foo.zed" );
        equals( count2, 1, "Got live foo.zed" );
 
        //remove one
-       jQuery("#liveSpan2").die("foo.zed");
+       count1 = 0, count2 = 0;
+
+       jQuery("#liveSpan1").die("foo.zed");
        jQuery("#liveSpan1").trigger("foo.bar");
 
-       equals( count1, 2, "Got live foo.bar after dieing foo.zed" );
+       equals( count1, 1, "Got live foo.bar after dieing foo.zed" );
+       equals( count2, 0, "Got live foo.bar after dieing foo.zed" );
 
-       jQuery("#liveSpan2").trigger("foo.zed");
-       equals( count2, 1, "Got live foo.zed" );
+       count1 = 0, count2 = 0;
+
+       jQuery("#liveSpan1").trigger("foo.zed");
+       equals( count1, 0, "Got live foo.zed" );
+       equals( count2, 0, "Got live foo.zed" );
 
        //remove the other
        jQuery("#liveSpan1").die("foo.bar");
 
+       count1 = 0, count2 = 0;
+
        jQuery("#liveSpan1").trigger("foo.bar");
-       equals( count1, 2, "Did not respond to foo.bar after dieing it" );
+       equals( count1, 0, "Did not respond to foo.bar after dieing it" );
+       equals( count2, 0, "Did not respond to foo.bar after dieing it" );
 
-       jQuery("#liveSpan2").trigger("foo.zed");
-       equals( count2, 1, "Did not trigger foo.zed again" );
+       jQuery("#liveSpan1").trigger("foo.zed");
+       equals( count1, 0, "Did not trigger foo.zed again" );
+       equals( count2, 0, "Did not trigger foo.zed again" );
 });
 
 test("live with change", function(){
@@ -1278,21 +1297,64 @@ test("live with submit", function() {
                ev.preventDefault();
        });
 
-       if ( jQuery.support.submitBubbles ) {
-               jQuery("#testForm input[name=sub1]")[0].click();
-               equals(count1,1 );
-               equals(count2,1);
-       } else {
-               jQuery("#testForm input[name=sub1]")[0].click();
-               jQuery("#testForm input[name=T1]").trigger({type: "keypress", keyCode: 13});
-               equals(count1,2);
-               equals(count2,2);
-       }
+       jQuery("#testForm input[name=sub1]").submit();
+       equals( count1, 1, "Verify form submit." );
+       equals( count2, 1, "Verify body submit." );
        
        jQuery("#testForm").die("submit");
        jQuery("body").die("submit");
 });
 
+test("live with special events", function() {
+       expect(13);
+
+       jQuery.event.special.foo = {
+               setup: function( data, namespaces, handler ) {
+                       ok( true, "Setup run." );
+               },
+               teardown: function( namespaces ) {
+                       ok( true, "Teardown run." );
+               },
+               add: function( handleObj ) {
+                       ok( true, "Add run." );
+               },
+               remove: function( handleObj ) {
+                       ok( true, "Remove run." );
+               },
+               _default: function( event ) {
+                       ok( true, "Default run." );
+               }
+       };
+
+       // Run: setup, add
+       jQuery("#liveSpan1").live("foo.a", function(e){
+               ok( true, "Handler 1 run." );
+       });
+
+       // Run: add
+       jQuery("#liveSpan1").live("foo.b", function(e){
+               ok( true, "Handler 2 run." );
+       });
+
+       // Run: Handler 1, Handler 2, Default
+       jQuery("#liveSpan1").trigger("foo");
+
+       // Run: Handler 1, Default
+       // TODO: Namespace doesn't trigger default (?)
+       jQuery("#liveSpan1").trigger("foo.a");
+
+       // Run: remove
+       jQuery("#liveSpan1").die("foo.a");
+
+       // Run: Handler 2, Default
+       jQuery("#liveSpan1").trigger("foo");
+
+       // Run: remove, teardown
+       jQuery("#liveSpan1").die("foo");
+
+       delete jQuery.event.special.foo;
+});
+
 test(".delegate()/.undelegate()", function() {
        expect(65);
 
@@ -1446,17 +1508,20 @@ test(".delegate()/.undelegate()", function() {
        jQuery("#nothiddendiv").trigger("click");
        equals( called, 1, "Verify that only one click occurred." );
 
+       called = 0;
        jQuery("#anchor2").trigger("click");
-       equals( called, 2, "Verify that only one click occurred." );
+       equals( called, 1, "Verify that only one click occurred." );
 
        // Make sure that only one callback is removed
        jQuery("#body").undelegate("#anchor2", "click", callback);
 
+       called = 0;
        jQuery("#nothiddendiv").trigger("click");
-       equals( called, 3, "Verify that only one click occurred." );
+       equals( called, 1, "Verify that only one click occurred." );
 
+       called = 0;
        jQuery("#anchor2").trigger("click");
-       equals( called, 3, "Verify that no click occurred." );
+       equals( called, 0, "Verify that no click occurred." );
 
        // Make sure that it still works if the selector is the same,
        // but the event type is different
@@ -1465,11 +1530,13 @@ test(".delegate()/.undelegate()", function() {
        // Cleanup
        jQuery("#body").undelegate("#nothiddendiv", "click", callback);
 
+       called = 0;
        jQuery("#nothiddendiv").trigger("click");
-       equals( called, 3, "Verify that no click occurred." );
+       equals( called, 0, "Verify that no click occurred." );
 
+       called = 0;
        jQuery("#nothiddendiv").trigger("foo");
-       equals( called, 4, "Verify that one foo occurred." );
+       equals( called, 1, "Verify that one foo occurred." );
 
        // Cleanup
        jQuery("#body").undelegate("#nothiddendiv", "foo", callback);
@@ -1699,40 +1766,24 @@ test("delegate with submit", function() {
                ev.preventDefault();
        });
 
-       if ( jQuery.support.submitBubbles ) {
-               jQuery("#testForm input[name=sub1]")[0].click();
-               equals(count1,1 );
-               equals(count2,1);
-       } else {
-               jQuery("#testForm input[name=sub1]")[0].click();
-               jQuery("#testForm input[name=T1]").trigger({type: "keypress", keyCode: 13});
-               equals(count1,2);
-               equals(count2,2);
-       }
+       jQuery("#testForm input[name=sub1]").submit();
+       equals( count1, 1, "Verify form submit." );
+       equals( count2, 1, "Verify body submit." );
        
        jQuery("#body").undelegate();
        jQuery(document).undelegate();
 });
 
 test("Non DOM element events", function() {
-       expect(3);
-
-       jQuery({})
-               .bind('nonelementglobal', function(e) {
-                       ok( true, "Global event on non-DOM annonymos object triggered" );
-               });
+       expect(1);
 
        var o = {};
 
-       jQuery(o)
-               .bind('nonelementobj', function(e) {
-                       ok( true, "Event on non-DOM object triggered" );
-               }).bind('nonelementglobal', function() {
-                       ok( true, "Global event on non-DOM object triggered" );
-               });
+       jQuery(o).bind('nonelementobj', function(e) {
+               ok( true, "Event on non-DOM object triggered" );
+       });
 
        jQuery(o).trigger('nonelementobj');
-       jQuery.event.trigger('nonelementglobal');
 });
 
 /*