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