Update to the current Dromaeo ToT.

BUG=37993


Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: f38a4ca3d5d3bff4c8349ef0c179217cd955ede7
diff --git a/htmlrunner.js b/htmlrunner.js
index 1365792..1fbd0fc 100644
--- a/htmlrunner.js
+++ b/htmlrunner.js
@@ -1,4 +1,4 @@
-var startTest = top.startTest || function(){};
-var test = top.test || function(name, fn){ fn(); };
-var endTest = top.endTest || function(){};
-var prep = top.prep || function(fn){ fn(); };
+var startTest = parent.startTest || function(){};
+var test = parent.test || function(name, fn){ fn(); };
+var endTest = parent.endTest || function(){};
+var prep = parent.prep || function(fn){ fn(); };
diff --git a/store.php b/store.php
index 3d38074..4ebb5c3 100644
--- a/store.php
+++ b/store.php
@@ -1,4 +1,29 @@
 <?php
+/*
+Dromaeo Test Suite
+Copyright (c) 2010 John Resig
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+*/
 
 	$server = 'mysql.dromaeo.com';
 	$user = 'dromaeo';
diff --git a/tests/cssquery-dojo.html b/tests/cssquery-dojo.html
index bda9a3a..c2a49b6 100644
--- a/tests/cssquery-dojo.html
+++ b/tests/cssquery-dojo.html
@@ -4,7 +4,7 @@
 <script src="../lib/dojo.js"></script>
 <script>
 window.onload = function(){
-startTest("cssquery-dojo", '');
+startTest("cssquery-dojo", 'ed0ed65e');
 
 // Try to force real results
 var ret, tmp;
diff --git a/tests/cssquery-ext.html b/tests/cssquery-ext.html
index 99bfb75..b6f2f15 100644
--- a/tests/cssquery-ext.html
+++ b/tests/cssquery-ext.html
@@ -5,7 +5,7 @@
 <script src="../lib/ext-core.js"></script>
 <script>
 window.onload = function(){
-startTest("cssquery-ext", '');
+startTest("cssquery-ext", '559e157b');
 
 // Try to force real results
 var ret, tmp;
diff --git a/tests/cssquery-jquery.html b/tests/cssquery-jquery.html
index 65e6ed8..efd9866 100644
--- a/tests/cssquery-jquery.html
+++ b/tests/cssquery-jquery.html
@@ -4,7 +4,7 @@
 <script src="../lib/jquery.js"></script>
 <script>
 window.onload = function(){
-startTest("cssquery-jquery", '');
+startTest("cssquery-jquery", 'a1e81afd');
 
 // Try to force real results
 var ret, tmp;
diff --git a/tests/cssquery-mootools.html b/tests/cssquery-mootools.html
index c7d38f0..85026ac 100644
--- a/tests/cssquery-mootools.html
+++ b/tests/cssquery-mootools.html
@@ -4,7 +4,7 @@
 <script src="../lib/mootools.js"></script>
 <script>
 window.onload = function(){
-startTest("cssquery-mootools", '');
+startTest("cssquery-mootools", 'a31d1311');
 
 // Try to force real results
 var ret, tmp;
diff --git a/tests/cssquery-prototype.html b/tests/cssquery-prototype.html
index e16f932..d252c44 100644
--- a/tests/cssquery-prototype.html
+++ b/tests/cssquery-prototype.html
@@ -4,7 +4,7 @@
 <script src="../lib/prototype.js"></script>
 <script>
 window.onload = function(){
-startTest("cssquery-prototype", '');
+startTest("cssquery-prototype", '5f350493');
 
 // Try to force real results
 var ret, tmp;
diff --git a/tests/cssquery-yui.html b/tests/cssquery-yui.html
index 100bb24..d354ed7 100644
--- a/tests/cssquery-yui.html
+++ b/tests/cssquery-yui.html
@@ -6,7 +6,7 @@
 <script src="../lib/yui-selector.js"></script>
 <script>
 window.onload = function(){
-startTest("cssquery-yui", '');
+startTest("cssquery-yui", '8665056e');
 
 // Try to force real results
 var ret, tmp;
diff --git a/tests/dom-attr.html b/tests/dom-attr.html
index c560777..dbf361b 100644
--- a/tests/dom-attr.html
+++ b/tests/dom-attr.html
@@ -3,7 +3,7 @@
 <script src="../htmlrunner.js"></script>
 <script>
 window.onload = function(){
-startTest("dom-attr", '');
+startTest("dom-attr", '81a4dbd0');
 
 // Try to force real results
 var ret, tmp;
diff --git a/tests/dom-modify.html b/tests/dom-modify.html
index a2dbbe5..ef57b51 100644
--- a/tests/dom-modify.html
+++ b/tests/dom-modify.html
@@ -3,7 +3,7 @@
 <script src="../htmlrunner.js"></script>
 <script>
 window.onload = function(){
-startTest("dom-modify", '');
+startTest("dom-modify", '9ecfa02b');
 
 // Try to force real results
 var ret, tmp, str;
diff --git a/tests/dom-query.html b/tests/dom-query.html
index 18043dc..65a61dd 100644
--- a/tests/dom-query.html
+++ b/tests/dom-query.html
@@ -3,7 +3,7 @@
 <script src="../htmlrunner.js"></script>
 <script>
 window.onload = function(){
-startTest("dom-query", '');
+startTest("dom-query", '35cc42af');
 
 // Try to force real results
 var ret, tmp;
diff --git a/tests/dom-traverse.html b/tests/dom-traverse.html
index 341d2f3..673c095 100644
--- a/tests/dom-traverse.html
+++ b/tests/dom-traverse.html
@@ -3,7 +3,7 @@
 <script src="../htmlrunner.js"></script>
 <script>
 window.onload = function(){
-startTest("dom-traverse", '');
+startTest("dom-traverse", '1f7ac849');
 
 // Try to force real results
 var ret, tmp;
diff --git a/tests/dromaeo-3d-cube.html b/tests/dromaeo-3d-cube.html
index 8dde133..cb0d896 100644
--- a/tests/dromaeo-3d-cube.html
+++ b/tests/dromaeo-3d-cube.html
@@ -327,7 +327,7 @@
 	Loop();
 }
 
-window.onload = function(){ startTest("dromaeo-3d-cube", '');
+window.onload = function(){ startTest("dromaeo-3d-cube", '979cd0f1');
 
 test("Rotate 3D Cube", function(){
 	Init(20);
diff --git a/tests/dromaeo-core-eval.html b/tests/dromaeo-core-eval.html
index aa2eea9..5b6cd2c 100644
--- a/tests/dromaeo-core-eval.html
+++ b/tests/dromaeo-core-eval.html
@@ -2,7 +2,7 @@
 <head>
 <script src="../htmlrunner.js"></script>
 <script>
-window.onload = function(){ startTest("dromaeo-core-eval", '');
+window.onload = function(){ startTest("dromaeo-core-eval", 'efec1da2');
 
 // Try to force real results
 var ret, tmp;
diff --git a/tests/dromaeo-object-array.html b/tests/dromaeo-object-array.html
index 65d9f06..d45fb36 100644
--- a/tests/dromaeo-object-array.html
+++ b/tests/dromaeo-object-array.html
@@ -2,7 +2,7 @@
 <head>
 <script src="../htmlrunner.js"></script>
 <script>
-window.onload = function(){ startTest("dromaeo-object-array", '');
+window.onload = function(){ startTest("dromaeo-object-array", 'bde4f5f4');
 
 var ret = [], tmp, num = 500;
 var i = 1024;
diff --git a/tests/dromaeo-object-regexp.html b/tests/dromaeo-object-regexp.html
index a6410d7..fe36ccd 100644
--- a/tests/dromaeo-object-regexp.html
+++ b/tests/dromaeo-object-regexp.html
@@ -2,134 +2,163 @@
 <head>
 <script src="../htmlrunner.js"></script>
 <script>
-window.onload = function(){ startTest("dromaeo-object-regexp", '');
+window.onload = function(){ startTest("dromaeo-object-regexp", '812dde38');
 
 // Try to force real results
-var str = [], tmp, ret, re;
+var str = [], tmp, ret, re, testStrings = [];
 var i = 65536;
 
+function randomChar(){
+	return String.fromCharCode( (25 * Math.random()) + 97 );
+}
+
 for ( var i = 0; i < 16384; i++ )
-	str.push( String.fromCharCode( (25 * Math.random()) + 97 ) );
+	str.push( randomChar() );
 
 str = str.join("");
 str += str;
 str += str;
 
+function generateTestStrings(count){
+	var t, nest;
+	if ( testStrings.length >= count )
+		return testStrings.slice(0, count);
+	for ( var i = testStrings.length; i < count; i++ ) {
+		// Make all tested strings different
+		t = randomChar() + str + randomChar();
+		nest = Math.floor(4 * Math.random());
+		for ( var j = 0; j < nest; j++ ) {
+			t = randomChar() + t + randomChar();
+		}
+		// Try to minimize benchmark order dependencies by
+		// exercising the strings
+		for ( var j = 0; j < t.length; j += 100 ) {
+			ret = t[j];
+			ret = t.substring(j, j + 100);
+		}
+		testStrings[i] = t;
+	}
+	return testStrings;
+}
+
 	// TESTS: split
 
 	prep(function(){
-		re = //;
-		tmp = str;
+		// It's impossible to specify empty regexp by simply
+		// using two slashes as this will be interpreted as a
+		// comment start. See note to ECMA-262 5th 7.8.5.
+		re = /(?:)/;
+		tmp = generateTestStrings(30);
 	});
 
 	test( "Compiled Object Empty Split", function(){
-		for ( var i = 0; i < 100; i++ )
-			ret = tmp.split( re );
+		for ( var i = 0; i < 30; i++ )
+			ret = tmp[i].split( re );
 	});
 
 	prep(function(){
 		re = /a/;
-		tmp = str;
+		tmp = generateTestStrings(30);
 	});
 
 	test( "Compiled Object Char Split", function(){
 		for ( var i = 0; i < 30; i++ )
-			ret = tmp.split( re );
+			ret = tmp[i].split( re );
 	});
 
 	prep(function(){
 		re = /.*/;
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
 
 	test( "Compiled Object Variable Split", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = tmp.split( re );
+			ret = tmp[i].split( re );
 	});
     
 	// TESTS: Compiled RegExps
 
 	prep(function(){ 
 		re = /aaaaaaaaaa/g;
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
     
 	test( "Compiled Match", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = tmp.match( re );
+			ret = tmp[i].match( re );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
     
 	test( "Compiled Test", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = re.test( tmp );
+			ret = re.test( tmp[i] );
 	});
     
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
     
 	test( "Compiled Empty Replace", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, "" );
+			ret = tmp[i].replace( re, "" );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
 	
 	test( "Compiled 12 Char Replace", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, "asdfasdfasdf" );
+			ret = tmp[i].replace( re, "asdfasdfasdf" );
 	});
 	
 	prep(function(){
 		re = new RegExp("aaaaaaaaaa", "g");
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
     
 	test( "Compiled Object Match", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = tmp.match( re );
+			ret = tmp[i].match( re );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
     
 	test( "Compiled Object Test", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = re.test( tmp );
+			ret = re.test( tmp[i] );
 	});
     
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
     
 	test( "Compiled Object Empty Replace", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, "" );
+			ret = tmp[i].replace( re, "" );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
 	
 	test( "Compiled Object 12 Char Replace", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, "asdfasdfasdf" );
+			ret = tmp[i].replace( re, "asdfasdfasdf" );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
 	
 	test( "Compiled Object 12 Char Replace Function", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, function(all){
+			ret = tmp[i].replace( re, function(all){
 			return "asdfasdfasdf";
 		});
 	});
@@ -138,85 +167,85 @@
 	
 	prep(function(){
 		re = /a.*a/;
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
     
 	test( "Compiled Variable Match", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = tmp.match( re );
+			ret = tmp[i].match( re );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
     
 	test( "Compiled Variable Test", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = re.test( tmp );
+			ret = re.test( tmp[i] );
 	});
     
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
     
 	test( "Compiled Variable Empty Replace", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, "" );
+			ret = tmp[i].replace( re, "" );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
 	
 	test( "Compiled Variable 12 Char Replace", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, "asdfasdfasdf" );
+			ret = tmp[i].replace( re, "asdfasdfasdf" );
 	});
 	
 	prep(function(){
 		re = new RegExp("aaaaaaaaaa", "g");
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
     
 	test( "Compiled Variable Object Match", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = tmp.match( re );
+			ret = tmp[i].match( re );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
     
 	test( "Compiled Variable Object Test", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = re.test( tmp );
+			ret = re.test( tmp[i] );
 	});
     
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
     
 	test( "Compiled Variable Object Empty Replace", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, "" );
+			ret = tmp[i].replace( re, "" );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
 	
 	test( "Compiled Variable Object 12 Char Replace", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, "asdfasdfasdf" );
+			ret = tmp[i].replace( re, "asdfasdfasdf" );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
 	
 	test( "Compiled Variable Object 12 Char Replace Function", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, function(all){
+			ret = tmp[i].replace( re, function(all){
 			return "asdfasdfasdf";
 		});
 	});
@@ -225,50 +254,50 @@
 	
 	prep(function(){
 		re = /aa(b)aa/g;
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
 	
 	test( "Compiled Capture Match", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = tmp.match( re );
+			ret = tmp[i].match( re );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
 	
 	test( "Compiled Capture Replace", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, "asdfasdfasdf" );
+			ret = tmp[i].replace( re, "asdfasdfasdf" );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
 	
 	test( "Compiled Capture Replace with Capture", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, "asdf\\1asdfasdf" );
+			ret = tmp[i].replace( re, "asdf\\1asdfasdf" );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
 	
 	test( "Compiled Capture Replace with Capture Function", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, function(all,capture){
+			ret = tmp[i].replace( re, function(all,capture){
 			return "asdf" + capture + "asdfasdf";
 		});
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
 	
 	test( "Compiled Capture Replace with Upperase Capture Function", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( re, function(all,capture){
+			ret = tmp[i].replace( re, function(all,capture){
 			return capture.toUpperCase();
 		});
 	});
@@ -276,75 +305,75 @@
 	// TESTS: Uncompiled RegExps
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
     
 	test( "Uncompiled Match", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = tmp.match( /aaaaaaaaaa/g );
+			ret = tmp[i].match( /aaaaaaaaaa/g );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
     
 	test( "Uncompiled Test", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = (/aaaaaaaaaa/g).test( tmp );
+			ret = (/aaaaaaaaaa/g).test( tmp[i] );
 	});
     
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
     
 	test( "Uncompiled Empty Replace", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( /aaaaaaaaaa/g, "" );
+			ret = tmp[i].replace( /aaaaaaaaaa/g, "" );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
 	
 	test( "Uncompiled 12 Char Replace", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( /aaaaaaaaaa/g, "asdfasdfasdf" );
+			ret = tmp[i].replace( /aaaaaaaaaa/g, "asdfasdfasdf" );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
     
 	test( "Uncompiled Object Match", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = tmp.match( new RegExp("aaaaaaaaaa", "g") );
+			ret = tmp[i].match( new RegExp("aaaaaaaaaa", "g") );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(100);
 	});
     
 	test( "Uncompiled Object Test", function(){
 		for ( var i = 0; i < 100; i++ )
-			ret = (new RegExp("aaaaaaaaaa", "g")).test( tmp );
+			ret = (new RegExp("aaaaaaaaaa", "g")).test( tmp[i] );
 	});
     
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
     
 	test( "Uncompiled Object Empty Replace", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( new RegExp("aaaaaaaaaa", "g"), "" );
+			ret = tmp[i].replace( new RegExp("aaaaaaaaaa", "g"), "" );
 	});
 	
 	prep(function(){
-		tmp = str;
+		tmp = generateTestStrings(50);
 	});
 	
 	test( "Uncompiled Object 12 Char Replace", function(){
 		for ( var i = 0; i < 50; i++ )
-			ret = tmp.replace( new RegExp("aaaaaaaaaa", "g"), "asdfasdfasdf" );
+			ret = tmp[i].replace( new RegExp("aaaaaaaaaa", "g"), "asdfasdfasdf" );
 	});
 
 endTest(); };
diff --git a/tests/dromaeo-object-string.html b/tests/dromaeo-object-string.html
index 80eedbe..836b6e4 100644
--- a/tests/dromaeo-object-string.html
+++ b/tests/dromaeo-object-string.html
@@ -2,7 +2,7 @@
 <head>
 <script src="../htmlrunner.js"></script>
 <script>
-window.onload = function(){ startTest("dromaeo-object-string", '');
+window.onload = function(){ startTest("dromaeo-object-string", 'ef8605c3');
 
 // Try to force real results
 var ret;
@@ -38,7 +38,7 @@
 		ret = str.join("");
 	});
 
-var ostr = [], tmp, num = 5000, tmpstr;
+var ostr = [], tmp, tmp2, num = 5000, tmpstr;
 
 for ( var i = 0; i < 16384; i++ )
 	ostr.push( String.fromCharCode( (25 * Math.random()) + 97 ) );
@@ -180,13 +180,18 @@
 	});
 
 	// TESTS: comparing
+	prep(function(){
+		tmp = str;
+		tmp2 = str;
+	});
 
 	test( "comparing", function(){
-		var tmp = str + "a";
+		tmp = "a" + tmp + "a";
+		tmp2 = "a" + tmp2 + "a";
 		for ( var j = 0; j < num / 1000; j++ ) {
-			ret = str == tmp;
-			ret = str < tmp;
-			ret = str > tmp;
+			ret = tmp == tmp2;
+			ret = tmp < tmp2;
+			ret = tmp > tmp2;
 		}
 	});
 
diff --git a/tests/dromaeo-string-base64.html b/tests/dromaeo-string-base64.html
index b541bbc..bb82256 100644
--- a/tests/dromaeo-string-base64.html
+++ b/tests/dromaeo-string-base64.html
@@ -120,7 +120,7 @@
     return result;
 }
 
-window.onload = function(){ startTest("dromaeo-string-base64", '');
+window.onload = function(){ startTest("dromaeo-string-base64", '09340c18');
 
 var str = [];
 
diff --git a/tests/jslib-attr-jquery.html b/tests/jslib-attr-jquery.html
index f872ea2..eff26dd 100644
--- a/tests/jslib-attr-jquery.html
+++ b/tests/jslib-attr-jquery.html
@@ -4,7 +4,7 @@
 <script src="../lib/jquery.js"></script>
 <script>
 window.onload = function(){
-startTest("jslib-attr-jquery", '');
+startTest("jslib-attr-jquery", 'd2fbb123');
 
 // Try to force real results
 var ret, tmp, div;
diff --git a/tests/jslib-attr-prototype.html b/tests/jslib-attr-prototype.html
index 596bb94..7ff519a 100644
--- a/tests/jslib-attr-prototype.html
+++ b/tests/jslib-attr-prototype.html
@@ -4,7 +4,7 @@
 <script src="../lib/prototype.js"></script>
 <script>
 window.onload = function(){
-startTest("jslib-attr-prototype", '');
+startTest("jslib-attr-prototype", 'a7983bbe');
 
 // Try to force real results
 var ret, tmp, div;
diff --git a/tests/jslib-event-jquery.html b/tests/jslib-event-jquery.html
index 226cc0c..aa7dfa9 100644
--- a/tests/jslib-event-jquery.html
+++ b/tests/jslib-event-jquery.html
@@ -4,7 +4,7 @@
 <script src="../lib/jquery.js"></script>
 <script>
 window.onload = function(){
-startTest("jslib-event-jquery", '');
+startTest("jslib-event-jquery", '471bfd04');
 
 // Try to force real results
 var ret, tmp, div;
diff --git a/tests/jslib-event-prototype.html b/tests/jslib-event-prototype.html
index f70799c..65060a5 100644
--- a/tests/jslib-event-prototype.html
+++ b/tests/jslib-event-prototype.html
@@ -4,7 +4,7 @@
 <script src="../lib/prototype.js"></script>
 <script>
 window.onload = function(){
-startTest("jslib-event-prototype", '');
+startTest("jslib-event-prototype", '05cfe7b8');
 
 // Try to force real results
 var ret, tmp, div;
diff --git a/tests/jslib-modify-jquery.html b/tests/jslib-modify-jquery.html
index e566759..a8e24c7 100644
--- a/tests/jslib-modify-jquery.html
+++ b/tests/jslib-modify-jquery.html
@@ -4,7 +4,7 @@
 <script src="../lib/jquery.js"></script>
 <script>
 window.onload = function(){
-startTest("jslib-modify-jquery", '');
+startTest("jslib-modify-jquery", '0e3fac95');
 
 // Try to force real results
 var ret, tmp, div, a, dd;
diff --git a/tests/jslib-modify-prototype.html b/tests/jslib-modify-prototype.html
index bcf9651..3f0cd50 100644
--- a/tests/jslib-modify-prototype.html
+++ b/tests/jslib-modify-prototype.html
@@ -4,7 +4,7 @@
 <script src="../lib/prototype.js"></script>
 <script>
 window.onload = function(){
-startTest("jslib-modify-prototype", '');
+startTest("jslib-modify-prototype", '8fe35dff');
 
 // Try to force real results
 var ret, tmp, div, a, dd;
diff --git a/tests/jslib-style-jquery.html b/tests/jslib-style-jquery.html
index 74e3f61..4d26858 100644
--- a/tests/jslib-style-jquery.html
+++ b/tests/jslib-style-jquery.html
@@ -4,7 +4,7 @@
 <script src="../lib/jquery.js"></script>
 <script>
 window.onload = function(){
-startTest("jslib-style-jquery", '');
+startTest("jslib-style-jquery", '47bfc8bd');
 
 // Try to force real results
 var ret, tmp, div;
diff --git a/tests/jslib-style-prototype.html b/tests/jslib-style-prototype.html
index 64fabd6..927e476 100644
--- a/tests/jslib-style-prototype.html
+++ b/tests/jslib-style-prototype.html
@@ -4,7 +4,7 @@
 <script src="../lib/prototype.js"></script>
 <script>
 window.onload = function(){
-startTest("jslib-style-prototype", '');
+startTest("jslib-style-prototype", 'f511098c');
 
 // Try to force real results
 var ret, tmp, div;
diff --git a/tests/jslib-traverse-jquery.html b/tests/jslib-traverse-jquery.html
index e336a97..edd37d3 100644
--- a/tests/jslib-traverse-jquery.html
+++ b/tests/jslib-traverse-jquery.html
@@ -4,7 +4,7 @@
 <script src="../lib/jquery.js"></script>
 <script>
 window.onload = function(){
-startTest("jslib-traverse-jquery", '');
+startTest("jslib-traverse-jquery", 'c67d0b8e');
 
 // Try to force real results
 var ret, tmp, div, dd;
diff --git a/tests/jslib-traverse-prototype.html b/tests/jslib-traverse-prototype.html
index c23ee41..a39d148 100644
--- a/tests/jslib-traverse-prototype.html
+++ b/tests/jslib-traverse-prototype.html
@@ -4,7 +4,7 @@
 <script src="../lib/prototype.js"></script>
 <script>
 window.onload = function(){
-startTest("jslib-traverse-prototype", '');
+startTest("jslib-traverse-prototype", '3358ef63');
 
 // Try to force real results
 var ret, tmp, div, dd;
diff --git a/tests/sunspider-3d-morph.html b/tests/sunspider-3d-morph.html
index 8428f27..8bdacaa 100644
--- a/tests/sunspider-3d-morph.html
+++ b/tests/sunspider-3d-morph.html
@@ -5,7 +5,7 @@
 // Test from here:
 // http://webkit.org/misc/morph.html
 
-window.onload = function(){ startTest("sunspider-3d-morph", '');
+window.onload = function(){ startTest("sunspider-3d-morph", '62915fe1');
 
 var loops = 15, nx, nz, a;
 var size = 120;
diff --git a/tests/sunspider-3d-raytrace.html b/tests/sunspider-3d-raytrace.html
index 55ca405..4acc31d 100644
--- a/tests/sunspider-3d-raytrace.html
+++ b/tests/sunspider-3d-raytrace.html
@@ -440,7 +440,7 @@
     return s;
 }
 
-window.onload = function(){ startTest("sunspider-3d-raytrace", '');
+window.onload = function(){ startTest("sunspider-3d-raytrace", '8f9b64d5');
 
 var rayoutput;
 
diff --git a/tests/sunspider-access-binary-trees.html b/tests/sunspider-access-binary-trees.html
index d5e4da6..d0c8777 100644
--- a/tests/sunspider-access-binary-trees.html
+++ b/tests/sunspider-access-binary-trees.html
@@ -30,7 +30,7 @@
    }
 }
 
-window.onload = function(){ startTest("sunspider-access-binary-trees", '');
+window.onload = function(){ startTest("sunspider-access-binary-trees", 'c1dfeea3');
 
 var ret;
 
diff --git a/tests/sunspider-access-fannkuch.html b/tests/sunspider-access-fannkuch.html
index 175ef2d..5504428 100644
--- a/tests/sunspider-access-fannkuch.html
+++ b/tests/sunspider-access-fannkuch.html
@@ -65,7 +65,7 @@
    }
 }
 
-window.onload = function(){ startTest("sunspider-access-fannkuch", '');
+window.onload = function(){ startTest("sunspider-access-fannkuch", '786198fd');
 
 var ret;
 
diff --git a/tests/sunspider-access-nbody.html b/tests/sunspider-access-nbody.html
index 6b8a3b7..3ebb6c0 100644
--- a/tests/sunspider-access-nbody.html
+++ b/tests/sunspider-access-nbody.html
@@ -155,7 +155,7 @@
    return e;
 }
 
-window.onload = function(){ startTest("sunspider-access-nbody", '');
+window.onload = function(){ startTest("sunspider-access-nbody", '38cd3387');
 
 var ret;
 
diff --git a/tests/sunspider-access-nsieve.html b/tests/sunspider-access-nsieve.html
index 5c2d6c6..00dc1cc 100644
--- a/tests/sunspider-access-nsieve.html
+++ b/tests/sunspider-access-nsieve.html
@@ -31,7 +31,7 @@
    return count;
 }
 
-window.onload = function(){ startTest("sunspider-access-nsieve", '');
+window.onload = function(){ startTest("sunspider-access-nsieve", 'efeee6f3');
 
 test( "N-Sieve", function(){
 	for ( var i = 1; i <= 2; i++ ) {
diff --git a/tests/sunspider-bitops-3bit-bits-in-byte.html b/tests/sunspider-bitops-3bit-bits-in-byte.html
index 3064688..f3caffc 100644
--- a/tests/sunspider-bitops-3bit-bits-in-byte.html
+++ b/tests/sunspider-bitops-3bit-bits-in-byte.html
@@ -33,7 +33,7 @@
 for(var y=0; y<256; y++) func(y);
 }
 
-window.onload = function(){ startTest("sunspider-bitops-3bit-bits-in-byte", '');
+window.onload = function(){ startTest("sunspider-bitops-3bit-bits-in-byte", '3664f684');
 
 test("3bit bits in byte", function(){
 	TimeFunc(fast3bitlookup);
diff --git a/tests/sunspider-bitops-bits-in-byte.html b/tests/sunspider-bitops-bits-in-byte.html
index ac3bceb..f3cbf21 100644
--- a/tests/sunspider-bitops-bits-in-byte.html
+++ b/tests/sunspider-bitops-bits-in-byte.html
@@ -22,7 +22,7 @@
 for(var y=0; y<256; y++) func(y);
 }
 
-window.onload = function(){ startTest("sunspider-bitops-bits-in-byte", '');
+window.onload = function(){ startTest("sunspider-bitops-bits-in-byte", '245fac8a');
 
 test("Bit in byte (2)", function(){
 	TimeFunc(bitsinbyte);
diff --git a/tests/sunspider-bitops-bitwise-and.html b/tests/sunspider-bitops-bitwise-and.html
index c82863b..a6e10e4 100644
--- a/tests/sunspider-bitops-bitwise-and.html
+++ b/tests/sunspider-bitops-bitwise-and.html
@@ -27,7 +27,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-window.onload = function(){ startTest("sunspider-bitops-bitwise-and", '');
+window.onload = function(){ startTest("sunspider-bitops-bitwise-and", '17d2bd38');
 
 test("Bitwise And", function(){
 	bitwiseAndValue = 4294967296;
diff --git a/tests/sunspider-bitops-nsieve-bits.html b/tests/sunspider-bitops-nsieve-bits.html
index 0bffde9..42e414c 100644
--- a/tests/sunspider-bitops-nsieve-bits.html
+++ b/tests/sunspider-bitops-nsieve-bits.html
@@ -26,7 +26,7 @@
     }
 }
 
-window.onload = function(){ startTest("sunspider-bitops-nsieve-bits", '');
+window.onload = function(){ startTest("sunspider-bitops-nsieve-bits", '35973a6b');
 
 var i = 2;
 
diff --git a/tests/sunspider-controlflow-recursive.html b/tests/sunspider-controlflow-recursive.html
index 0146c7d..b016248 100644
--- a/tests/sunspider-controlflow-recursive.html
+++ b/tests/sunspider-controlflow-recursive.html
@@ -22,7 +22,7 @@
 	return tak(tak(x-1,y,z), tak(y-1,z,x), tak(z-1,x,y));
 }
 
-window.onload = function(){ startTest("sunspider-controlflow-recursive", '');
+window.onload = function(){ startTest("sunspider-controlflow-recursive", '558ed308');
 
 	test("Ack", function(){
 		for ( var i = 3; i <= 5; i++ )
diff --git a/tests/sunspider-crypto-aes.html b/tests/sunspider-crypto-aes.html
index d6c625d..758a150 100644
--- a/tests/sunspider-crypto-aes.html
+++ b/tests/sunspider-crypto-aes.html
@@ -423,7 +423,7 @@
 var password = "O Romeo, Romeo! wherefore art thou Romeo?";
 var cipherText, decryptedText;
 
-window.onload = function(){ startTest("sunspider-crypto-aes", '');
+window.onload = function(){ startTest("sunspider-crypto-aes", 'e80e78f2');
 
 test("AES Encrypt", function(){
 	cipherText = AESEncryptCtr(plainText, password, 256);
diff --git a/tests/sunspider-crypto-md5.html b/tests/sunspider-crypto-md5.html
index ab1f6bd..18bcbef 100644
--- a/tests/sunspider-crypto-md5.html
+++ b/tests/sunspider-crypto-md5.html
@@ -287,7 +287,7 @@
     plainText += plainText;
 }
 
-window.onload = function(){ startTest("sunspider-crypto-md5", '');
+window.onload = function(){ startTest("sunspider-crypto-md5", 'bd4d08e1');
 
 test("MD5", function(){
 	var md5Output = hex_md5(plainText);
diff --git a/tests/sunspider-crypto-sha1.html b/tests/sunspider-crypto-sha1.html
index 3a8b40f..12a966b 100644
--- a/tests/sunspider-crypto-sha1.html
+++ b/tests/sunspider-crypto-sha1.html
@@ -225,7 +225,7 @@
     plainText += plainText;
 }
 
-window.onload = function(){ startTest("sunspider-crypto-sha1", '');
+window.onload = function(){ startTest("sunspider-crypto-sha1", 'b1fc168a');
 
 test("SHA1 Hashing", function(){
 	var sha1Output = hex_sha1(plainText);
diff --git a/tests/sunspider-date-format-tofte.html b/tests/sunspider-date-format-tofte.html
index 02d720d..acda2c0 100644
--- a/tests/sunspider-date-format-tofte.html
+++ b/tests/sunspider-date-format-tofte.html
@@ -295,7 +295,7 @@
 
 var date = new Date("1/1/2007 1:11:11");
 
-window.onload = function(){ startTest("sunspider-date-format-tofte", '');
+window.onload = function(){ startTest("sunspider-date-format-tofte", '393fb742');
 
 test("Format Date", function(){
 	for (var i = 0; i < 50; ++i) {
diff --git a/tests/sunspider-date-format-xparb.html b/tests/sunspider-date-format-xparb.html
index 71f2096..036ec21 100644
--- a/tests/sunspider-date-format-xparb.html
+++ b/tests/sunspider-date-format-xparb.html
@@ -414,7 +414,7 @@
 
 var date = new Date("1/1/2007 1:11:11");
 
-window.onload = function(){ startTest("sunspider-date-format-xparb", '');
+window.onload = function(){ startTest("sunspider-date-format-xparb", 'e2a44595');
 
 test("Date Format (2)", function(){
 	for (i = 0; i < 400; ++i) {
diff --git a/tests/sunspider-math-cordic.html b/tests/sunspider-math-cordic.html
index 759c699..c71964e 100644
--- a/tests/sunspider-math-cordic.html
+++ b/tests/sunspider-math-cordic.html
@@ -90,7 +90,7 @@
   }
 }
 
-window.onload = function(){ startTest("sunspider-math-cordic", '');
+window.onload = function(){ startTest("sunspider-math-cordic", '211c9ee6');
 
 test("Cordic", function(){
 	cordic(2500);
diff --git a/tests/sunspider-math-partial-sums.html b/tests/sunspider-math-partial-sums.html
index 2677cca..582265c 100644
--- a/tests/sunspider-math-partial-sums.html
+++ b/tests/sunspider-math-partial-sums.html
@@ -31,7 +31,7 @@
 	}
 }
 
-window.onload = function(){ startTest("sunspider-math-partial-sums", '');
+window.onload = function(){ startTest("sunspider-math-partial-sums", 'a31c1c44');
 
 test( "Partial Sums", function(){
 	partial(2048);
diff --git a/tests/sunspider-math-spectral-norm.html b/tests/sunspider-math-spectral-norm.html
index c00bbac..f44a906 100644
--- a/tests/sunspider-math-spectral-norm.html
+++ b/tests/sunspider-math-spectral-norm.html
@@ -50,7 +50,7 @@
   return Math.sqrt(vBv/vv);
 }
 
-window.onload = function(){ startTest("sunspider-math-spectral-norm", '');
+window.onload = function(){ startTest("sunspider-math-spectral-norm", 'e740809d');
 
 test( "Spectral Norm", function(){
 	for (var i = 12; i <= 24; i *= 2)
diff --git a/tests/sunspider-regexp-dna.html b/tests/sunspider-regexp-dna.html
index c3f0e32..0368659 100644
--- a/tests/sunspider-regexp-dna.html
+++ b/tests/sunspider-regexp-dna.html
@@ -1707,7 +1707,7 @@
 
 var dnaOutputString;
 
-window.onload = function(){ startTest("sunspider-regexp-dna", '');
+window.onload = function(){ startTest("sunspider-regexp-dna", '4a9a13f2');
 
 test("DNA Match (1)", function(){
 	for(i in seqs)
diff --git a/tests/sunspider-string-fasta.html b/tests/sunspider-string-fasta.html
index 774a7f1..3f4395f 100644
--- a/tests/sunspider-string-fasta.html
+++ b/tests/sunspider-string-fasta.html
@@ -80,7 +80,7 @@
   }
 }
 
-window.onload = function(){ startTest("sunspider-string-fasta", '');
+window.onload = function(){ startTest("sunspider-string-fasta", '8d52ecfc');
 
 var ret;
 var n = 16;
diff --git a/tests/sunspider-string-tagcloud.html b/tests/sunspider-string-tagcloud.html
index a847743..38158fa 100644
--- a/tests/sunspider-string-tagcloud.html
+++ b/tests/sunspider-string-tagcloud.html
@@ -262,7 +262,7 @@
 }
 
 window.onload = function(){
-startTest("sunspider-string-tagcloud", '');
+startTest("sunspider-string-tagcloud", 'f05543ff');
 
 var tagInfo;
 
diff --git a/tests/sunspider-string-unpack-code.html b/tests/sunspider-string-unpack-code.html
index 012e563..ba0e2e7 100644
--- a/tests/sunspider-string-unpack-code.html
+++ b/tests/sunspider-string-unpack-code.html
@@ -5,7 +5,7 @@
 // This test case unpacks the compressed code for the MochiKit,
 // jQuery, Dojo and Prototype JavaScript libraries.
 
-window.onload = function(){ startTest("sunspider-string-unpack-code", '');
+window.onload = function(){ startTest("sunspider-string-unpack-code", '5e425aed');
 
 test("Unpack Code", function(){
 
diff --git a/tests/sunspider-string-validate-input.html b/tests/sunspider-string-validate-input.html
index 1ef56ce..1efc80a 100644
--- a/tests/sunspider-string-validate-input.html
+++ b/tests/sunspider-string-validate-input.html
@@ -97,7 +97,7 @@
    endResult += "\n" + r;
 }
 
-window.onload = function(){ startTest("sunspider-string-validate-input", '');
+window.onload = function(){ startTest("sunspider-string-validate-input", '7e409a49');
 
 test("Validate Email Input", testEmail);
 test("Validate Zipcode Input", testEmail);
diff --git a/tests/v8-crypto.html b/tests/v8-crypto.html
index 1a00cb1..19a8ea6 100644
--- a/tests/v8-crypto.html
+++ b/tests/v8-crypto.html
@@ -1679,7 +1679,7 @@
     "Now is the time for all good men to come to the party.";
 var encrypted;
 
-window.onload = function(){ startTest("v8-crypto", '');
+window.onload = function(){ startTest("v8-crypto", 'f0250ffa');
 
 test("RSA Encrypt", function encrypt() {
   var RSA = new RSAKey();
diff --git a/tests/v8-deltablue.html b/tests/v8-deltablue.html
index 03bf840..69e6348 100644
--- a/tests/v8-deltablue.html
+++ b/tests/v8-deltablue.html
@@ -873,7 +873,7 @@
 // Global variable holding the current planner.
 var planner = null;
 
-window.onload = function(){ startTest("v8-deltablue", '');
+window.onload = function(){ startTest("v8-deltablue", 'b95228dc');
 
 test("Constraint Solving", function deltaBlue() {
   chainTest(100);
diff --git a/tests/v8-earley-boyer.html b/tests/v8-earley-boyer.html
index 2183447..6324417 100644
--- a/tests/v8-earley-boyer.html
+++ b/tests/v8-earley-boyer.html
@@ -4681,7 +4681,7 @@
 
 var BgL_runzd2benchmarkzd2 = RunBenchmark;
 
-window.onload = function(){ startTest("v8-earley-boyer", '');
+window.onload = function(){ startTest("v8-earley-boyer", 'd4c16950');
 
 test("Earley", BgL_earleyzd2benchmarkzd2);
 test("Boyer", BgL_nboyerzd2benchmarkzd2);
diff --git a/tests/v8-raytrace.html b/tests/v8-raytrace.html
index 6b50691..55c1825 100644
--- a/tests/v8-raytrace.html
+++ b/tests/v8-raytrace.html
@@ -3433,7 +3433,7 @@
 }
 
 window.onload = function(){
-startTest("v8-raytrace", '');
+startTest("v8-raytrace", '39e09d10');
 
 test("RayTrace", renderScene);
 
diff --git a/tests/v8-richards.html b/tests/v8-richards.html
index 6fb8ce6..9d1a5a8 100644
--- a/tests/v8-richards.html
+++ b/tests/v8-richards.html
@@ -39,7 +39,7 @@
 // Martin Richards.
 
 
-window.onload = function(){ startTest("v8-richards", '');
+window.onload = function(){ startTest("v8-richards", 'ca0410e0');
 
 test("Richards", runRichards);