| /* |
| ** 2023-08-29 |
| ** |
| ** The author disclaims copyright to this source code. In place of |
| ** a legal notice, here is a blessing: |
| ** |
| ** May you do good and not evil. |
| ** May you find forgiveness for yourself and forgive others. |
| ** May you share freely, never taking more than you give. |
| ** |
| ************************************************************************* |
| ** This file contains a test application for SQLTester.js. |
| */ |
| import {default as ns} from './SQLTester.mjs'; |
| import {default as tests} 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"); |
| } |
| } |
| |
| log("SQLTester is ready."); |
| |
| let ts = new ns.TestScript('/foo.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_MEM TEMPSTORE_FILE |
| ** |
| */ |
| /* --verbosity 3 */ |
| /* ---must-fail */ |
| /* # must fail */ |
| /* --verbosity 0 */ |
| --print Hello, world. |
| --close all |
| --oom |
| --db 0 |
| --new my.db |
| --null zilchy |
| --testcase 1.0 |
| SELECT 1, null; |
| --result 1 zilchy |
| --glob *zil* |
| --notglob *ZIL* |
| SELECT 1, 2; |
| intentional error; |
| --run |
| --testcase json-1 |
| SELECT json_array(1,2,3) |
| --json [1,2,3] |
| --testcase tableresult-1 |
| select 1, 'a'; |
| select 2, 'b'; |
| --tableresult |
| # [a-z] |
| 2 b |
| --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 |
| --print Until next time |
| `); |
| |
| const sqt = new ns.SQLTester(); |
| try{ |
| if( 0 ){ |
| affirm( !sqt.getCurrentDb(), 'sqt.getCurrentDb()' ); |
| sqt.openDb('/foo.db', true); |
| affirm( !!sqt.getCurrentDb(),'sqt.getCurrentDb()' ); |
| sqt.verbosity(0); |
| if(false){ |
| affirm( 'zilch' !== sqt.nullValue() ); |
| ts.run(sqt); |
| affirm( 'zilch' === sqt.nullValue() ); |
| } |
| sqt.addTestScript(ts); |
| sqt.runTests(); |
| }else{ |
| for(const t of tests){ |
| sqt.addTestScript( new ns.TestScript(t) ); |
| } |
| tests.length = 0; |
| sqt.verbosity(0); |
| sqt.runTests(); |
| } |
| }finally{ |
| log( "Metrics:", sqt.metrics ); |
| sqt.reset(); |
| } |