| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | import {default as ns} from './SQLTester.mjs'; |
| | import {default as allTests} from './test-list.mjs'; |
| |
|
| | globalThis.sqlite3 = ns.sqlite3; |
| | const log = function f(...args){ |
| | console.log('SQLTester.run:',...args); |
| | return f; |
| | }; |
| |
|
| | const out = function f(...args){ return f.outer.out(...args) }; |
| | out.outer = new ns.Outer(); |
| | out.outer.getOutputPrefix = ()=>'SQLTester.run: '; |
| | const outln = (...args)=>{ return out.outer.outln(...args) }; |
| |
|
| | const affirm = function(expr, msg){ |
| | if( !expr ){ |
| | throw new Error(arguments[1] |
| | ? ("Assertion failed: "+arguments[1]) |
| | : "Assertion failed"); |
| | } |
| | } |
| |
|
| | let ts = new ns.TestScript('SQLTester-sanity-check.test',` |
| | /* |
| | ** This is a comment. There are many like it but this one is mine. |
| | ** |
| | ** SCRIPT_MODULE_NAME: sanity-check-0 |
| | ** xMIXED_MODULE_NAME: mixed-module |
| | ** xMODULE_NAME: module-name |
| | ** xREQUIRED_PROPERTIES: small fast reliable |
| | ** xREQUIRED_PROPERTIES: RECURSIVE_TRIGGERS |
| | ** xREQUIRED_PROPERTIES: TEMPSTORE_FILE TEMPSTORE_MEM |
| | ** xREQUIRED_PROPERTIES: AUTOVACUUM INCRVACUUM |
| | ** |
| | */ |
| | /* --verbosity 3 */ |
| | /* ---must-fail */ |
| | /* # must fail */ |
| | /* --verbosity 0 */ |
| | --print Hello, world. |
| | --close all |
| | --oom |
| | --db 0 |
| | --new my.db |
| | --null zilch |
| | --testcase 1.0 |
| | SELECT 1, null; |
| | --result 1 zilch |
| | --glob *zil* |
| | --notglob *ZIL* |
| | SELECT 1, 2; |
| | intentional error; |
| | --run |
| | /* ---intentional-failure */ |
| | --testcase json-1 |
| | SELECT json_array(1,2,3) |
| | --json [1,2,3] |
| | --testcase tableresult-1 |
| | select 1, 'a' UNION |
| | select 2, 'b' UNION |
| | select 3, 'c' ORDER by 1 |
| | --tableresult |
| | # [a-z] |
| | 2 b |
| | 3 c |
| | --end |
| | --testcase json-block-1 |
| | select json_array(1,2,3); |
| | select json_object('a',1,'b',2); |
| | --json-block |
| | [1,2,3] |
| | {"a":1,"b":2} |
| | --end |
| | --testcase col-names-on |
| | --column-names 1 |
| | select 1 as 'a', 2 as 'b'; |
| | --result a 1 b 2 |
| | --testcase col-names-off |
| | --column-names 0 |
| | select 1 as 'a', 2 as 'b'; |
| | --result 1 2 |
| | --close |
| | --testcase the-end |
| | --print Until next time |
| | `); |
| |
|
| | const sqt = new ns.SQLTester() |
| | .setLogger(console.log.bind(console)) |
| | .verbosity(1) |
| | .addTestScript(ts); |
| | sqt.outer().outputPrefix(''); |
| |
|
| | const runTests = function(){ |
| | try{ |
| | if( 0 ){ |
| | affirm( !sqt.getCurrentDb(), 'sqt.getCurrentDb()' ); |
| | sqt.openDb('/foo.db', true); |
| | affirm( !!sqt.getCurrentDb(),'sqt.getCurrentDb()' ); |
| | affirm( 'zilch' !== sqt.nullValue() ); |
| | ts.run(sqt); |
| | affirm( 'zilch' === sqt.nullValue() ); |
| | sqt.addTestScript(ts); |
| | }else{ |
| | for(const t of allTests){ |
| | sqt.addTestScript( new ns.TestScript(t) ); |
| | } |
| | allTests.length = 0; |
| | } |
| | sqt.runTests(); |
| | }finally{ |
| | |
| | sqt.reset(); |
| | } |
| | }; |
| |
|
| | if( globalThis.WorkerGlobalScope ){ |
| | const wPost = (type,payload)=>globalThis.postMessage({type, payload}); |
| | globalThis.onmessage = function({data}){ |
| | switch(data.type){ |
| | case 'run-tests':{ |
| | try{ runTests(); } |
| | finally{ wPost('tests-end', sqt.metrics); } |
| | break; |
| | } |
| | default: |
| | log("unhandled onmessage: ",data); |
| | break; |
| | } |
| | }; |
| | sqt.setLogger((msg)=>{ |
| | wPost('stdout', {message: msg}); |
| | }); |
| | wPost('is-ready'); |
| | |
| | }else{ |
| | runTests(); |
| | } |
| |
|