X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=test%2Funit%2Fcore.js;h=6ee8724de977069cea375ff39ebbc52688c39d6f;hb=2d0bc7ce72ab8d64da0506a88c8cc543ce3ceaba;hp=196700745adb4a6782de617ca123d1d1388400fc;hpb=23d455b4469f2b47363c21867aad271d6930f112;p=jquery.git diff --git a/test/unit/core.js b/test/unit/core.js index 1967007..6ee8724 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -1,4 +1,4 @@ -module("core"); +module("core", { teardown: moduleTeardown }); test("Basic requirements", function() { expect(7); @@ -14,8 +14,6 @@ test("Basic requirements", function() { test("jQuery()", function() { expect(24); - strictEqual( commonJSDefined, jQuery, "CommonJS registered (Bug #7102)" ); - // Basic constructor's behavior equals( jQuery().length, 0, "jQuery() === jQuery([])" ); @@ -23,7 +21,7 @@ test("jQuery()", function() { equals( jQuery(null).length, 0, "jQuery(null) === jQuery([])" ); equals( jQuery("").length, 0, "jQuery('') === jQuery([])" ); - var obj = jQuery("div") + var obj = jQuery("div"); equals( jQuery(obj).selector, "div", "jQuery(jQueryObj) == jQueryObj" ); // can actually yield more than one, when iframes are included, the window is an array as well @@ -86,6 +84,17 @@ test("jQuery()", function() { exec = true; elem.click(); + + // manually clean up detached elements + elem.remove(); + + for ( var i = 0; i < 3; ++i ) { + elem = jQuery(""); + } + equals( elem[0].defaultValue, "TEST", "Ensure cached nodes are cloned properly (Bug #6655)" ); + + // manually clean up detached elements + elem.remove(); }); test("selector state", function() { @@ -528,29 +537,29 @@ test("end()", function() { test("length", function() { expect(1); - equals( jQuery("p").length, 6, "Get Number of Elements Found" ); + equals( jQuery("#main p").length, 6, "Get Number of Elements Found" ); }); test("size()", function() { expect(1); - equals( jQuery("p").size(), 6, "Get Number of Elements Found" ); + equals( jQuery("#main p").size(), 6, "Get Number of Elements Found" ); }); test("get()", function() { expect(1); - same( jQuery("p").get(), q("firstp","ap","sndp","en","sap","first"), "Get All Elements" ); + same( jQuery("#main p").get(), q("firstp","ap","sndp","en","sap","first"), "Get All Elements" ); }); test("toArray()", function() { expect(1); - same( jQuery("p").toArray(), + same( jQuery("#main p").toArray(), q("firstp","ap","sndp","en","sap","first"), "Convert jQuery object to an Array" ) }) test("get(Number)", function() { expect(2); - equals( jQuery("p").get(0), document.getElementById("firstp"), "Get A Single Element" ); + equals( jQuery("#main p").get(0), document.getElementById("firstp"), "Get A Single Element" ); strictEqual( jQuery("#firstp").get(1), undefined, "Try get with index larger elements count" ); }); @@ -905,185 +914,123 @@ test("jQuery.parseJSON", function(){ } }); -test("jQuery._Deferred()", function() { - - expect( 10 ); - - var deferred, - object, - test; - - deferred = jQuery._Deferred(); - - test = false; - - deferred.then( function( value ) { - equals( value , "value" , "Test pre-resolve callback" ); - test = true; - } ); - - deferred.resolve( "value" ); - - ok( test , "Test pre-resolve callbacks called right away" ); - - test = false; - - deferred.then( function( value ) { - equals( value , "value" , "Test post-resolve callback" ); - test = true; - } ); - - ok( test , "Test post-resolve callbacks called right away" ); - - deferred.cancel(); - - test = true; - - deferred.then( function() { - ok( false , "Cancel was ignored" ); - test = false; - } ); - - ok( test , "Test cancel" ); - - deferred = jQuery._Deferred().resolve(); - - try { - deferred.then( function() { - throw "Error"; - } , function() { - ok( true , "Test deferred do not cancel on exception" ); - } ); - } catch( e ) { - strictEqual( e , "Error" , "Test deferred propagates exceptions"); - deferred.then(); - } - - test = ""; - deferred = jQuery._Deferred().then( function() { - - test += "A"; - - }, function() { - - test += "B"; - - } ).resolve(); - - strictEqual( test , "AB" , "Test multiple then parameters" ); - - test = ""; - - deferred.then( function() { - - deferred.then( function() { - - test += "C"; - - } ); - - test += "A"; - - }, function() { - - test += "B"; - } ); - - strictEqual( test , "ABC" , "Test then callbacks order" ); - - deferred = jQuery._Deferred(); - - deferred.fire( jQuery , [ document ] ).then( function( doc ) { - ok( this === jQuery && arguments.length === 1 && doc === document , "Test fire context & args" ); - }); +test("jQuery.sub() - Static Methods", function(){ + expect(18); + var Subclass = jQuery.sub(); + Subclass.extend({ + topLevelMethod: function() {return this.debug;}, + debug: false, + config: { + locale: 'en_US' + }, + setup: function(config) { + this.extend(true, this.config, config); + } + }); + Subclass.fn.extend({subClassMethod: function() { return this;}}); + + //Test Simple Subclass + ok(Subclass.topLevelMethod() === false, 'Subclass.topLevelMethod thought debug was true'); + ok(Subclass.config.locale == 'en_US', Subclass.config.locale + ' is wrong!'); + same(Subclass.config.test, undefined, 'Subclass.config.test is set incorrectly'); + equal(jQuery.ajax, Subclass.ajax, 'The subclass failed to get all top level methods'); + + //Create a SubSubclass + var SubSubclass = Subclass.sub(); + + //Make Sure the SubSubclass inherited properly + ok(SubSubclass.topLevelMethod() === false, 'SubSubclass.topLevelMethod thought debug was true'); + ok(SubSubclass.config.locale == 'en_US', SubSubclass.config.locale + ' is wrong!'); + same(SubSubclass.config.test, undefined, 'SubSubclass.config.test is set incorrectly'); + equal(jQuery.ajax, SubSubclass.ajax, 'The subsubclass failed to get all top level methods'); + + //Modify The Subclass and test the Modifications + SubSubclass.fn.extend({subSubClassMethod: function() { return this;}}); + SubSubclass.setup({locale: 'es_MX', test: 'worked'}); + SubSubclass.debug = true; + SubSubclass.ajax = function() {return false;}; + ok(SubSubclass.topLevelMethod(), 'SubSubclass.topLevelMethod thought debug was false'); + same(SubSubclass(document).subClassMethod, Subclass.fn.subClassMethod, 'Methods Differ!'); + ok(SubSubclass.config.locale == 'es_MX', SubSubclass.config.locale + ' is wrong!'); + ok(SubSubclass.config.test == 'worked', 'SubSubclass.config.test is set incorrectly'); + notEqual(jQuery.ajax, SubSubclass.ajax, 'The subsubclass failed to get all top level methods'); + + //This shows that the modifications to the SubSubClass did not bubble back up to it's superclass + ok(Subclass.topLevelMethod() === false, 'Subclass.topLevelMethod thought debug was true'); + ok(Subclass.config.locale == 'en_US', Subclass.config.locale + ' is wrong!'); + same(Subclass.config.test, undefined, 'Subclass.config.test is set incorrectly'); + same(Subclass(document).subSubClassMethod, undefined, 'subSubClassMethod set incorrectly'); + equal(jQuery.ajax, Subclass.ajax, 'The subclass failed to get all top level methods'); }); -test("jQuery.Deferred()", function() { - - expect( 4 ); - - jQuery.Deferred( function( defer ) { - strictEqual( this , defer , "Defer passed as this & first argument" ); - this.resolve( "done" ); - }).then( function( value ) { - strictEqual( value , "done" , "Passed function executed" ); - }); - - jQuery.Deferred().resolve().then( function() { - ok( true , "Success on resolve" ); - }).fail( function() { - ok( false , "Error on resolve" ); - }); - - jQuery.Deferred().reject().then( function() { - ok( false , "Success on reject" ); - }).fail( function() { - ok( true , "Error on reject" ); - }); -}); - -test("jQuery.isDeferred()", function() { - - expect( 11 ); - - var object1 = { then: function() { return this; } }, - object2 = { then: function() { return this; } }; - - object2.then._ = []; - - // The use case that we want to match - ok(jQuery.isDeferred(jQuery._Deferred()), "Simple deferred"); - ok(jQuery.isDeferred(jQuery.Deferred()), "Failable deferred"); - - // Some other objects - ok(!jQuery.isDeferred(object1), "Object with then & no marker"); - ok(!jQuery.isDeferred(object2), "Object with then & marker"); - - // Not objects shouldn't be matched - ok(!jQuery.isDeferred(""), "string"); - ok(!jQuery.isDeferred(0) && !jQuery.isDeferred(1), "number"); - ok(!jQuery.isDeferred(true) && !jQuery.isDeferred(false), "boolean"); - ok(!jQuery.isDeferred(null), "null"); - ok(!jQuery.isDeferred(undefined), "undefined"); - - object1 = {custom: jQuery._Deferred().then}; - - ok(!jQuery.isDeferred(object1) , "custom method name not found automagically"); - ok(jQuery.isDeferred(object1,"custom") , "custom method name"); -}); - -test("jQuery.when()", function() { - - expect( 5 ); - - var cache, i, deferred = { done: jQuery.Deferred().resolve( 1 ).then }; - - for( i = 1 ; i < 3 ; i++ ) { - jQuery.when( cache || jQuery.Deferred( function() { - this.resolve( i ); - }) ).then( function( value ) { - strictEqual( value , 1 , "Function executed" + ( i > 1 ? " only once" : "" ) ); - cache = value; - }).fail( function() { - ok( false , "Fail called" ); +test("jQuery.sub() - .fn Methods", function(){ + expect(378); + + var Subclass = jQuery.sub(), + SubclassSubclass = Subclass.sub(), + jQueryDocument = jQuery(document), + selectors, contexts, methods, method, arg, description; + + jQueryDocument.toString = function(){ return 'jQueryDocument'; }; + + Subclass.fn.subclassMethod = function(){}; + SubclassSubclass.fn.subclassSubclassMethod = function(){}; + + selectors = [ + 'body', + 'html, body', + '
' + ]; + + methods = [ // all methods that return a new jQuery instance + ['eq', 1], + ['add', document], + ['end'], + ['has'], + ['closest', 'div'], + ['filter', document], + ['find', 'div'] + ]; + + contexts = [undefined, document, jQueryDocument]; + + jQuery.each(selectors, function(i, selector){ + + jQuery.each(methods, function(){ + method = this[0]; + arg = this[1]; + + jQuery.each(contexts, function(i, context){ + + description = '("'+selector+'", '+context+').'+method+'('+(arg||'')+')'; + + same( + jQuery(selector, context)[method](arg).subclassMethod, undefined, + 'jQuery'+description+' doesnt have Subclass methods' + ); + same( + jQuery(selector, context)[method](arg).subclassSubclassMethod, undefined, + 'jQuery'+description+' doesnt have SubclassSubclass methods' + ); + same( + Subclass(selector, context)[method](arg).subclassMethod, Subclass.fn.subclassMethod, + 'Subclass'+description+' has Subclass methods' + ); + same( + Subclass(selector, context)[method](arg).subclassSubclassMethod, undefined, + 'Subclass'+description+' doesnt have SubclassSubclass methods' + ); + same( + SubclassSubclass(selector, context)[method](arg).subclassMethod, Subclass.fn.subclassMethod, + 'SubclassSubclass'+description+' has Subclass methods' + ); + same( + SubclassSubclass(selector, context)[method](arg).subclassSubclassMethod, SubclassSubclass.fn.subclassSubclassMethod, + 'SubclassSubclass'+description+' has SubclassSubclass methods' + ); + + }); }); - } - - cache = 0; - - for( i = 1 ; i < 3 ; i++ ) { - jQuery.when( cache || deferred , "done" ).done( function( value ) { - strictEqual( value , 1 , "Custom method: resolved" + ( i > 1 ? " only once" : "" ) ); - cache = value; - }).fail( function() { - ok( false , "Custom method: fail called" ); - }); - } - - stop(); - - jQuery.when( jQuery( document ) , "ready" ).then( function( test ) { - strictEqual( test , jQuery , "jQuery.fn.ready recognized as a deferred" ); - start(); }); + });