jquery event:
[jquery.git] / test / unit / event.js
index 296c092..98cc734 100644 (file)
@@ -269,8 +269,8 @@ test("unbind(event)", function() {
        equals( mouseoverCounter, 0, "unbind() with multiple events at once" );
 });
 
-test("trigger(event, [data], [fn])", function() {
-       expect(67);
+test("trigger(type, [data], [fn])", function() {
+       expect(46);
 
        var handler = function(event, a, b, c) {
                equals( event.type, "click", "check passed data" );
@@ -328,20 +328,7 @@ test("trigger(event, [data], [fn])", function() {
 
        // Trigger only the handlers (no native) and extra fn
        // Triggers 8
-       equals( $elem.triggerHandler("click", [1, "2", "abc"], handler2), false, "Verify handler response" );
-
-       // Build fake click event to pass in
-       var eventObj = new jQuery.Event("click");
-
-       // Trigger only the handlers (no native), with external event obj
-       // Triggers 5
-       equals( $elem.triggerHandler(eventObj, [1, "2", "abc"]), "test", "Verify handler response" );
-
-       // Trigger only the handlers (no native) and extra fn, with external event obj
-       // Triggers 9
-       eventObj = new jQuery.Event("click");
-       equals( $elem.triggerHandler(eventObj, [1, "2", "abc"], handler2), false, "Verify handler response" );
-       
+       equals( $elem.triggerHandler("click", [1, "2", "abc"], handler2), false, "Verify handler response" );   
        var pass = true;
        try {
                jQuery('#form input:first').hide().trigger('focus');
@@ -357,24 +344,83 @@ test("trigger(event, [data], [fn])", function() {
        // have the extra handler leave the return value alone
        // Triggers 9
        equals( $elem.triggerHandler("click", [1, "2", "abc"], handler4), "test", "Verify triggerHandler return is not overwritten by extra function" );
+});
+
+test("trigger(eventObject, [data], [fn])", function() {
+       expect(25);
+       
+       var $parent = jQuery('<div id="par" />').hide().appendTo('body'),
+               $child = jQuery('<p id="child">foo</p>').appendTo( $parent );
+       
+       var event = jQuery.Event("noNew");      
+       ok( event != window, "Instantiate jQuery.Event without the 'new' keyword" );
+       equals( event.type, "noNew", "Verify its type" );
+       
+       equals( event.isDefaultPrevented(), false, "Verify isDefaultPrevented" );
+       equals( event.isPropagationStopped(), false, "Verify isPropagationStopped" );
+       equals( event.isImmediatePropagationStopped(), false, "Verify isImmediatePropagationStopped" );
        
-       $elem.unbind('click').bind('foo',function(e){
+       event.preventDefault();
+       equals( event.isDefaultPrevented(), true, "Verify isDefaultPrevented" );
+       event.stopPropagation();
+       equals( event.isPropagationStopped(), true, "Verify isPropagationStopped" );
+       
+       event.isPropagationStopped = function(){ return false };
+       event.stopImmediatePropagation();
+       equals( event.isPropagationStopped(), true, "Verify isPropagationStopped" );
+       equals( event.isImmediatePropagationStopped(), true, "Verify isPropagationStopped" );
+       
+       $parent.bind('foo',function(e){
+               // Tries bubbling
                equals( e.type, 'foo', 'Verify event type when passed passing an event object' );
-               equals( e.target.id, 'simon1', 'Verify event.target when passed passing an event object' );
-               equals( e.currentTarget.id, 'firstp', 'Verify event.target when passed passing an event object' );
+               equals( e.target.id, 'child', 'Verify event.target when passed passing an event object' );
+               equals( e.currentTarget.id, 'par', 'Verify event.target when passed passing an event object' );
                equals( e.secret, 'boo!', 'Verify event object\'s custom attribute when passed passing an event object' );
        });
        
-       eventObj = new jQuery.Event('foo');
-       eventObj.secret = 'boo!';
+       // test with an event object
+       event = new jQuery.Event("foo");
+       event.secret = 'boo!';
+       $child.trigger(event);
+       
+       // test with a literal object
+       $child.trigger({type:'foo', secret:'boo!'});
        
-       // Test with event object and bubbling  
-       jQuery("#simon1").trigger( eventObj );
+       $parent.unbind();
+
+       function error(){
+               ok( false, "This assertion shouldn't be reached");
+       }
        
-       // Try passing an object literal
-       jQuery("#simon1").trigger( {type:'foo', secret:'boo!'} );
+       $parent.bind('foo', error );
        
-       $elem.unbind('foo');
+       $child.bind('foo',function(e, a, b, c ){
+               equals( arguments.length, 4, "Check arguments length");
+               equals( a, 1, "Check first custom argument");
+               equals( b, 2, "Check second custom argument");
+               equals( c, 3, "Check third custom argument");
+               
+               equals( e.isDefaultPrevented(), false, "Verify isDefaultPrevented" );
+               equals( e.isPropagationStopped(), false, "Verify isPropagationStopped" );
+               equals( e.isImmediatePropagationStopped(), false, "Verify isImmediatePropagationStopped" );
+               
+               // Skips both errors
+               e.stopImmediatePropagation();
+               
+               return "result";
+       });
+       
+       $child.bind('foo', error );
+       
+       event = new jQuery.Event("foo");
+       $child.trigger( event, [1,2,3] ).unbind();
+       equals( event.result, "result", "Check event.result attribute");
+       
+       // Will error if it bubbles
+       $child.triggerHandler('foo');
+       
+       $child.unbind();
+       $parent.unbind().remove();
 });
 
 test("toggle(Function, Function, ...)", function() {
@@ -434,7 +480,7 @@ test("toggle(Function, Function, ...)", function() {
 });
 
 test(".live()/.die()", function() {
-       expect(28);
+       expect(30);
 
        var submit = 0, div = 0, livea = 0, liveb = 0;
 
@@ -496,6 +542,20 @@ test(".live()/.die()", function() {
        jQuery("div#nothiddendiv").die("click");
        jQuery("div").die("click");
        jQuery("div").die("submit");
+
+       // Verify that return false prevents default action
+       jQuery("#anchor2").live("click", function(){ return false; });
+       var hash = window.location.hash;
+       jQuery("#anchor2").trigger("click");
+       equals( window.location.hash, hash, "return false worked" );
+       jQuery("#anchor2").die("click");
+
+       // Verify that .preventDefault() prevents default action
+       jQuery("#anchor2").live("click", function(e){ e.preventDefault(); });
+       var hash = window.location.hash;
+       jQuery("#anchor2").trigger("click");
+       equals( window.location.hash, hash, "e.preventDefault() worked" );
+       jQuery("#anchor2").die("click");
 });
 
 /*