| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <style> | 2 <style> |
| 3 |
| 3 html { | 4 html { |
| 4 height: 100%; | 5 height: 100%; |
| 5 } | 6 } |
| 7 |
| 6 body { | 8 body { |
| 7 margin: 0; | 9 margin: 1.0em; |
| 8 font-family: Helvetica, sans-serif; | 10 font-family: Helvetica, sans-serif; |
| 9 font-size: 11pt; | 11 font-size: 11pt; |
| 10 display: -webkit-flex; | 12 display: -webkit-flex; |
| 11 -webkit-flex-direction: column; | 13 -webkit-flex-direction: column; |
| 12 height: 100%; | 14 height: 100%; |
| 13 } | 15 } |
| 14 | 16 |
| 15 body > * { | 17 body > * { |
| 16 margin-left: 4px; | 18 margin-left: 4px; |
| 17 margin-top: 4px; | 19 margin-top: 4px; |
| 18 } | 20 } |
| 19 | 21 |
| 20 h1 { | 22 h1 { |
| 21 font-size: 14pt; | 23 font-size: 150%; |
| 22 margin-top: 1.5em; | 24 margin-top: 1.5em; |
| 23 text-align: center; | 25 text-align: center; |
| 24 text-decoration: underline; | |
| 25 } | 26 } |
| 26 | 27 |
| 27 a { | 28 a { |
| 28 text-decoration: none; | 29 text-decoration: none; |
| 29 } | 30 } |
| 30 | 31 |
| 31 tr { | 32 table { |
| 32 background-color: white; | 33 position: relative; |
| 34 top: 100px; |
| 33 } | 35 } |
| 34 | 36 |
| 35 tr:hover { | 37 th { |
| 36 background-color: #999999; | 38 background: rgb(200, 200, 200); |
| 39 border-radius: 5px; |
| 37 } | 40 } |
| 38 | 41 |
| 39 td { | 42 td { |
| 40 padding: 1px 4px; | 43 padding: 1px 4px; |
| 41 valign: center; | 44 vertical-align: middle; |
| 45 min-width: 20px; |
| 46 height: 25px; |
| 47 border: 1px solid rgb(200, 200, 200); |
| 48 border-radius: 5px; |
| 42 } | 49 } |
| 43 | 50 |
| 44 td:hover .note{ | 51 input[type=text] { |
| 45 display: block; | 52 border: 2px solid rgb(128, 128, 128); |
| 53 font-size: 120%; |
| 54 height: 30px; |
| 55 margin-bottom: 1.0em; |
| 56 margin-top: 1.0em; |
| 57 margin-left: 1.0em; |
| 58 padding-left: 0.8em; |
| 59 width: 500px; |
| 60 } |
| 61 |
| 62 input[type=checkbox] { |
| 63 padding: 0.1em; |
| 64 width: 20px; |
| 65 height: 20px; |
| 66 } |
| 67 |
| 68 .rerun-button { |
| 69 background: rgb(66, 184, 221); |
| 70 border-radius: 5px; |
| 71 font-size: 120%; |
| 72 height: 40px; |
| 73 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); |
| 74 width: 150px; |
| 75 } |
| 76 |
| 77 .rerun-button:hover { |
| 78 background: rgb(80, 200, 250); |
| 79 } |
| 80 |
| 81 .result-cell, .test-pass, .test-fail, .test-skip, .test-run{ |
| 82 border: 0px; |
| 83 border-radius: 5px; |
| 46 } | 84 } |
| 47 | 85 |
| 48 .test-pass { | 86 .test-pass { |
| 49 background-color:rgb(0,255,0); | 87 background-color: rgb(143, 223, 95); |
| 50 } | 88 } |
| 51 | 89 |
| 52 .test-fail { | 90 .test-fail { |
| 53 background-color:rgb(255,0,0); | 91 background-color: rgb(233, 128, 128); |
| 54 } | 92 } |
| 55 | 93 |
| 56 .test-skip { | 94 .test-skip { |
| 57 background-color:rgb(255,255,255); | 95 background-color: rgb(255, 255, 255); |
| 58 } | 96 } |
| 97 |
| 59 .test-run { | 98 .test-run { |
| 60 background-color:rgb(255,252,108); | 99 background-color: rgb(255, 252, 108); |
| 61 } | 100 } |
| 101 |
| 62 .log { | 102 .log { |
| 63 font-family: "Courier New" | 103 font-family: "Courier New"; |
| 104 display: block; |
| 105 position: relative; |
| 64 } | 106 } |
| 107 |
| 65 .stdio-href { | 108 .stdio-href { |
| 66 color: grey; | 109 color: grey; |
| 67 font-weight: bold; | 110 font-weight: bold; |
| 68 text-decoration: underline; | 111 text-decoration: underline; |
| 69 } | 112 } |
| 113 |
| 70 .stdio-href:hover { | 114 .stdio-href:hover { |
| 71 color:black; | 115 color:black; |
| 72 } | 116 } |
| 117 |
| 118 .odd-row { |
| 119 background: rgb(66, 184, 221); |
| 120 } |
| 121 |
| 122 .even-row { |
| 123 background: rgb(200, 200, 200); |
| 124 } |
| 125 |
| 126 .toolbox { |
| 127 display: block; |
| 128 position: fixed; |
| 129 padding: 4px; |
| 130 top: 10px; |
| 131 right: 10px; |
| 132 z-index: 9999; |
| 133 } |
| 134 |
| 135 .toolbox span { |
| 136 color: rgb(104, 104, 104); |
| 137 position: absolute; |
| 138 text-align: right; |
| 139 top: 30px; |
| 140 left: 570px; |
| 141 width: 100px; |
| 142 } |
| 143 |
| 73 </style> | 144 </style> |
| 74 <script> | 145 <script> |
| 75 var g_state; | 146 var g_state; |
| 76 function globalState() | 147 function globalState() |
| 77 { | 148 { |
| 78 if (!g_state) { | 149 if (!g_state) { |
| 79 g_state = { | 150 g_state = { |
| 80 results: {} | 151 results: {} |
| 81 } | 152 } |
| 82 } | 153 } |
| 83 return g_state; | 154 return g_state; |
| 84 } | 155 } |
| 85 | 156 |
| 86 function ADD_RESULTS(input) | 157 function ADD_RESULTS(input) |
| 87 { | 158 { |
| 88 globalState().results = input; | 159 globalState().results = input; |
| 89 } | 160 } |
| 90 </script> | 161 </script> |
| 91 <script src="archived_results.json"></script> | 162 <script src="archived_results.json"></script> |
| 92 <script> | 163 <script> |
| 93 function processGlobalStateFor(testObject) | 164 function processGlobalStateFor(testObject) |
| 94 { | 165 { |
| 95 var table = document.getElementById('results-table'); | 166 var table = document.getElementById('results-table'); |
| 96 var row = table.insertRow(-1); | 167 var row = table.insertRow(-1); |
| 168 if (table.rows.length % 2 == 0) |
| 169 row.className = 'even-row'; |
| 170 else |
| 171 row.className = 'odd-row'; |
| 97 var checkboxcell = row.insertCell(-1); | 172 var checkboxcell = row.insertCell(-1); |
| 98 var checkbox = document.createElement("input"); | 173 var checkbox = document.createElement("input"); |
| 99 checkbox.setAttribute('type','checkbox'); | 174 checkbox.setAttribute('type','checkbox'); |
| 100 checkboxcell.appendChild(checkbox); | 175 checkboxcell.appendChild(checkbox); |
| 101 var cell = row.insertCell(-1); | 176 var cell = row.insertCell(-1); |
| 102 cell.innerHTML = testObject.name; | 177 cell.innerHTML = testObject.name; |
| 103 for (var result in testObject.archived_results) { | 178 for (var result in testObject.archived_results) { |
| 104 var res = testObject.archived_results[result]; | 179 var res = testObject.archived_results[result]; |
| 105 var cell = row.insertCell(-1); | 180 var cell = row.insertCell(-1); |
| 106 if( res == 'PASS') | 181 if( res == 'PASS') |
| 107 cell.className = 'test-pass'; | 182 cell.className = 'test-pass'; |
| 108 else if( res == 'SKIP') | 183 else if( res == 'SKIP') |
| 109 cell.className = 'test-skip'; | 184 cell.className = 'test-skip'; |
| 110 else | 185 else |
| 111 cell.className = 'test-fail'; | 186 cell.className = 'test-fail'; |
| 112 var hrefElement = document.createElement("a"); | 187 var hrefElement = document.createElement("a"); |
| 113 hrefElement.href = globalState().results.result_links[result]; | 188 hrefElement.href = globalState().results.result_links[result]; |
| 114 hrefElement.innerHTML = ' '; | 189 hrefElement.innerHTML = ' '; |
| 115 cell.appendChild(hrefElement); | 190 cell.appendChild(hrefElement); |
| 116 } | 191 } |
| 117 | 192 |
| 118 | 193 |
| 119 } | 194 } |
| 120 function forEachTest(handler, opt_tree, opt_prefix) | 195 function forEachTest(handler, opt_tree, opt_prefix) |
| 121 { | 196 { |
| 122 var tree = opt_tree || globalState().results.tests; | 197 var tree = opt_tree || globalState().results.tests; |
| 123 var prefix = opt_prefix || ''; | 198 var prefix = opt_prefix || ''; |
| 124 | 199 |
| 125 for (var key in tree) { | 200 for (var key in tree) { |
| 126 var newPrefix = prefix ? (prefix + '/' + key) : key; | 201 var newPrefix = prefix ? (prefix + '/' + key) : key; |
| 127 if ('archived_results' in tree[key]) { | 202 if ('archived_results' in tree[key]) { |
| 128 var testObject = tree[key]; | 203 var testObject = tree[key]; |
| 129 testObject.name = newPrefix; | 204 testObject.name = newPrefix; |
| 130 handler(testObject); | 205 handler(testObject); |
| 131 } else | 206 } else |
| 132 forEachTest(handler, tree[key], newPrefix); | 207 forEachTest(handler, tree[key], newPrefix); |
| 133 } | 208 } |
| 134 } | 209 } |
| 135 function getTests() | 210 function getTests() |
| 136 { | 211 { |
| 137 var table = document.getElementById('results-table'); | 212 var table = document.getElementById('results-table'); |
| 138 var testCount = table.rows.length; | 213 var testCount = table.rows.length; |
| 139 var tests_list = { | 214 var tests_list = { |
| 140 tests : [] | 215 tests : [] |
| 141 }; | 216 }; |
| 142 for(var i = 1; i < testCount; i++) { | 217 for(var i = 2; i < testCount; i++) { |
| 143 var selected = table.rows[i].cells[0].getElementsByTagName("input")[0]; | 218 var selected = table.rows[i].cells[0].getElementsByTagName("input")[0]; |
| 144 if(selected.checked) { | 219 if(selected.checked) { |
| 145 var test = table.rows[i].cells[1].innerHTML; | 220 var test = table.rows[i].cells[1].innerHTML; |
| 146 tests_list.tests.push(test); | 221 tests_list.tests.push(test); |
| 147 } | 222 } |
| 148 } | 223 } |
| 149 return tests_list; | 224 return tests_list; |
| 150 } | 225 } |
| 151 function rerun() | 226 function rerun() |
| 152 { | 227 { |
| 153 var log = document.getElementById('log'); | 228 var log = document.getElementById('log'); |
| 154 var testList = JSON.stringify(getTests()); | 229 var testList = JSON.stringify(getTests()); |
| 155 var logText = document.createElement('p'); | 230 var logText = document.createElement('p'); |
| 156 logText.innerHTML = 'Re running the tests'; | 231 logText.innerHTML = 'Re running the tests'; |
| 157 logText.className = 'test-run'; | 232 logText.className = 'test-run'; |
| 158 var stdioIframe = document.createElement("IFRAME"); | 233 var stdioIframe = document.createElement("IFRAME"); |
| 159 stdioIframe.style.display = 'none'; | 234 stdioIframe.style.display = 'none'; |
| 160 stdioIframe.width = window.innerWidth; | 235 stdioIframe.width = window.innerWidth; |
| 236 stdioIframe.height = '100px'; |
| 161 stdioIframe.onload = function () { | 237 stdioIframe.onload = function () { |
| 162 stdioIframe.contentWindow.scrollTo(0,stdioIframe.contentWindow.docum
ent.body.scrollHeight); | 238 stdioIframe.contentWindow.scrollTo(0,stdioIframe.contentWindow.docum
ent.body.scrollHeight); |
| 163 } | 239 } |
| 164 var stdio = document.createElement("a"); | 240 var stdio = document.createElement("a"); |
| 165 stdio.innerHTML = '<p>stdio<p>'; | 241 stdio.innerHTML = '<p>stdio<p>'; |
| 166 stdio.className = 'stdio-href'; | 242 stdio.className = 'stdio-href'; |
| 167 stdio.onclick = function() { | 243 stdio.onclick = function() { |
| 168 if(stdioIframe.style.display == 'none') | 244 if(stdioIframe.style.display == 'none') |
| 169 stdioIframe.style.display = 'block'; | 245 stdioIframe.style.display = 'block'; |
| 170 else | 246 else |
| (...skipping 26 matching lines...) Expand all Loading... |
| 197 } | 273 } |
| 198 } | 274 } |
| 199 xmlhttp.send(testList); | 275 xmlhttp.send(testList); |
| 200 } | 276 } |
| 201 } | 277 } |
| 202 function checkalltests() | 278 function checkalltests() |
| 203 { | 279 { |
| 204 var value = document.getElementById("check_all").checked; | 280 var value = document.getElementById("check_all").checked; |
| 205 var table = document.getElementById("results-table"); | 281 var table = document.getElementById("results-table"); |
| 206 var length = table.rows.length; | 282 var length = table.rows.length; |
| 207 for (var i = 1; i < length; i++) { | 283 for (var i = 2; i < length; i++) { |
| 208 var checkbox = table.rows[i].cells[0].getElementsByTagName("input")[0]; | 284 var checkbox = table.rows[i].cells[0].getElementsByTagName("input")[0]; |
| 285 var disabled = checkbox.disabled; |
| 286 if(!disabled) |
| 209 checkbox.checked = value; | 287 checkbox.checked = value; |
| 210 } | 288 } |
| 211 | 289 |
| 212 } | 290 } |
| 213 | 291 |
| 292 function searchTable(filterExp) |
| 293 { |
| 294 var table = document.getElementById('results-table'); |
| 295 var testCount = table.rows.length; |
| 296 var tests_list = { |
| 297 tests : [] |
| 298 }; |
| 299 var searchCount = 0; |
| 300 for(var i = 2; i < testCount; i++) { |
| 301 var cellContent = table.rows[i].cells[1].innerHTML; |
| 302 var checkbox = table.rows[i].cells[0].getElementsByTagName("input")[0]; |
| 303 var index = cellContent.search(filterExp); |
| 304 if (index < 0) { |
| 305 table.rows[i].style.display = 'none'; |
| 306 checkbox.checked = false; |
| 307 checkbox.disabled = true; |
| 308 } |
| 309 else { |
| 310 table.rows[i].style.display = ''; |
| 311 checkbox.disabled = false; |
| 312 searchCount += 1; |
| 313 } |
| 314 } |
| 315 return searchCount; |
| 316 } |
| 317 function applyfilter() |
| 318 { |
| 319 var filterString = document.getElementById('applyfilter').value; |
| 320 var searchCount = document.getElementById('searchcount'); |
| 321 var filterExp = new RegExp(filterString, "i"); |
| 322 var count = searchTable(filterExp); |
| 323 if(filterString == '') { |
| 324 searchCount.innerHTML = ''; |
| 325 return; |
| 326 } |
| 327 var totalCount = document.getElementById('results-table').rows.length - 2; |
| 328 searchCount.innerHTML = count + '/' + totalCount; |
| 329 } |
| 330 |
| 331 function createTableHeader() |
| 332 { |
| 333 var count = globalState().results.result_links.length; |
| 334 var tableHeader= '<table id=results-table><thead><tr>' + |
| 335 '<th rowspan="2">' + |
| 336 '<input type="checkbox" name="checkall" id="check_all" onclick="chec
kalltests()"></input>' + |
| 337 '</th>' + |
| 338 '<th rowspan="2" text-align:left;>Tests</th>' + |
| 339 '<th colspan= '+ count +'>Latest → Oldest</th> </tr><tr>'; |
| 340 for( var i = 0; i < count; i++) |
| 341 tableHeader += '<th>'+ (i+1) +'</th>'; |
| 342 tableHeader += '</tr></thead></table>'; |
| 343 document.body.innerHTML += tableHeader; |
| 344 } |
| 345 |
| 214 function generatePage() | 346 function generatePage() |
| 215 { | 347 { |
| 216 var count = globalState().results.result_links.length; | 348 createTableHeader(); |
| 217 var tableHeader= '<div><table id=results-table><thead><tr>' + | |
| 218 '<th>' + '<input type="checkbox" name="checkall" id="check_all" onclick=
"checkalltests()"></input>' + ' Rerun' + '</th>' + | |
| 219 | |
| 220 '<th>Failing Tests ( Latest → Oldest )</th>'; | |
| 221 for( var i = 0; i < count; i++) | |
| 222 tableHeader += '<th>'+ (i+1) +'</th>'; | |
| 223 tableHeader += '</thead>'; | |
| 224 document.body.innerHTML += tableHeader; | |
| 225 document.body.innerHTML += '</table></div>'; | |
| 226 | |
| 227 forEachTest(processGlobalStateFor); | 349 forEachTest(processGlobalStateFor); |
| 228 } | 350 } |
| 351 |
| 229 </script> | 352 </script> |
| 230 <!-- To run the tests --> | 353 <!-- To run the tests --> |
| 231 <script src="resources/archived-results-dashboard-test.js"></script> | 354 <script src="resources/archived-results-dashboard-test.js"></script> |
| 232 <body onload="generatePage()"> | 355 <body onload="generatePage()"> |
| 233 <h1>Dashboard</h1> | 356 <h1>Dashboard</h1> |
| 234 <div id=log class="log"></div> | 357 <div id=log class="log"></div> |
| 235 <p><button onclick="rerun()">Re Run Tests</button></p> | 358 <div class="toolbox"> |
| 359 <button onclick=rerun() class="rerun-button">Re Run Tests</button> |
| 360 <input type="text" id=applyfilter oninput="applyfilter()" placeholder="S
earch via regular expression"></input> |
| 361 <span id=searchcount></span> |
| 362 </div> |
| 236 </body> | 363 </body> |
| 237 </html> | 364 </html> |
| OLD | NEW |