From: Jörn Zaefferer <joern.zaefferer@gmail.com>
Date: Sun, 17 Sep 2006 11:41:44 +0000 (+0000)
Subject: Refactored test suite once more, as proposed by John
X-Git-Url: http://git.asbjorn.biz/?a=commitdiff_plain;h=826bb93cc35a602f27d713a40e9714dedcfb5d47;p=jquery.git

Refactored test suite once more, as proposed by John
---

diff --git a/build.xml b/build.xml
index 19a8b22..6c866f8 100644
--- a/build.xml
+++ b/build.xml
@@ -61,14 +61,8 @@
     <target name="test" depends="jquery">
         <echo message="Building Test Suite" />
         <delete dir="${TEST_DIR}" />
-        <mkdir dir="${TEST_DIR}/js" />
-    	<copy todir="${TEST_DIR}" file="${BUILD_DIR}/test/index.html" />
-        <copy todir="${TEST_DIR}/js">
-            <fileset dir="${BUILD_DIR}/test/js">
-                <include name="**/*.js"/>
-            </fileset>
-        </copy>
-
+        <mkdir dir="${TEST_DIR}" />
+        <copy todir="${TEST_DIR}" file="${BUILD_DIR}/test/testrunner.js" />
         <java jar="${JAR}" fork="true">
             <arg value="${BUILD_DIR}/test/test.js" />
             <arg value="${JQ}" />
diff --git a/build/test/index.html b/build/test/index.html
index 74539ef..a8d8b44 100644
--- a/build/test/index.html
+++ b/build/test/index.html
@@ -1,10 +1,12 @@
 <html id="html">
 <head>
 	<script type="text/javascript" src="../dist/jquery.js"></script>
-	<script type="text/javascript" src="js/test.js"></script>
+	<script type="text/javascript" src="testrunner.js"></script>
 	<script>
-	$(document).ready(function(){
-		runTest('tests.js');
+	$(document).ready(function(){
+		runTest(function() {
+			{TESTS}
+		});
 	});
 	</script>
 	<style>.pass { color: green; } .fail { color: red; } #tests ol { display: none; }</style>
@@ -46,6 +48,8 @@
 			
 			<input type="text" id="name" name="name" value="name" />
 			
+			<textarea id="area1">foobar</textarea>
+			
 			<select name="select1" id="select1">
 				<option id="option1a" value="">Nothing</option>
 				<option id="option1b" value="1">1</option>
diff --git a/build/test/js/test.js b/build/test/js/test.js
deleted file mode 100644
index ec6f9c0..0000000
--- a/build/test/js/test.js
+++ /dev/null
@@ -1,121 +0,0 @@
-function runTest(file) {
-	var startTime = new Date();
-	var Test;
-	var stats = {
-		all: 0,
-		bad: 0
-	};
-	var fixture = document.getElementById('main').innerHTML;
-	$.get(file,function(js) {
-		js = js.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&");
-		eval(js);
-		var runTime = new Date() - startTime;
-		var result = document.createElement("div");
-		result.innerHTML = 'Tests completed in ' + runTime + ' milliseconds.<br/>' +
-			stats.bad + ' tests of ' + stats.all + ' failed.';
-		document.getElementsByTagName("body")[0].appendChild(result);
-	});
-	
-	function test(name, callback) {
-		Test = [];
-		try {
-			callback();
-		} catch(e) {
-			if(typeof console != "undefined") {
-				console.error("Test " + name + " died, exception and test follows");
-				console.error(e);
-				console.warn(callback.toString());
-			}
-			Test.push( [ false, "Died on test #" + (Test.length+1) + ": " + e ] );
-		}
-		reset();
-		
-		var good = 0, bad = 0;
-		var ol = document.createElement("ol");
-	
-		var li = "", state = "pass";
-		for ( var i = 0; i < Test.length; i++ ) {
-			var li = document.createElement("li");
-			li.className = Test[i][0] ? "pass" : "fail";
-			li.innerHTML = Test[i][1];
-			ol.appendChild( li );
-			
-			stats.all++;
-			if ( !Test[i][0] ) {
-				state = "fail";
-				bad++;
-				stats.bad++;
-			} else good++;
-		}
-	
-		var li = document.createElement("li");
-		li.className = state;
-	
-		var b = document.createElement("b");
-		b.innerHTML = name + " <b style='color:black;'>(<b class='fail'>" + bad + "</b>, <b class='pass'>" + good + "</b>, " + Test.length + ")</b>";
-		b.onclick = function(){
-			var n = this.nextSibling;
-			if ( jQuery.css( n, "display" ) == "none" )
-				n.style.display = "block";
-			else
-				n.style.display = "none";
-		};
-		li.appendChild( b );
-		li.appendChild( ol );
-	
-		document.getElementById("tests").appendChild( li );
-	}
-	
-	function reset() {
-		document.getElementById('main').innerHTML = fixture;
-	}
-	
-	/**
-	 * Asserts true.
-	 * @example ok( $("a").size() > 5, "There must be at least 5 anchors" );
-	 */
-	function ok(a, msg) {
-		Test.push( [ !!a, msg ] );
-	}
-
-	/**
-	 * Asserts that two arrays are the same
-	 */
-	function isSet(a, b, msg) {
-		var ret = true;
-		if ( a && b && a.length == b.length ) {
-			for ( var i in a )
-				if ( a[i] != b[i] )
-					ret = false;
-		} else
-			ret = false;
-		if ( !ret && console )
-			console.log( msg, a, b );
-		Test.push( [ ret, msg ] );
-	}
-	
-	/**
-	 * Returns an array of elements with the given IDs, eg.
-	 * @example q("main", "foo", "bar")
-	 * @result [<div id="main">, <span id="foo">, <input id="bar">]
-	 */
-	function q() {
-		var r = [];
-		for ( var i = 0; i < arguments.length; i++ )
-			r.push( document.getElementById( arguments[i] ) );
-		return r;
-	}
-	
-	/**
-	 * Asserts that a select matches the given IDs
-	 * @example t("Check for something", "//[a]", ["foo", "baar"]);
-	 * @result returns true if "//[a]" return two elements with the IDs 'foo' and 'baar'
-	 */
-	function t(a,b,c) {
-		var f = jQuery.find(b);
-		var s = "";
-		for ( var i = 0; i < f.length; i++ )
-			s += (s && ",") + '"' + f[i].id + '"';
-		isSet(f, q.apply(q,c), a + " (" + b + ")");
-	}
-}
diff --git a/build/test/test.js b/build/test/test.js
index 6553d9c..0a2b042 100644
--- a/build/test/test.js
+++ b/build/test/test.js
@@ -20,12 +20,17 @@ var jq = parse( readFile( arguments[0] ) );
 
 var testFile = [];
 
+String.prototype.decode = function() {
+	return this.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&");
+};
+
 for ( var i = 0; i < jq.length; i++ ) {
 	if ( jq[i].tests.length > 0 ) {
 		var method = jq[i];
 		var name = addParams(method.name, method.params);
-		testFile[testFile.length] = addTestWrapper(name, method.tests.join("\n"));
+		testFile[testFile.length] = addTestWrapper(name, method.tests.join("\n").decode());
 	}
 }
 
-writeFile( dir + "/tests.js", testFile.join("\n") );
\ No newline at end of file
+var indexFile = readFile( "build/test/index.html" );
+writeFile( dir + "/index.html", indexFile.replace( /{TESTS}/g, testFile.join("\n") ) );
diff --git a/build/test/testrunner.js b/build/test/testrunner.js
new file mode 100644
index 0000000..b315226
--- /dev/null
+++ b/build/test/testrunner.js
@@ -0,0 +1,124 @@
+var fixture;
+var Test;
+var stats = {
+	all: 0,
+	bad: 0
+};
+
+function runTest(tests) {
+	var startTime = new Date();
+	
+	fixture = document.getElementById('main').innerHTML;
+	tests();
+	var runTime = new Date() - startTime;
+	var result = document.createElement("div");
+	result.innerHTML = 'Tests completed in ' + runTime + ' milliseconds.<br/>' +
+		stats.bad + ' tests of ' + stats.all + ' failed.';
+	document.getElementsByTagName("body")[0].appendChild(result);
+}
+
+function test(name, callback) {
+	Test = [];
+	try {
+		callback();
+	} catch(e) {
+		if(typeof console != "undefined") {
+			console.error("Test " + name + " died, exception and test follows");
+			console.error(e);
+			console.warn(callback.toString());
+		}
+		Test.push( [ false, "Died on test #" + (Test.length+1) + ": " + e ] );
+	}
+	reset();
+	
+	var good = 0, bad = 0;
+	var ol = document.createElement("ol");
+
+	var li = "", state = "pass";
+	for ( var i = 0; i < Test.length; i++ ) {
+		var li = document.createElement("li");
+		li.className = Test[i][0] ? "pass" : "fail";
+		li.innerHTML = Test[i][1];
+		ol.appendChild( li );
+		
+		stats.all++;
+		if ( !Test[i][0] ) {
+			state = "fail";
+			bad++;
+			stats.bad++;
+		} else good++;
+	}
+
+	var li = document.createElement("li");
+	li.className = state;
+
+	var b = document.createElement("b");
+	b.innerHTML = name + " <b style='color:black;'>(<b class='fail'>" + bad + "</b>, <b class='pass'>" + good + "</b>, " + Test.length + ")</b>";
+	b.onclick = function(){
+		var n = this.nextSibling;
+		if ( jQuery.css( n, "display" ) == "none" )
+			n.style.display = "block";
+		else
+			n.style.display = "none";
+	};
+	li.appendChild( b );
+	li.appendChild( ol );
+
+	document.getElementById("tests").appendChild( li );
+}
+
+/**
+ * Resets the test setup. Useful for tests that modify the DOM.
+ */
+function reset() {
+	document.getElementById('main').innerHTML = fixture;
+}
+
+/**
+ * Asserts true.
+ * @example ok( $("a").size() > 5, "There must be at least 5 anchors" );
+ */
+function ok(a, msg) {
+	Test.push( [ !!a, msg ] );
+}
+
+/**
+ * Asserts that two arrays are the same
+ */
+function isSet(a, b, msg) {
+	var ret = true;
+	if ( a && b && a.length == b.length ) {
+		for ( var i in a )
+			if ( a[i] != b[i] )
+				ret = false;
+	} else
+		ret = false;
+	if ( !ret && console )
+		console.log( msg, a, b );
+	Test.push( [ ret, msg ] );
+}
+
+/**
+ * Returns an array of elements with the given IDs, eg.
+ * @example q("main", "foo", "bar")
+ * @result [<div id="main">, <span id="foo">, <input id="bar">]
+ */
+function q() {
+	var r = [];
+	for ( var i = 0; i < arguments.length; i++ )
+		r.push( document.getElementById( arguments[i] ) );
+	return r;
+}
+
+/**
+ * Asserts that a select matches the given IDs
+ * @example t("Check for something", "//[a]", ["foo", "baar"]);
+ * @result returns true if "//[a]" return two elements with the IDs 'foo' and 'baar'
+ */
+function t(a,b,c) {
+	var f = jQuery.find(b);
+	var s = "";
+	for ( var i = 0; i < f.length; i++ )
+		s += (s && ",") + '"' + f[i].id + '"';
+	isSet(f, q.apply(q,c), a + " (" + b + ")");
+}
\ No newline at end of file