Commit 97ea4749 authored by Jörn Zaefferer's avatar Jörn Zaefferer

Improved test suite to reset fixture after each test, added selects to test...

Improved test suite to reset fixture after each test, added selects to test ':selected'; Added docs for index(obj); Modified is(expr) to return false for an invalid expression, changed docs, too; Added lots of testcases; Changed filename of testfiles: adding leading zeros
parent 519b7d33
......@@ -4,7 +4,7 @@
<script type="text/javascript" src="js/test.js"></script>
<script>
$(document).ready(function(){
runTests([{FILES}]);
runTests([{FILES}]);
});
</script>
<style>.pass { color: green; } .fail { color: red; } #tests ol { display: none; }</style>
......@@ -24,15 +24,12 @@
</p>
<div id="foo">
<p id="sndp">Everything inside the red border is inside a div with
<code>id="foo"</code>.</p>
<p lang="en" id="en">This is a normal link:
<a id="yahoo" href="http://www.yahoo.com/" class="blogTest">Yahoo</a></p>
<p id="sap">This link has <code><a href="#2" id="anchor2">class="blog"</a></code>:
<a href="http://simon.incutio.com/" class="blog link" id="simon">Simon Willison's Weblog</a></p>
<p id="sndp">Everything inside the red border is inside a div with <code>id="foo"</code>.</p>
<p lang="en" id="en">This is a normal link: <a id="yahoo" href="http://www.yahoo.com/" class="blogTest">Yahoo</a></p>
<p id="sap">This link has <code><a href="#2" id="anchor2">class="blog"</a></code>: <a href="http://simon.incutio.com/" class="blog link" id="simon">Simon Willison's Weblog</a></p>
</div>
<p id="first">Try them out: </p>
</div>
<p id="first">Try them out:</p>
<ul id="firstUL"></ul>
<ol id="empty"></ol>
<form id="form">
......@@ -45,7 +42,26 @@
<input type="checkbox" name="check" id="check2"/>
<input type="hidden" name="hidden" id="hidden1"/>
<input type="text" style="display:none;" id="hidden2"/>
<input type="text" style="display:none;" id="hidden2"/>
<select name="select1" id="select1">
<option id="option1a" value="">Nothing</option>
<option id="option1b" value="1">1</option>
<option id="option1c" value="2">2</option>
<option id="option1d" value="3">3</option>
</select>
<select name="select1" id="select2">
<option id="option2a" value="">Nothing</option>
<option id="option2b" value="1">1</option>
<option id="option2c" value="2">2</option>
<option id="option2d" selected value="3">3</option>
</select>
<select name="select3" id="select3" multiple="multiple">
<option id="option3a" value="">Nothing</option>
<option id="option3b" selected="selected" value="1">1</option>
<option id="option3c" selected value="2">2</option>
<option id="option3d" value="3">3</option>
</select>
</form>
</div>
</dl>
......
function runTests(files) {
runTest( files, 0 );
var queue = [];
var blocking = false;
function reset() {
synchronize(function() {
blocking = true;
$.get('index.html', function(content) {
var div = $(document.createElement('div')).html(content)
// search for main div
.find('[@id=main]').html();
$('#main').html(div);
blocking = false;
process();
});
});
}
function runTest( files, num ) {
$.get(files[num],function(js){
js = js.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&");
function synchronize(callback) {
queue[queue.length] = callback;
if(!blocking) {
process();
}
}
try {
eval(js);
} catch(e) {
Test.push( [ false, "Died on test #" + Test.length + ": " + e ] );
}
function process() {
while(queue.length && !blocking) {
var call = queue[0];
queue = queue.slice(1);
call();
}
}
var good = 0, bad = 0;
var ol = document.createElement("ol");
function runTests(files) {
var startTime = new Date();
for( var i=0; i < files.length; i++) {
runTest( files, i );
reset();
}
synchronize(function() {
var runTime = new Date() - startTime;
$('body').append('<br/>Tests completed in ' + runTime + ' milliseconds.');
});
}
var li = "", state = "pass";
for ( var i = 0; i < Test.length; i++ ) {
function runTest( files, num ) {
synchronize(function() {
blocking = true;
$.get(files[num],function(js){
js = js.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&");
try {
eval(js);
} catch(e) {
Test.push( [ false, "Died on test #" + (Test.length+1) + ": " + e ] );
}
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 );
if ( !Test[i][0] ) {
state = "fail";
bad++;
} else good++;
}
var li = document.createElement("li");
li.className = Test[i][0] ? "pass" : "fail";
li.innerHTML = Test[i][1];
ol.appendChild( li );
if ( !Test[i][0] ) {
state = "fail";
bad++;
} else good++;
}
var li = document.createElement("li");
li.className = state;
var b = document.createElement("b");
b.innerHTML = files[num] + " <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 );
Test = [];
if ( ++num < files.length ) runTest( files, num );
li.className = state;
var b = document.createElement("b");
b.innerHTML = files[num] + " <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 );
Test = [];
blocking = false;
process();
});
});
}
......
......@@ -13,11 +13,12 @@ var count = 1;
for ( var i = 0; i < jq.length; i++ ) {
if ( jq[i].tests.length > 0 ) {
var name = count + "-" + jq[i].name;
var myFile = testFile
.replace( /{TITLE}/g, jq[i].name )
.replace( /{NUM}/g, jq[i].tests.length )
.replace( /{TESTS}/g, jq[i].tests.join("\n") );
if(count < 100) {
name = "0" + name;
}
if(count < 10) {
name = "0" + name;
}
var fileName = "tests/" + name + ".js";
......
This diff is collapsed.
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