diff --git a/browser/render.js b/browser/render.js index 0161730..0e41c30 100644 --- a/browser/render.js +++ b/browser/render.js @@ -8,6 +8,8 @@ stream.writable = true; var ready = false; var buffered = []; domready(function () { + renderInitialHTML() + ready = true; buffered.forEach(function (msg) { stream.write(msg); @@ -15,19 +17,195 @@ domready(function () { buffered = []; }); +var reportUl + , passesEm + , passes = 0 + , failuresEm + , failures = 0 + , currentRootUl + stream.write = function (msg) { if (!ready) { buffered.push(msg); return; } - - var div = document.createElement('div'); - var txt = document.createTextNode(json.stringify(msg)); - div.appendChild(txt); - document.body.appendChild(div); + + if (typeof msg === "string") { + var suiteLi = document.createElement("li") + suiteLi.classList.add("suite") + var h1 = document.createElement("h1") + h1.textContent = msg + suiteLi.appendChild(h1) + var suiteUl = document.createElement("ul") + suiteLi.appendChild(suiteUl) + reportUl.appendChild(suiteLi) + currentRootUl = suiteUl + + return + } + + if (msg.ok === undefined) { + return + } + + var testLi = document.createElement("li") + testLi.classList.add("test") + var h2 = document.createElement("h2") + h2.textContent = msg.name + testLi.appendChild(h2) + + if (msg.ok) { + testLi.classList.add("pass") + passes++ + passesEm.textContent = passes + } else { + testLi.classList.add("fail") + var error = document.createElement("pre") + error.classList.add("error") + error.textContent = msg.stack && msg.stack.join("\n") + testLi.appendChild(error) + failures++ + failuresEm.textContent = failures + } + + currentRootUl.appendChild(testLi) }; stream.end = function (msg) { - if (msg !== undefined) stream.write(msg); + if (msg !== undefined) { + stream.write(msg); + } stream.writable = false; }; + +function renderInitialHTML() { + var body = document.body + + var rootDiv = document.createElement("div") + rootDiv.id = "root" + body.appendChild(rootDiv) + + var statsUl = fragment(statsTemplate) + rootDiv.appendChild(statsUl) + + reportUl = document.createElement("ul") + reportUl.id = "report" + rootDiv.appendChild(reportUl) + + currentRootUl = reportUl + + var items = statsUl.getElementsByTagName("li") + + passesEm = items[0].getElementsByTagName("em")[0] + failuresEm = items[1].getElementsByTagName("em")[0] + + var style = document.createElement("style") + style.type = "text/css" + style.textContent = pageCSS + document.body.appendChild(style) +} + +var statsTemplate = '