1*0ac341f1SConrad Meyer<!doctype html> 2*0ac341f1SConrad Meyer<html> 3*0ac341f1SConrad Meyer<head> 4*0ac341f1SConrad Meyer<style> 5*0ac341f1SConrad Meyer<meta name="google" content="notranslate" /> 6*0ac341f1SConrad Meyerbody { 7*0ac341f1SConrad Meyer background: white; 8*0ac341f1SConrad Meyer color: black; 9*0ac341f1SConrad Meyer} 10*0ac341f1SConrad Meyer.test p { 11*0ac341f1SConrad Meyer margin: 1px; 12*0ac341f1SConrad Meyer} 13*0ac341f1SConrad Meyer.test { 14*0ac341f1SConrad Meyer font-family: monospace; 15*0ac341f1SConrad Meyer white-space: pre; 16*0ac341f1SConrad Meyer} 17*0ac341f1SConrad Meyer.err { 18*0ac341f1SConrad Meyer background: red; 19*0ac341f1SConrad Meyer color: white; 20*0ac341f1SConrad Meyer} 21*0ac341f1SConrad Meyer.passed { 22*0ac341f1SConrad Meyer background: green; 23*0ac341f1SConrad Meyer color: white; 24*0ac341f1SConrad Meyer} 25*0ac341f1SConrad Meyer</style> 26*0ac341f1SConrad Meyer</head> 27*0ac341f1SConrad Meyer<body> 28*0ac341f1SConrad Meyer<h1></h1> 29*0ac341f1SConrad Meyer<section class="test" id="test-res"></section> 30*0ac341f1SConrad Meyer<script> 31*0ac341f1SConrad Meyervar performance; 32*0ac341f1SConrad Meyerif (typeof performance !== 'object') { 33*0ac341f1SConrad Meyer performance = { 34*0ac341f1SConrad Meyer mark: function(s) { this[s] = new Date() }, 35*0ac341f1SConrad Meyer measure: function(_t, s1, s2) { this.t = this[s2] - this[s1] }, 36*0ac341f1SConrad Meyer getEntriesByName: function() { return [ { duration: this.t } ] } 37*0ac341f1SConrad Meyer }; 38*0ac341f1SConrad Meyer} 39*0ac341f1SConrad Meyer 40*0ac341f1SConrad Meyervar Module = { preRun: function() { performance.mark('bench_start') } }; 41*0ac341f1SConrad Meyer 42*0ac341f1SConrad Meyerfunction runTest(tname) { 43*0ac341f1SConrad Meyer var xhr, expected, hn, idx = 0, passed = true; 44*0ac341f1SConrad Meyer 45*0ac341f1SConrad Meyer function outputReceived(e) { 46*0ac341f1SConrad Meyer var found = e.data; 47*0ac341f1SConrad Meyer var p = document.createElement('p'); 48*0ac341f1SConrad Meyer if (found !== expected[idx++]) { 49*0ac341f1SConrad Meyer p.className = 'err'; 50*0ac341f1SConrad Meyer passed = false; 51*0ac341f1SConrad Meyer } 52*0ac341f1SConrad Meyer p.appendChild(document.createTextNode(found)); 53*0ac341f1SConrad Meyer document.getElementById('test-res').appendChild(p); 54*0ac341f1SConrad Meyer if (idx >= expected.length) { 55*0ac341f1SConrad Meyer if (passed) { 56*0ac341f1SConrad Meyer performance.mark('bench_end') 57*0ac341f1SConrad Meyer performance.measure('bench', 'bench_start', 'bench_end'); 58*0ac341f1SConrad Meyer var duration = Math.round(performance.getEntriesByName('bench')[0].duration); 59*0ac341f1SConrad Meyer hn.appendChild(document.createTextNode(' - PASSED (time: ' + duration + ' ms)')); 60*0ac341f1SConrad Meyer hn.className = 'passed'; 61*0ac341f1SConrad Meyer } else { 62*0ac341f1SConrad Meyer hn.appendChild(document.createTextNode(' - FAILED')); 63*0ac341f1SConrad Meyer hn.className = 'err'; 64*0ac341f1SConrad Meyer } 65*0ac341f1SConrad Meyer } 66*0ac341f1SConrad Meyer } 67*0ac341f1SConrad Meyer 68*0ac341f1SConrad Meyer hn = document.getElementsByTagName('h1')[0]; 69*0ac341f1SConrad Meyer hn.appendChild(document.createTextNode('Test: ' + tname)); 70*0ac341f1SConrad Meyer 71*0ac341f1SConrad Meyer try { 72*0ac341f1SConrad Meyer xhr = new ActiveXObject('Microsoft.XMLHTTP'); 73*0ac341f1SConrad Meyer } catch (e) { 74*0ac341f1SConrad Meyer xhr = new XMLHttpRequest(); 75*0ac341f1SConrad Meyer } 76*0ac341f1SConrad Meyer xhr.open('GET', tname + '.exp'); 77*0ac341f1SConrad Meyer xhr.onreadystatechange = function() { 78*0ac341f1SConrad Meyer if (xhr.readyState != 4 || 79*0ac341f1SConrad Meyer (xhr.status != 200 && xhr.status != 302 && xhr.status != 0)) { 80*0ac341f1SConrad Meyer return; 81*0ac341f1SConrad Meyer } 82*0ac341f1SConrad Meyer expected = xhr.responseText.split('\n'); 83*0ac341f1SConrad Meyer if (expected.length > 0 && expected[expected.length - 1] === '') { 84*0ac341f1SConrad Meyer expected.pop(); 85*0ac341f1SConrad Meyer } 86*0ac341f1SConrad Meyer expected.push('--- SUCCESS ---'); 87*0ac341f1SConrad Meyer window.addEventListener('test-output', outputReceived, false); 88*0ac341f1SConrad Meyer var s = document.getElementsByTagName('script')[0]; 89*0ac341f1SConrad Meyer var st = document.createElement('script'); 90*0ac341f1SConrad Meyer st.src = tname + '.js'; 91*0ac341f1SConrad Meyer s.parentNode.insertBefore(st, s); 92*0ac341f1SConrad Meyer } 93*0ac341f1SConrad Meyer xhr.send(null); 94*0ac341f1SConrad Meyer} 95*0ac341f1SConrad MeyerrunTest('{{tname}}'); 96*0ac341f1SConrad Meyer</script> 97*0ac341f1SConrad Meyer</body> 98*0ac341f1SConrad Meyer</html> 99