testrunner: Removing every global variable leaked within (and outside) tests. Some were deleted and some saved within the jQuery namespace.

This commit is contained in:
Ariel Flesler 2009-01-09 23:49:18 +00:00
parent ec7baf230d
commit d62875fb01
7 changed files with 108 additions and 125 deletions

View file

@ -1,6 +1,6 @@
html text<br/> html text<br/>
<script type="text/javascript">/* <![CDATA[ */ <script type="text/javascript">/* <![CDATA[ */
testFoo = "foo"; jQuery('#foo').html('foo'); jQuery.testFoo = "foo"; jQuery('#foo').html('foo');
ok( true, "test.html executed" ); ok( true, "test.html executed" );
/* ]]> */</script> /* ]]> */</script>
<script src="data/test.js"></script> <script src="data/test.js"></script>

View file

@ -1,3 +1,3 @@
var foobar = "bar"; jQuery.foobar = "bar";
jQuery('#ap').html('bar'); jQuery('#ap').html('bar');
ok( true, "test.js executed"); ok( true, "test.js executed");

View file

@ -1,6 +1,6 @@
html text<br/> html text<br/>
<script type="text/javascript">/* <![CDATA[ */ <script type="text/javascript">/* <![CDATA[ */
testFoo = "foo"; jQuery('#foo').html('foo'); jQuery.testFoo = "foo"; jQuery('#foo').html('foo');
ok( true, "test.php executed" ); ok( true, "test.php executed" );
/* ]]> */</script> /* ]]> */</script>
<script src="data/test.js?<?php srand(); echo time() . '' . rand(); ?>"></script> <script src="data/test.js?<?php srand(); echo time() . '' . rand(); ?>"></script>

View file

@ -1,5 +1,5 @@
<script type="text/javascript"> <script type="text/javascript">
var testFoo = "foo"; jQuery.testFoo = "foo";
jQuery('#foo').html('foo'); jQuery('#foo').html('foo');
ok( true, "test2.html executed" ); ok( true, "test2.html executed" );
</script> </script>

View file

@ -157,18 +157,16 @@ test("jQuery.ajax - beforeSend, cancel request (#2688)", function() {
ok( request === false, "canceled request must return false instead of XMLHttpRequest instance" ); ok( request === false, "canceled request must return false instead of XMLHttpRequest instance" );
}); });
var foobar;
test("jQuery.ajax - dataType html", function() { test("jQuery.ajax - dataType html", function() {
expect(5); expect(5);
stop(); stop();
foobar = null; jQuery.foobar = null;
testFoo = undefined; jQuery.testFoo = undefined;
var verifyEvaluation = function() { var verifyEvaluation = function() {
equals( testFoo, "foo", 'Check if script was evaluated for datatype html' ); equals( jQuery.testFoo, "foo", 'Check if script was evaluated for datatype html' );
equals( foobar, "bar", 'Check if script src was evaluated for datatype html' ); equals( jQuery.foobar, "bar", 'Check if script src was evaluated for datatype html' );
start(); start();
}; };
@ -359,17 +357,17 @@ test("load(String, Function) - simple: inject text into DOM", function() {
test("load(String, Function) - check scripts", function() { test("load(String, Function) - check scripts", function() {
expect(7); expect(7);
stop(); stop();
window.testFoo = undefined; jQuery.testFoo = undefined;
window.foobar = null; jQuery.foobar = null;
var verifyEvaluation = function() { var verifyEvaluation = function() {
equals( foobar, "bar", 'Check if script src was evaluated after load' ); equals( jQuery.foobar, "bar", 'Check if script src was evaluated after load' );
equals( jQuery('#ap').html(), 'bar', 'Check if script evaluation has modified DOM'); equals( jQuery('#ap').html(), 'bar', 'Check if script evaluation has modified DOM');
start(); start();
}; };
jQuery('#first').load(url('data/test.html'), function() { jQuery('#first').load(url('data/test.html'), function() {
ok( jQuery('#first').html().match(/^html text/), 'Check content after loading html' ); ok( jQuery('#first').html().match(/^html text/), 'Check content after loading html' );
equals( jQuery('#foo').html(), 'foo', 'Check if script evaluation has modified DOM'); equals( jQuery('#foo').html(), 'foo', 'Check if script evaluation has modified DOM');
equals( testFoo, "foo", 'Check if script was evaluated after load' ); equals( jQuery.testFoo, "foo", 'Check if script was evaluated after load' );
setTimeout(verifyEvaluation, 600); setTimeout(verifyEvaluation, 600);
}); });
}); });
@ -377,10 +375,10 @@ test("load(String, Function) - check scripts", function() {
test("load(String, Function) - check file with only a script tag", function() { test("load(String, Function) - check file with only a script tag", function() {
expect(3); expect(3);
stop(); stop();
testFoo = undefined; jQuery.testFoo = undefined;
jQuery('#first').load(url('data/test2.html'), function() { jQuery('#first').load(url('data/test2.html'), function() {
equals( jQuery('#foo').html(), 'foo', 'Check if script evaluation has modified DOM'); equals( jQuery('#foo').html(), 'foo', 'Check if script evaluation has modified DOM');
equals( testFoo, "foo", 'Check if script was evaluated after load' ); equals( jQuery.testFoo, "foo", 'Check if script was evaluated after load' );
start(); start();
}); });
}); });
@ -426,9 +424,9 @@ test("jQuery.get(String, Hash, Function) - parse xml and use text() on nodes", f
test("jQuery.getScript(String, Function) - with callback", function() { test("jQuery.getScript(String, Function) - with callback", function() {
expect(2); expect(2);
stop(); stop();
window.foobar = null; jQuery.foobar = null;
jQuery.getScript(url("data/test.js"), function() { jQuery.getScript(url("data/test.js"), function() {
equals( foobar, "bar", 'Check if script was evaluated' ); equals( jQuery.foobar, "bar", 'Check if script was evaluated' );
setTimeout(start, 100); setTimeout(start, 100);
}); });
}); });
@ -618,12 +616,12 @@ test("jQuery.ajax() - script, Remote", function() {
stop(); stop();
window.foobar = null; jQuery.foobar = null;
jQuery.ajax({ jQuery.ajax({
url: base + "data/test.js", url: base + "data/test.js",
dataType: "script", dataType: "script",
success: function(data){ success: function(data){
ok( foobar, "Script results returned (GET, no callback)" ); ok( jQuery.foobar, "Script results returned (GET, no callback)" );
start(); start();
} }
}); });
@ -636,13 +634,13 @@ test("jQuery.ajax() - script, Remote with POST", function() {
stop(); stop();
window.foobar = null; jQuery.foobar = null;
jQuery.ajax({ jQuery.ajax({
url: base + "data/test.js", url: base + "data/test.js",
type: "POST", type: "POST",
dataType: "script", dataType: "script",
success: function(data, status){ success: function(data, status){
ok( foobar, "Script results returned (GET, no callback)" ); ok( jQuery.foobar, "Script results returned (GET, no callback)" );
equals( status, "success", "Script results returned (GET, no callback)" ); equals( status, "success", "Script results returned (GET, no callback)" );
start(); start();
} }
@ -657,12 +655,12 @@ test("jQuery.ajax() - script, Remote with scheme-less URL", function() {
stop(); stop();
window.foobar = null; jQuery.foobar = null;
jQuery.ajax({ jQuery.ajax({
url: base + "data/test.js", url: base + "data/test.js",
dataType: "script", dataType: "script",
success: function(data){ success: function(data){
ok( foobar, "Script results returned (GET, no callback)" ); ok( jQuery.foobar, "Script results returned (GET, no callback)" );
start(); start();
} }
}); });

View file

@ -146,7 +146,7 @@ test("browser", function() {
}; };
for (var i in browsers) { for (var i in browsers) {
var v = i.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ); // RegEx from Core jQuery.browser.version check var v = i.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ); // RegEx from Core jQuery.browser.version check
version = v ? v[1] : null; var version = v ? v[1] : null;
equals( version, browsers[i], "Checking UA string" ); equals( version, browsers[i], "Checking UA string" );
} }
}); });
@ -256,18 +256,16 @@ test("isFunction", function() {
}); });
}); });
var foo = false;
test("jQuery('html')", function() { test("jQuery('html')", function() {
expect(8); expect(8);
reset(); reset();
foo = false; jQuery.foo = false;
var s = jQuery("<script>foo='test';</script>")[0]; var s = jQuery("<script>jQuery.foo='test';</script>")[0];
ok( s, "Creating a script" ); ok( s, "Creating a script" );
ok( !foo, "Make sure the script wasn't executed prematurely" ); ok( !jQuery.foo, "Make sure the script wasn't executed prematurely" );
jQuery("body").append("<script>foo='test';</script>"); jQuery("body").append("<script>jQuery.foo='test';</script>");
ok( foo, "Executing a scripts contents in the right context" ); ok( jQuery.foo, "Executing a scripts contents in the right context" );
reset(); reset();
ok( jQuery("<link rel='stylesheet'/>")[0], "Creating a link" ); ok( jQuery("<link rel='stylesheet'/>")[0], "Creating a link" );
@ -460,7 +458,7 @@ test("attr(Hash)", function() {
test("attr(String, Object)", function() { test("attr(String, Object)", function() {
expect(19); expect(19);
var div = jQuery("div").attr("foo", "bar"); var div = jQuery("div").attr("foo", "bar"),
fail = false; fail = false;
for ( var i = 0; i < div.size(); i++ ) { for ( var i = 0; i < div.size(); i++ ) {
if ( div.get(i).getAttribute('foo') != "bar" ){ if ( div.get(i).getAttribute('foo') != "bar" ){
@ -1350,10 +1348,11 @@ test("val(String/Number)", function() {
j.removeAttr("value"); j.removeAttr("value");
}); });
var scriptorder = 0;
test("html(String)", function() { test("html(String)", function() {
expect(13); expect(13);
jQuery.scriptorder = 0;
var div = jQuery("#main > div"); var div = jQuery("#main > div");
div.html("<b>test</b>"); div.html("<b>test</b>");
var pass = true; var pass = true;
@ -1386,7 +1385,7 @@ test("html(String)", function() {
jQuery("#main").html('foo <form><script type="text/javascript">ok( true, "jQuery().html().evalScripts() Evals Scripts Twice in Firefox, see #975" );</script></form>'); jQuery("#main").html('foo <form><script type="text/javascript">ok( true, "jQuery().html().evalScripts() Evals Scripts Twice in Firefox, see #975" );</script></form>');
// it was decided that waiting to execute ALL scripts makes sense since nested ones have to wait anyway so this test case is changed, see #1959 // it was decided that waiting to execute ALL scripts makes sense since nested ones have to wait anyway so this test case is changed, see #1959
jQuery("#main").html("<script>equals(scriptorder++, 0, 'Script is executed in order');equals(jQuery('#scriptorder').length, 1,'Execute after html (even though appears before)')<\/script><span id='scriptorder'><script>equals(scriptorder++, 1, 'Script (nested) is executed in order');equals(jQuery('#scriptorder').length, 1,'Execute after html')<\/script></span><script>equals(scriptorder++, 2, 'Script (unnested) is executed in order');equals(jQuery('#scriptorder').length, 1,'Execute after html')<\/script>"); jQuery("#main").html("<script>equals(jQuery.scriptorder++, 0, 'Script is executed in order');equals(jQuery('#scriptorder').length, 1,'Execute after html (even though appears before)')<\/script><span id='scriptorder'><script>equals(jQuery.scriptorder++, 1, 'Script (nested) is executed in order');equals(jQuery('#scriptorder').length, 1,'Execute after html')<\/script></span><script>equals(jQuery.scriptorder++, 2, 'Script (unnested) is executed in order');equals(jQuery('#scriptorder').length, 1,'Execute after html')<\/script>");
setTimeout( start, 100 ); setTimeout( start, 100 );
}); });

View file

@ -166,17 +166,41 @@ test("toggle()", function() {
ok( x.is(":visible"), "is visible again" ); ok( x.is(":visible"), "is visible again" );
}); });
var visible = { jQuery.checkOverflowDisplay = function(){
Normal: function(elem){}, var o = jQuery.css( this, "overflow" );
"CSS Hidden": function(elem){
jQuery(this).addClass("hidden");
},
"JS Hidden": function(elem){
jQuery(this).hide();
}
};
var from = { equals(o, "visible", "Overflow should be visible: " + o);
equals(jQuery.css( this, "display" ), "inline", "Display shouldn't be tampered with.");
start();
}
test("JS Overflow and Display", function() {
expect(2);
stop();
jQuery.makeTest( "JS Overflow and Display" )
.addClass("widewidth")
.css({ overflow: "visible", display: "inline" })
.addClass("widewidth")
.text("Some sample text.")
.before("text before")
.after("text after")
.animate({ opacity: 0.5 }, "slow", jQuery.checkOverflowDisplay);
});
test("CSS Overflow and Display", function() {
expect(2);
stop();
jQuery.makeTest( "CSS Overflow and Display" )
.addClass("overflow inline")
.addClass("widewidth")
.text("Some sample text.")
.before("text before")
.after("text after")
.animate({ opacity: 0.5 }, "slow", jQuery.checkOverflowDisplay);
});
jQuery.each( {
"CSS Auto": function(elem,prop){ "CSS Auto": function(elem,prop){
jQuery(elem).addClass("auto" + prop) jQuery(elem).addClass("auto" + prop)
.text("This is a long string of text."); .text("This is a long string of text.");
@ -211,9 +235,8 @@ var from = {
jQuery(elem).css(prop,prop == "opacity" ? 0 : "0px"); jQuery(elem).css(prop,prop == "opacity" ? 0 : "0px");
return 0; return 0;
} }
}; }, function(fn, f){
jQuery.each( {
var to = {
"show": function(elem,prop){ "show": function(elem,prop){
jQuery(elem).hide().addClass("wide"+prop); jQuery(elem).hide().addClass("wide"+prop);
return "show"; return "show";
@ -233,46 +256,9 @@ var to = {
jQuery(elem).addClass("noback"); jQuery(elem).addClass("noback");
return 0; return 0;
} }
}; }, function(tn, t){
function checkOverflowDisplay(){
var o = jQuery.css( this, "overflow" );
equals(o, "visible", "Overflow should be visible: " + o);
equals(jQuery.css( this, "display" ), "inline", "Display shouldn't be tampered with.");
start();
}
test("JS Overflow and Display", function() {
expect(2);
stop();
makeTest( "JS Overflow and Display" )
.addClass("widewidth")
.css({ overflow: "visible", display: "inline" })
.addClass("widewidth")
.text("Some sample text.")
.before("text before")
.after("text after")
.animate({ opacity: 0.5 }, "slow", checkOverflowDisplay);
});
test("CSS Overflow and Display", function() {
expect(2);
stop();
makeTest( "CSS Overflow and Display" )
.addClass("overflow inline")
.addClass("widewidth")
.text("Some sample text.")
.before("text before")
.after("text after")
.animate({ opacity: 0.5 }, "slow", checkOverflowDisplay);
});
jQuery.each( from, function(fn, f){
jQuery.each( to, function(tn, t){
test(fn + " to " + tn, function() { test(fn + " to " + tn, function() {
var elem = makeTest( fn + " to " + tn ); var elem = jQuery.makeTest( fn + " to " + tn );
var t_w = t( elem, "width" ); var t_w = t( elem, "width" );
var f_w = f( elem, "width" ); var f_w = f( elem, "width" );
@ -351,21 +337,21 @@ jQuery.each( from, function(fn, f){
}); });
}); });
var check = ['opacity','height','width','display','overflow']; jQuery.check = ['opacity','height','width','display','overflow'];
jQuery.fn.saveState = function(){ jQuery.fn.saveState = function(){
expect(check.length); expect(jQuery.check.length);
stop(); stop();
return this.each(function(){ return this.each(function(){
var self = this; var self = this;
self.save = {}; self.save = {};
jQuery.each(check, function(i,c){ jQuery.each(jQuery.check, function(i,c){
self.save[c] = jQuery.css(self,c); self.save[c] = jQuery.css(self,c);
}); });
}); });
}; };
function checkState(){ jQuery.checkState = function(){
var self = this; var self = this;
jQuery.each(this.save, function(c,v){ jQuery.each(this.save, function(c,v){
var cur = jQuery.css(self,c); var cur = jQuery.css(self,c);
@ -376,43 +362,43 @@ function checkState(){
// Chaining Tests // Chaining Tests
test("Chain fadeOut fadeIn", function() { test("Chain fadeOut fadeIn", function() {
jQuery('#fadein div').saveState().fadeOut('fast').fadeIn('fast',checkState); jQuery('#fadein div').saveState().fadeOut('fast').fadeIn('fast',jQuery.checkState);
}); });
test("Chain fadeIn fadeOut", function() { test("Chain fadeIn fadeOut", function() {
jQuery('#fadeout div').saveState().fadeIn('fast').fadeOut('fast',checkState); jQuery('#fadeout div').saveState().fadeIn('fast').fadeOut('fast',jQuery.checkState);
}); });
test("Chain hide show", function() { test("Chain hide show", function() {
jQuery('#show div').saveState().hide('fast').show('fast',checkState); jQuery('#show div').saveState().hide('fast').show('fast',jQuery.checkState);
}); });
test("Chain show hide", function() { test("Chain show hide", function() {
jQuery('#hide div').saveState().show('fast').hide('fast',checkState); jQuery('#hide div').saveState().show('fast').hide('fast',jQuery.checkState);
}); });
test("Chain toggle in", function() { test("Chain toggle in", function() {
jQuery('#togglein div').saveState().toggle('fast').toggle('fast',checkState); jQuery('#togglein div').saveState().toggle('fast').toggle('fast',jQuery.checkState);
}); });
test("Chain toggle out", function() { test("Chain toggle out", function() {
jQuery('#toggleout div').saveState().toggle('fast').toggle('fast',checkState); jQuery('#toggleout div').saveState().toggle('fast').toggle('fast',jQuery.checkState);
}); });
test("Chain slideDown slideUp", function() { test("Chain slideDown slideUp", function() {
jQuery('#slidedown div').saveState().slideDown('fast').slideUp('fast',checkState); jQuery('#slidedown div').saveState().slideDown('fast').slideUp('fast',jQuery.checkState);
}); });
test("Chain slideUp slideDown", function() { test("Chain slideUp slideDown", function() {
jQuery('#slideup div').saveState().slideUp('fast').slideDown('fast',checkState); jQuery('#slideup div').saveState().slideUp('fast').slideDown('fast',jQuery.checkState);
}); });
test("Chain slideToggle in", function() { test("Chain slideToggle in", function() {
jQuery('#slidetogglein div').saveState().slideToggle('fast').slideToggle('fast',checkState); jQuery('#slidetogglein div').saveState().slideToggle('fast').slideToggle('fast',jQuery.checkState);
}); });
test("Chain slideToggle out", function() { test("Chain slideToggle out", function() {
jQuery('#slidetoggleout div').saveState().slideToggle('fast').slideToggle('fast',checkState); jQuery('#slidetoggleout div').saveState().slideToggle('fast').slideToggle('fast',jQuery.checkState);
}); });
function makeTest( text ){ jQuery.makeTest = function( text ){
var elem = jQuery("<div></div>") var elem = jQuery("<div></div>")
.attr("id", "test" + makeTest.id++) .attr("id", "test" + jQuery.makeTest.id++)
.addClass("box"); .addClass("box");
jQuery("<h4></h4>") jQuery("<h4></h4>")
@ -426,4 +412,4 @@ function makeTest( text ){
return elem; return elem;
} }
makeTest.id = 1; jQuery.makeTest.id = 1;