blob: 6af59c3c9e3fb091a0d57b7fc05b3489b3c275ba [file] [log] [blame]
import {DOM, REF} from "../Ref.js"
import {TestController, TEST_RESULT_TYPE} from "../Test.js"
function TestApp(testController) {
return (
`<div class="row content">
<div class="col-6">
${TestResultConsole(testController)}
</div>
<div class="col-6">
${TestRenderArea(testController)}
</div>
</div>`
);
}
function TestResult(testResult) {
let statusClass = "success";
let description = testResult.className ? "PASS" : "ALL PASS";
switch (testResult.type) {
case TEST_RESULT_TYPE.Failed:
statusClass = "failed";
description = "failed"
break;
case TEST_RESULT_TYPE.Error:
statusClass = "error";
description = "raise an error";
break;
}
return (
`<div class="text">
${testResult.className ? "" : "<hr>"}
<div class="text block">
<a href="?className=${testResult.className}">${testResult.className}</a>
</div>
<div class="text block">
<a href="?className=${testResult.className}&fnName=${testResult.fnName}">${testResult.fnName}</a>
</div>
<div class="text block ${statusClass}">
${description}
</div>
${testResult.exception ? `
<div class="text ${statusClass}">
<pre>${testResult.exception.message}\n${testResult.exception.stack}</pre>
</div>` : ""}
</div>`
);
}
function TestResultConsole(testController) {
const ref = REF.createRef({
onStateUpdate: (element, stateDiff) => {
if (stateDiff.addTestResult) {
DOM.append(element, TestResult(stateDiff.addTestResult));
if (!stateDiff.addTestResult.className) {
let final_res = "ALL PASS";
if (stateDiff.addTestResult.type !== TEST_RESULT_TYPE.Success)
final_res = "FAILED";
document.title = `${final_res}`;
}
}
}
});
testController.addResultHandler(testResult => ref.setState({addTestResult: testResult}));
return `<div ref="${ref}"></div>`;
}
function TestRenderArea(testController) {
const ref = REF.createRef({
onElementMount: (element) => {
testController.addSetupArgs([element]);
const url = new URL(window.location);
const searchParam = new URLSearchParams(url.search);
const className = searchParam.get("className");
if (className)
document.title = className;
const fnName = searchParam.get("fnName");
testController.run(className, fnName)
}
});
return `<div ref="${ref}"></div>`;
}
export {TestApp};