diff options
author | Rick Waldron <waldron.rick@gmail.com> | 2013-02-03 15:27:55 -0500 |
---|---|---|
committer | Rick Waldron <waldron.rick@gmail.com> | 2013-02-03 15:27:55 -0500 |
commit | 7f94a5cc3a167a710576c008da2c186a98ce2dd4 (patch) | |
tree | d4a3e8ec0e4385d305676b74a663de3017c48438 /test | |
parent | ed0e2d1e8a5005a80d0dd127dc4019f696471ad6 (diff) | |
download | jquery-7f94a5cc3a167a710576c008da2c186a98ce2dd4.tar.gz jquery-7f94a5cc3a167a710576c008da2c186a98ce2dd4.zip |
2.0: Rewrite data.js (Incl. event, manipulation, tests)
Diffstat (limited to 'test')
-rw-r--r-- | test/data/onbeforeunload.html | 20 | ||||
-rw-r--r-- | test/data/testrunner.js | 74 | ||||
-rw-r--r-- | test/unit/data.js | 38 | ||||
-rw-r--r-- | test/unit/event.js | 77 |
4 files changed, 107 insertions, 102 deletions
diff --git a/test/data/onbeforeunload.html b/test/data/onbeforeunload.html new file mode 100644 index 000000000..62c424e89 --- /dev/null +++ b/test/data/onbeforeunload.html @@ -0,0 +1,20 @@ +<!doctype html> +<html> + <script src="/dist/jquery.js"></script> + <script> + function report( event ) { + var payload = { + event: event.type + }; + return top.postMessage( JSON.stringify(payload), "*" ); + } + + jQuery( window ).on( "beforeunload", function( event ) { + report( event ); + }).on( "load", function( event ) { + setTimeout(function() { + window.location.reload(); + }, 50); + }); + </script> +</html> diff --git a/test/data/testrunner.js b/test/data/testrunner.js index f7aca724a..aa7c13019 100644 --- a/test/data/testrunner.js +++ b/test/data/testrunner.js @@ -200,47 +200,53 @@ var Globals = (function() { */ QUnit.expectJqData = function( elems, key ) { var i, elem, expando; - QUnit.current_testEnvironment.checkJqData = true; - if ( elems.jquery && elems.toArray ) { - elems = elems.toArray(); - } - if ( !jQuery.isArray( elems ) ) { - elems = [ elems ]; - } + // As of jQuery 2.0, there will be no "cache"-data is + // stored and managed completely below the API surface + if ( jQuery.cache ) { + QUnit.current_testEnvironment.checkJqData = true; - for ( i = 0; i < elems.length; i++ ) { - elem = elems[i]; - - // jQuery.data only stores data for nodes in jQuery.cache, - // for other data targets the data is stored in the object itself, - // in that case we can't test that target for memory leaks. - // But we don't have to since in that case the data will/must will - // be available as long as the object is not garbage collected by - // the js engine, and when it is, the data will be removed with it. - if ( !elem.nodeType ) { - // Fixes false positives for dataTests(window), dataTests({}). - continue; + if ( elems.jquery && elems.toArray ) { + elems = elems.toArray(); + } + if ( !jQuery.isArray( elems ) ) { + elems = [ elems ]; } - expando = elem[ jQuery.expando ]; - - if ( expando === undefined ) { - // In this case the element exists fine, but - // jQuery.data (or internal data) was never (in)directly - // called. - // Since this method was called it means some data was - // expected to be found, but since there is nothing, fail early - // (instead of in teardown). - notStrictEqual( expando, undefined, "Target for expectJqData must have an expando, for else there can be no data to expect." ); - } else { - if ( expectedDataKeys[expando] ) { - expectedDataKeys[expando].push( key ); + for ( i = 0; i < elems.length; i++ ) { + elem = elems[i]; + + // jQuery.data only stores data for nodes in jQuery.cache, + // for other data targets the data is stored in the object itself, + // in that case we can't test that target for memory leaks. + // But we don't have to since in that case the data will/must will + // be available as long as the object is not garbage collected by + // the js engine, and when it is, the data will be removed with it. + if ( !elem.nodeType ) { + // Fixes false positives for dataTests(window), dataTests({}). + continue; + } + + expando = elem[ jQuery.expando ]; + + if ( expando === undefined ) { + // In this case the element exists fine, but + // jQuery.data (or internal data) was never (in)directly + // called. + // Since this method was called it means some data was + // expected to be found, but since there is nothing, fail early + // (instead of in teardown). + notStrictEqual( expando, undefined, "Target for expectJqData must have an expando, for else there can be no data to expect." ); } else { - expectedDataKeys[expando] = [ key ]; + if ( expectedDataKeys[expando] ) { + expectedDataKeys[expando].push( key ); + } else { + expectedDataKeys[expando] = [ key ]; + } } } } + }; QUnit.config.urlConfig.push( { id: "jqdata", @@ -334,7 +340,7 @@ var Globals = (function() { } else { delete jQuery.ajaxSettings; } - + // Cleanup globals Globals.cleanup(); diff --git a/test/unit/data.js b/test/unit/data.js index 34c98140b..840014fd8 100644 --- a/test/unit/data.js +++ b/test/unit/data.js @@ -6,6 +6,33 @@ test("expando", function(){ equal(jQuery.expando !== undefined, true, "jQuery is exposing the expando"); }); +test( "jQuery.data & removeData, expected returns", function() { + expect(2); + + equal( + jQuery.data( document.body, "hello", "world" ), "world", + "jQuery.data( elem, key, value ) returns value" + ); + equal( + jQuery.removeData( document.body, "hello" ), undefined, + "jQuery.removeData( elem, key, value ) returns undefined" + ); + +}); + +test( "jQuery._data & _removeData, expected returns", function() { + expect(2); + + equal( + jQuery._data( document.body, "hello", "world" ), "world", + "jQuery.data( elem, key, value ) returns value" + ); + equal( + jQuery._removeData( document.body, "hello" ), undefined, + "jQuery.removeData( elem, key, value ) returns undefined" + ); +}); + function dataTests (elem) { var oldCacheLength, dataObj, internalDataObj, expected, actual; @@ -106,6 +133,10 @@ test("Data is not being set on comment and text nodes", function() { ok( !jQuery.hasData( jQuery("<span>text</span>").contents().data("foo", 0) ) ); }); +/* +// Since the new data system does not rely on exandos, limiting the type of +// nodes that can have data is no longer necessary. jQuery.acceptData is now irrelevant +// and should be removed from the library. test("jQuery.acceptData", function() { expect(9); @@ -127,7 +158,7 @@ test("jQuery.acceptData", function() { ok( !jQuery.acceptData( document.createComment("") ), "comment" ); ok( !jQuery.acceptData( document.createTextNode("") ), "text" ); }); - +*/ test(".data()", function() { expect(5); @@ -424,7 +455,7 @@ if (window.JSON && window.JSON.stringify) { } test("jQuery.data should follow html5 specification regarding camel casing", function() { - expect(10); + expect(12); var div = jQuery("<div id='myObject' data-w-t-f='ftw' data-big-a-little-a='bouncing-b' data-foo='a' data-foo-bar='b' data-foo-bar-baz='c'></div>") .prependTo("body"); @@ -445,6 +476,9 @@ test("jQuery.data should follow html5 specification regarding camel casing", fun equal( div.data("fooBar"), "d", "Verify updated data-* key" ); equal( div.data("foo-bar"), "d", "Verify updated data-* key" ); + equal( div.data("fooBar"), "d", "Verify updated data-* key (fooBar)" ); + equal( div.data("foo-bar"), "d", "Verify updated data-* key (foo-bar)" ); + div.remove(); }); diff --git a/test/unit/event.js b/test/unit/event.js index 295a4b8d4..c72d873f0 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -1371,75 +1371,20 @@ test("Submit event can be stopped (#11049)", function() { // Test beforeunload event only if it supported (i.e. not Opera) if ( window.onbeforeunload === null ) { - asyncTest("on(beforeunload)", 4, function() { - var win, - forIE6 = 0, - fired = false, - iframe = jQuery("<iframe src='data/iframe.html' />"); - - iframe.appendTo("#qunit-fixture").one( "load", function() { - win = this.contentWindow || this.contentDocument; - - jQuery( win ).on( "beforeunload", function() { - fired = true; - ok( true, "beforeunload event is fired" ); - }); - - strictEqual( win.onbeforeunload, null, "onbeforeunload property on window object still equals null" ); - - // In old Safari beforeunload event will not fire on iframes - jQuery( win ).on( "unload", function() { - if ( !fired ) { - ok( true, "This is suppose to be true only in old Safari" ); - checker(); - } - }); - - jQuery( win ).on( "beforeunload", function() { - - // On iframe in IE6 beforeunload event will not fire if event is binded through window object, - // nevertheless, test should continue - window.setTimeout(function() { - if ( !forIE6 ) { - checker(); - } - }); - }); - - win.onbeforeunload = function() { - if ( !forIE6 ) { - forIE6++; - checker(); - } - }; + asyncTest("on(beforeunload)", 1, function() { + var iframe = jQuery(jQuery.parseHTML("<iframe src='data/onbeforeunload.html'><iframe>")); - function checker() { - ok( true, "window.onbeforeunload handler is called" ); - iframe = jQuery("<iframe src='data/iframe.html' />"); + window.onmessage = function( event ) { + var payload = JSON.parse( event.data ); - iframe.appendTo("#qunit-fixture").one( "load", function() { - win = iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument; + ok( payload.event, "beforeunload", "beforeunload event" ); - jQuery( win ).on( "beforeunload", function() { - strictEqual( win.onbeforeunload, null, "Event handler is fired, even when onbeforeunload property on window is nulled" ); - - start(); - }); - - jQuery( win ).on( "unload", function() { - if ( !fired ) { - jQuery( win ).trigger("beforeunload"); - } - }); - - win.onbeforeunload = null; - - win.location.reload(); - }); - } + iframe.remove(); + window.onmessage = null; + start(); + }; - win.location.reload(); - }); + iframe.appendTo("#qunit-fixture"); }); } @@ -2567,7 +2512,7 @@ test( "Namespace preserved when passed an Event (#12739)", function() { e.handled = true; equal( e.namespace, "bar", "namespace is bar" ); jQuery( e.target ).find("div").each(function() { - jQuery( this ).triggerHandler( e ); + jQuery( this ).triggerHandler( e ); }); } }) |