aboutsummaryrefslogtreecommitdiff
path: root/ext/wasm/SQLTester/SQLTester.run.mjs
blob: e6730253b6256919afa50d55dbe179b4666fbcd2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*
** 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();
}