X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=test%2Funit%2Fcore.js;h=a7b3b48d2f41e9765587e8b14a626afe1f8cc1a0;hb=4e975430510f443ef76a90d077bc8956fb8b8cc0;hp=88f7609f2ab92dc21dfc627bcde4f0eab580d34c;hpb=ac2e731b2d219fd516a166a058831de1ff949d4a;p=jquery.git diff --git a/test/unit/core.js b/test/unit/core.js index 88f7609..a7b3b48 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); @@ -85,10 +85,16 @@ 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() { @@ -548,8 +554,8 @@ test("toArray()", function() { expect(1); same( jQuery("p").toArray(), q("firstp","ap","sndp","en","sap","first"), - "Convert jQuery object to an Array" ) -}) + "Convert jQuery object to an Array" ); +}); test("get(Number)", function() { expect(2); @@ -561,7 +567,7 @@ test("get(-Number)",function() { expect(2); equals( jQuery("p").get(-1), document.getElementById("first"), "Get a single element with negative index" ); strictEqual( jQuery("#firstp").get(-2), undefined, "Try get with index negative index larger then elements count" ); -}) +}); test("each(Function)", function() { expect(1); @@ -996,14 +1002,14 @@ test("jQuery._Deferred()", function() { deferred = jQuery._Deferred(); - deferred.fire( jQuery , [ document ] ).done( function( doc ) { + deferred.resolveWith( jQuery , [ document ] ).done( function( doc ) { ok( this === jQuery && arguments.length === 1 && doc === document , "Test fire context & args" ); }); }); test("jQuery.Deferred()", function() { - expect( 10 ); + expect( 20 ); jQuery.Deferred( function( defer ) { strictEqual( this , defer , "Defer passed as this & first argument" ); @@ -1043,10 +1049,26 @@ test("jQuery.Deferred()", function() { ok( true , "Error on reject (new)" ); }); + strictEqual( jQuery.Deferred().resolve( "test" ).invert().then(null,function(value) { + strictEqual( value, "test", "Resolved deferred => then fail callback called" ); + }).fail(function( value ) { + strictEqual( value, "test", "Resolved deferred => fail callback called" ); + }).isRejected(), true, "Invert promise is rejected when deferred is resolved" ); + + strictEqual( jQuery.Deferred().reject( "test" ).invert().then(function(value) { + strictEqual( value, "test", "Rejected deferred => then done callback called" ); + }).done(function( value ) { + strictEqual( value, "test", "Rejected deferred => done callback called" ); + }).isResolved(), true, "Invert promise is resolved when deferred is rejected" ); + var tmp = jQuery.Deferred(); strictEqual( tmp.promise() , tmp.promise() , "Test deferred always return same promise" ); + strictEqual( tmp.invert() , tmp.invert() , "Test deferred always return same invert" ); strictEqual( tmp.promise() , tmp.promise().promise() , "Test deferred's promise always return same promise as deferred" ); + strictEqual( tmp.promise() , tmp.invert().invert() , "Test deferred's promise is the same as double invert" ); + strictEqual( tmp.invert() , tmp.invert().promise() , "Test deferred's invert always return same invert as deferred as a promise" ); + strictEqual( tmp.invert() , tmp.promise().invert() , "Test deferred's promise always return same invert as deferred" ); }); test("jQuery.when()", function() { @@ -1094,7 +1116,7 @@ test("jQuery.when()", function() { test("jQuery.when() - joined", function() { - expect(8); + expect(14); jQuery.when( 1, 2, 3 ).done( function( a, b, c ) { strictEqual( a , 1 , "Test first param is first resolved value - non-observables" ); @@ -1115,19 +1137,84 @@ test("jQuery.when() - joined", function() { ok( false , "Test the created deferred was resolved - resolved observable"); }); + jQuery.when( 1 , successDeferred.invert() , 3 ).fail( function( a, b, c ) { + strictEqual( a , 1 , "Test first param is first rejected value - resolved observable inverted" ); + same( b , 2 , "Test second param is second rejected value - resolved observable inverted" ); + strictEqual( c , 3 , "Test third param is third rejected value - resolved observable inverted" ); + }).done( function() { + ok( false , "Test the inverted deferred was rejected - resolved observable inverted"); + }); + jQuery.when( 1 , errorDeferred , 3 ).done( function() { ok( false , "Test the created deferred was rejected - rejected observable"); }).fail( function( error , errorParam ) { strictEqual( error , "error" , "Test first param is first rejected value - rejected observable" ); strictEqual( errorParam , "errorParam" , "Test second param is second rejected value - rejected observable" ); }); + + jQuery.when( 1 , errorDeferred.invert() , 3 ).fail( function() { + ok( false , "Test the inverted deferred was resolved - rejected observable inverted"); + }).done( function( a , b , c ) { + strictEqual( a , 1 , "Test first param is first resolved value - rejected observable inverted" ); + same( b , [ "error", "errorParam" ] , "Test second param is second resolved value - rejected observable inverted" ); + strictEqual( c , 3 , "Test third param is third resolved value - rejected observable inverted" ); + }); +}); + +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.subclass", function(){ +test("jQuery.sub() - .fn Methods", function(){ expect(378); - var Subclass = jQuery.subclass(), - SubclassSubclass = Subclass.subclass(), + var Subclass = jQuery.sub(), + SubclassSubclass = Subclass.sub(), jQueryDocument = jQuery(document), selectors, contexts, methods, method, arg, description;