diff options
Diffstat (limited to 'ext/wasm/SQLTester/index.html')
-rw-r--r-- | ext/wasm/SQLTester/index.html | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/ext/wasm/SQLTester/index.html b/ext/wasm/SQLTester/index.html new file mode 100644 index 0000000..1dffad6 --- /dev/null +++ b/ext/wasm/SQLTester/index.html @@ -0,0 +1,127 @@ +<!doctype html> +<html lang="en-us"> + <head> + <meta charset="utf-8"> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon"> + <!--link rel="stylesheet" href="../common/emscripten.css"/--> + <link rel="stylesheet" href="../common/testing.css"/> + <title>SQLTester</title> + </head> + <style> + fieldset { + display: flex; + flex-direction: row; + padding-right: 1em; + } + fieldset > :not(.legend) { + display: flex; + flex-direction: row; + padding-right: 1em; + } + </style> + <body> + <h1>SQLTester for JS/WASM</h1> + <p>This app reads in a build-time-defined set of SQLTester test + scripts and runs them through the test suite. + </p> + <fieldset> + <legend>Options</legend> + <span class='input-wrapper'> + <input type='checkbox' id='cb-log-reverse' checked> + <label for='cb-log-reverse'>Reverse log order?</label> + </span> + <input type='button' id='btn-run-tests' value='Run tests'/> + </fieldset> + <div id='test-output'>Test output will go here.</div> + <!--script src='SQLTester.run.mjs' type='module'></script--> + <script> + (async function(){ + const W = new Worker('SQLTester.run.mjs',{ + type: 'module' + }); + const wPost = (type,payload)=>W.postMessage({type,payload}); + const mapToString = (v)=>{ + switch(typeof v){ + case 'string': return v; + case 'number': case 'boolean': + case 'undefined': case 'bigint': + return ''+v; + default: break; + } + if(null===v) return 'null'; + if(v instanceof Error){ + v = { + message: v.message, + stack: v.stack, + errorClass: v.name + }; + } + return JSON.stringify(v,undefined,2); + }; + const normalizeArgs = (args)=>args.map(mapToString); + const logTarget = document.querySelector('#test-output'); + const logClass = function(cssClass,...args){ + const ln = document.createElement('div'); + if(cssClass){ + for(const c of (Array.isArray(cssClass) ? cssClass : [cssClass])){ + ln.classList.add(c); + } + } + ln.append(document.createTextNode(normalizeArgs(args).join(' '))); + logTarget.append(ln); + }; + { + const cbReverse = document.querySelector('#cb-log-reverse'); + const cbReverseKey = 'SQLTester:cb-log-reverse'; + const cbReverseIt = ()=>{ + logTarget.classList[cbReverse.checked ? 'add' : 'remove']('reverse'); + }; + cbReverse.addEventListener('change', cbReverseIt, true); + cbReverseIt(); + } + + const btnRun = document.querySelector('#btn-run-tests'); + const runTests = ()=>{ + btnRun.setAttribute('disabled','disabled'); + wPost('run-tests'); + logTarget.innerText = 'Running tests...'; + } + btnRun.addEventListener('click', runTests); + const log2 = function f(...args){ + logClass('', ...args); + return f; + }; + const log = function f(...args){ + logClass('','index.html:',...args); + return f; + }; + + const timerId = setTimeout( ()=>{ + logClass('error',"The SQLTester module is taking an unusually ", + "long time to load. More information may be available", + "in the dev console."); + }, 3000 /* assuming localhost */ ); + + W.onmessage = function({data}){ + switch(data.type){ + case 'stdout': log2(data.payload.message); break; + case 'tests-end': + btnRun.removeAttribute('disabled'); + delete data.payload.nTest; + log("test results:",data.payload); + break; + case 'is-ready': + clearTimeout(timerId); + runTests(); break; + default: + log("unhandled onmessage",data); + break; + } + }; + //runTests() + /* Inexplicably, */ + })(); + </script> + </body> +</html> |