Commit 81b094b2 authored by Richard Gibson's avatar Richard Gibson

No ticket: update test suite to pass QUnit globals check in most environments. Close gh-1016.

parent 80d45a69
......@@ -3,6 +3,11 @@
*/
jQuery.noConflict();
// For checking globals pollution
window[ jQuery.expando ] = undefined;
// ...in Gecko
this.getInterface = this.getInterface;
// Expose Sizzle for Sizzle's selector tests
// We remove Sizzle's globalization in jQuery
var Sizzle = Sizzle || jQuery.find;
......@@ -96,7 +101,7 @@ function testSubproject( label, url, risTests ) {
}
});
function requireFixture( fnTest ) {
function requireFixture( fn ) {
return function() {
if ( !fixtureReplaced ) {
// Make sure that we retrieved a fixture for the subproject
......@@ -124,7 +129,7 @@ function testSubproject( label, url, risTests ) {
fixtureReplaced = true;
}
fnTest.apply( this, arguments );
fn.apply( this, arguments );
};
}
}
......
This diff is collapsed.
......@@ -340,9 +340,12 @@ test( "attr(String, Object)", function() {
});
jQuery.each( [ window, document, obj, "#firstp" ], function( i, elem ) {
var $elem = jQuery( elem );
// use iframeCallback to avoid generating a new global when testing window
var oldVal = elem.iframeCallback,
$elem = jQuery( elem );
strictEqual( $elem.attr("nonexisting"), undefined, "attr works correctly for non existing attributes (bug #7500)." );
equal( $elem.attr( "something", "foo" ).attr("something"), "foo", "attr falls back to prop on unsupported arguments" );
equal( $elem.attr( "iframeCallback", "foo" ).attr("iframeCallback"), "foo", "attr falls back to prop on unsupported arguments" );
elem.iframeCallback = oldVal;
});
var table = jQuery("#table").append("<tr><td>cell</td></tr><tr><td>cell</td><td>cell</td></tr><tr><td>cell</td><td>cell</td></tr>"),
......
......@@ -194,23 +194,18 @@ test( "selector state", function() {
});
test( "globalEval", function() {
expect( 3 );
jQuery.globalEval( "var globalEvalTest = true;" );
ok( window.globalEvalTest, "Test variable declarations are global" );
window.globalEvalTest = false;
jQuery.globalEval("globalEvalTest = 1;");
equal( window.globalEvalTest, 1, "Test variable assignments are global" );
jQuery.globalEval( "globalEvalTest = true;" );
ok( window.globalEvalTest, "Test variable assignments are global" );
jQuery.globalEval("var globalEvalTest = 2;");
equal( window.globalEvalTest, 2, "Test variable declarations are global" );
window.globalEvalTest = false;
jQuery.globalEval("this.globalEvalTest = 3;");
equal( window.globalEvalTest, 3, "Test context (this) is the window object" );
jQuery.globalEval( "this.globalEvalTest = true;" );
ok( window.globalEvalTest, "Test context (this) is the window object" );
window.globalEvalTest = undefined;
jQuery.globalEval("delete globalEvalTest;");
});
test("noConflict", function() {
......@@ -285,75 +280,67 @@ test("type", function() {
asyncTest("isPlainObject", function() {
expect(15);
var iframe;
var pass, iframe, doc,
fn = function() {};
// The use case that we want to match
ok(jQuery.isPlainObject({}), "{}");
ok( jQuery.isPlainObject({}), "{}" );
// Not objects shouldn't be matched
ok(!jQuery.isPlainObject(""), "string");
ok(!jQuery.isPlainObject(0) && !jQuery.isPlainObject(1), "number");
ok(!jQuery.isPlainObject(true) && !jQuery.isPlainObject(false), "boolean");
ok(!jQuery.isPlainObject(null), "null");
ok(!jQuery.isPlainObject(undefined), "undefined");
ok( !jQuery.isPlainObject(""), "string" );
ok( !jQuery.isPlainObject(0) && !jQuery.isPlainObject(1), "number" );
ok( !jQuery.isPlainObject(true) && !jQuery.isPlainObject(false), "boolean" );
ok( !jQuery.isPlainObject(null), "null" );
ok( !jQuery.isPlainObject(undefined), "undefined" );
// Arrays shouldn't be matched
ok(!jQuery.isPlainObject([]), "array");
ok( !jQuery.isPlainObject([]), "array" );
// Instantiated objects shouldn't be matched
ok(!jQuery.isPlainObject(new Date()), "new Date");
var fnplain = function(){};
ok( !jQuery.isPlainObject(new Date()), "new Date" );
// Functions shouldn't be matched
ok(!jQuery.isPlainObject(fnplain), "fn");
/** @constructor */
var fn = function() {};
ok( !jQuery.isPlainObject(fn), "fn" );
// Again, instantiated objects shouldn't be matched
ok(!jQuery.isPlainObject(new fn()), "new fn (no methods)");
ok( !jQuery.isPlainObject(new fn()), "new fn (no methods)" );
// Makes the function a little more realistic
// (and harder to detect, incidentally)
fn.prototype["someMethod"] = function(){};
// Again, instantiated objects shouldn't be matched
ok(!jQuery.isPlainObject(new fn()), "new fn");
ok( !jQuery.isPlainObject(new fn()), "new fn" );
// DOM Element
ok(!jQuery.isPlainObject(document.createElement("div")), "DOM Element");
ok( !jQuery.isPlainObject( document.createElement("div") ), "DOM Element" );
// Window
ok(!jQuery.isPlainObject(window), "window");
ok( !jQuery.isPlainObject( window ), "window" );
pass = false;
try {
jQuery.isPlainObject( window.location );
ok( true, "Does not throw exceptions on host objects");
} catch ( e ) {
ok( false, "Does not throw exceptions on host objects -- FAIL");
}
pass = true;
} catch ( e ) {}
ok( pass, "Does not throw exceptions on host objects" );
// Objects from other windows should be matched
window.iframeCallback = function( otherObject, detail ) {
window.iframeCallback = undefined;
iframe.parentNode.removeChild( iframe );
ok( jQuery.isPlainObject(new otherObject()), "new otherObject" + ( detail ? " - " + detail : "" ) );
start();
};
try {
iframe = document.createElement("iframe");
document.body.appendChild(iframe);
window.iframeDone = function(otherObject){
// Objects from other windows should be matched
ok(jQuery.isPlainObject(new otherObject()), "new otherObject");
document.body.removeChild( iframe );
start();
};
var doc = iframe.contentDocument || iframe.contentWindow.document;
iframe = jQuery("#qunit-fixture")[0].appendChild( document.createElement("iframe") );
doc = iframe.contentDocument || iframe.contentWindow.document;
doc.open();
doc.write("<body onload='window.parent.iframeDone(Object);'>");
doc.write("<body onload='window.parent.iframeCallback(Object);'>");
doc.close();
} catch(e) {
document.body.removeChild( iframe );
ok(true, "new otherObject - iframes not supported");
start();
window.iframeDone( Object, "iframes not supported" );
}
});
......
......@@ -1208,6 +1208,8 @@ test("trigger(eventObject, [data], [fn])", function() {
equal( event.isDefaultPrevented(), false, "default not prevented" );
});
// Explicitly introduce global variable for oldIE so QUnit doesn't complain if checking globals
window.onclick = undefined;
test(".trigger() bubbling on disconnected elements (#10489)", function() {
expect(2);
......
if ( jQuery.fn.offset ) {
(function() {
if ( !jQuery.fn.offset ) {
return;
}
var supportsScroll, supportsFixedPosition,
forceScroll = jQuery("<div/>").css({ width: 2000, height: 2000 }),
checkSupport = function() {
// Only run once
checkSupport = false;
var checkFixed = jQuery("<div/>").css({ position: "fixed", top: "20px" }).appendTo("#qunit-fixture");
// Must append to body because #qunit-fixture is hidden and elements inside it don't have a scrollTop
forceScroll.appendTo("body");
window.scrollTo( 200, 200 );
supportsScroll = document.documentElement.scrollTop || document.body.scrollTop;
forceScroll.detach();
// Safari subtracts parent border width here (which is 5px)
supportsFixedPosition = checkFixed[0].offsetTop === 20 || checkFixed[0].offsetTop === 15;
checkFixed.remove();
};
module("offset", { setup: function(){
// force a scroll value on the main window
// this insures that the results will be wrong
// if the offset method is using the scroll offset
// of the parent window
var forceScroll = jQuery("<div>").css({ "width": 2000, "height": 2000 });
// this needs to be body, because #qunit-fixture is hidden and elements inside it don't have a scrollTop
forceScroll.appendTo("body");
var checkDiv = jQuery("<div>").appendTo("#qunit-fixture")[0];
if ( typeof checkSupport === "function" ) {
checkSupport();
}
window.scrollTo( 200, 200 );
window.supportsScroll = ( document.documentElement.scrollTop || document.body.scrollTop );
// Force a scroll value on the main window to ensure incorrect results
// if offset is using the scroll offset of the parent window
forceScroll.appendTo("body");
window.scrollTo( 1, 1 );
checkDiv.style.position = "fixed";
checkDiv.style.top = "20px";
// safari subtracts parent border width here which is 5px
window.supportsFixedPosition = ( checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15 );
checkDiv.style.position = checkDiv.style.top = "";
jQuery( checkDiv ).remove();
forceScroll.remove();
forceScroll.detach();
}, teardown: moduleTeardown });
/*
......@@ -529,4 +541,4 @@ test("fractions (see #7730 and #7885)", function() {
div.remove();
});
}
})();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment