diff options
author | Jörn Zaefferer <joern.zaefferer@gmail.com> | 2006-09-17 11:41:44 +0000 |
---|---|---|
committer | Jörn Zaefferer <joern.zaefferer@gmail.com> | 2006-09-17 11:41:44 +0000 |
commit | 826bb93cc35a602f27d713a40e9714dedcfb5d47 (patch) | |
tree | e8a7f9cbd54bec10ffb85e971e4af407ef395db6 | |
parent | 76188ae4572aee777e60ab3ae9fdafe17d7004f5 (diff) | |
download | jquery-826bb93cc35a602f27d713a40e9714dedcfb5d47.tar.gz jquery-826bb93cc35a602f27d713a40e9714dedcfb5d47.zip |
Refactored test suite once more, as proposed by John
-rw-r--r-- | build.xml | 10 | ||||
-rw-r--r-- | build/test/index.html | 10 | ||||
-rw-r--r-- | build/test/js/test.js | 121 | ||||
-rw-r--r-- | build/test/test.js | 9 | ||||
-rw-r--r-- | build/test/testrunner.js | 124 |
5 files changed, 140 insertions, 134 deletions
@@ -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 74539eff5..a8d8b4494 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 ec6f9c07e..000000000 --- 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(/</g, "<").replace(/>/g, ">").replace(/&/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 6553d9c10..0a2b0427c 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(/</g, "<").replace(/>/g, ">").replace(/&/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 000000000..b315226e4 --- /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 |