mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
More fleshing out of JS SQLTester.
FossilOrigin-Name: 8c503dfb9fa15389613a819fcc1792e23d3c05f99a9f450f82eac5125298726f
This commit is contained in:
@ -270,7 +270,6 @@ public class SQLTester {
|
||||
final long timeEnd = System.currentTimeMillis();
|
||||
outln("🏁",(threw ? "❌" : "✅")," ",nTest," test(s) in ",
|
||||
(timeEnd-timeStart),"ms.");
|
||||
//ts.getFilename());
|
||||
}
|
||||
}
|
||||
final long tEnd = System.currentTimeMillis();
|
||||
|
@ -203,8 +203,8 @@ class SQLTester {
|
||||
|
||||
//! Console output utility.
|
||||
#outer = new Outer().outputPrefix( ()=>'SQLTester: ' );
|
||||
//! List of input script files.
|
||||
#aFiles = [];
|
||||
//! List of input scripts.
|
||||
#aScripts = [];
|
||||
//! Test input buffer.
|
||||
#inputBuffer = [];
|
||||
//! Test result buffer.
|
||||
@ -259,7 +259,7 @@ class SQLTester {
|
||||
this.nullView = "nil";
|
||||
this.emitColNames = false;
|
||||
this.#db.iCurrentDb = 0;
|
||||
this.#db.initSql.push("SELECT 1;");
|
||||
//this.#db.initSql.push("SELECT 1;");
|
||||
}
|
||||
|
||||
appendInput(line, addNL){
|
||||
@ -402,6 +402,54 @@ class SQLTester {
|
||||
}
|
||||
}
|
||||
|
||||
addTestScript(ts){
|
||||
if( 2===arguments.length ){
|
||||
ts = new TestScript(arguments[0], arguments[1]);
|
||||
}else if(ts instanceof Uint8Array){
|
||||
ts = new TestScript('<unnamed>', ts);
|
||||
}else if('string' === typeof arguments[1]){
|
||||
ts = new TestScript('<unnamed>', Util.utf8Encode(arguments[1]));
|
||||
}
|
||||
if( !(ts instanceof TestScript) ){
|
||||
Util.toss(SQLTesterException, "Invalid argument type for addTestScript()");
|
||||
}
|
||||
this.#aScripts.push(ts);
|
||||
return this;
|
||||
}
|
||||
|
||||
runTests(){
|
||||
const tStart = (new Date()).getTime();
|
||||
for(const ts of this.#aScripts){
|
||||
this.reset();
|
||||
++this.metrics.nTestFile;
|
||||
let threw = false;
|
||||
const timeStart = (new Date()).getTime();
|
||||
try{
|
||||
ts.run(this);
|
||||
}catch(e){
|
||||
if(e instanceof SQLTesterException){
|
||||
threw = true;
|
||||
this.outln("🔥EXCEPTION: ",''+e);
|
||||
++this.metrics.nAbortedScript;
|
||||
if( this.#keepGoing ){
|
||||
this.outln("Continuing anyway becaure of the keep-going option.");
|
||||
}
|
||||
else if( e.isFatal() ) throw e;
|
||||
}else{
|
||||
throw e;
|
||||
}
|
||||
}finally{
|
||||
const timeEnd = (new Date()).getTime();
|
||||
this.outln("🏁", (threw ? "❌" : "✅"), " ", this.metrics.nTest,
|
||||
" test(s) in ", (timeEnd-timeStart),"ms.");
|
||||
}
|
||||
}
|
||||
const tEnd = (new Date()).getTime();
|
||||
this.outln("Total run-time: ",(tEnd-tStart),"ms");
|
||||
Util.unlink(this.#db.initialDbName);
|
||||
return this;
|
||||
}
|
||||
|
||||
#setupInitialDb(){
|
||||
if( !this.#db.list[0] ){
|
||||
Util.unlink(this.#db.initialDbName);
|
||||
@ -466,7 +514,7 @@ class SQLTester {
|
||||
const wasm = sqlite3.wasm, capi = sqlite3.capi;
|
||||
sql = (sql instanceof Uint8Array)
|
||||
? sql
|
||||
: new TextEncoder("utf-8").encode(capi.sqlite3_js_sql_to_string(sql));
|
||||
: Util.utf8Encode(capi.sqlite3_js_sql_to_string(sql));
|
||||
const self = this;
|
||||
const sb = (ResultBufferMode.NONE===appendMode) ? null : this.#resultBuffer;
|
||||
let rc = 0;
|
||||
@ -616,6 +664,15 @@ class TestScript {
|
||||
}else{
|
||||
content = args[0];
|
||||
}
|
||||
if(!(content instanceof Uint8Array)){
|
||||
if('string' === typeof content){
|
||||
content = Util.utf8Encode(content);
|
||||
}else if(content instanceof ArrayBuffer){
|
||||
content = new Uint8Array(content);
|
||||
}else{
|
||||
toss(Error, "Invalid content type for TestScript constructor.");
|
||||
}
|
||||
}
|
||||
this.#filename = filename;
|
||||
this.#cursor.src = content;
|
||||
}
|
||||
@ -971,28 +1028,24 @@ class TableResultCommand extends Command {
|
||||
this.argcCheck(ts,argv,0);
|
||||
t.incrementTestCounter();
|
||||
let body = ts.fetchCommandBody(t);
|
||||
log("TRC fetchCommandBody: ",body);
|
||||
if( null===body ) ts.toss("Missing ",argv[0]," body.");
|
||||
body = body.trim();
|
||||
if( !body.endsWith("\n--end") ){
|
||||
ts.toss(argv[0], " must be terminated with --end\\n");
|
||||
}else{
|
||||
body = body.substring(0, body.length-6);
|
||||
log("TRC fetchCommandBody reshaped:",body);
|
||||
}
|
||||
const globs = body.split(/\s*\n\s*/);
|
||||
if( globs.length < 1 ){
|
||||
ts.toss(argv[0], " requires 1 or more ",
|
||||
(this.#jsonMode ? "json snippets" : "globs"),".");
|
||||
}
|
||||
log("TRC fetchCommandBody globs:",globs);
|
||||
const sql = t.takeInputBuffer();
|
||||
t.execSql(null, true,
|
||||
this.#jsonMode ? ResultBufferMode.ASIS : ResultBufferMode.ESCAPED,
|
||||
ResultRowMode.NEWLINE, sql);
|
||||
const rbuf = t.getResultText().trim();
|
||||
const res = rbuf.split(/\r?\n/);
|
||||
log("TRC fetchCommandBody rbuf, res:",rbuf, res);
|
||||
if( res.length !== globs.length ){
|
||||
ts.toss(argv[0], " failure: input has ", res.length,
|
||||
" row(s) but expecting ",globs.length);
|
||||
|
@ -22,10 +22,10 @@ const affirm = function(expr, msg){
|
||||
console.log("Loaded",ns);
|
||||
|
||||
log("ns =",ns);
|
||||
out("Hi there. ").outln("SQLTester is ostensibly ready.");
|
||||
outln("SQLTester is ready.");
|
||||
|
||||
let ts = new ns.TestScript('/foo.test', ns.Util.utf8Encode(
|
||||
`
|
||||
let ts = new ns.TestScript('/foo.test',`
|
||||
--print Hello, world.
|
||||
--close all
|
||||
--oom
|
||||
--db 0
|
||||
@ -65,17 +65,22 @@ SELECT json_array(1,2,3)
|
||||
select 1 as 'a', 2 as 'b';
|
||||
--result 1 2
|
||||
--close
|
||||
`));
|
||||
--print Until next time
|
||||
`);
|
||||
|
||||
const sqt = new ns.SQLTester();
|
||||
try{
|
||||
log( 'sqt.getCurrentDb()', sqt.getCurrentDb() );
|
||||
affirm( !sqt.getCurrentDb(), 'sqt.getCurrentDb()' );
|
||||
sqt.openDb('/foo.db', true);
|
||||
log( 'sqt.getCurrentDb()', sqt.getCurrentDb() );
|
||||
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();
|
||||
}finally{
|
||||
sqt.reset();
|
||||
}
|
||||
|
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
||||
C JS\sSQLTestRunner\scan\snow\srun\sthe\sJava\simpl's\score-most\ssanity\stests,\smissing\sonly\ssupport\sfor\sdirectives.
|
||||
D 2023-08-29T20:01:01.586
|
||||
C More\sfleshing\sout\sof\sJS\sSQLTester.
|
||||
D 2023-08-29T20:44:40.606
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||
@ -283,7 +283,7 @@ F ext/jni/src/org/sqlite/jni/sqlite3.java 62b1b81935ccf3393472d17cb883dc5ff39c38
|
||||
F ext/jni/src/org/sqlite/jni/sqlite3_context.java 66ca95ce904044263a4aff684abe262d56f73e6b06bca6cf650761d79d7779ad
|
||||
F ext/jni/src/org/sqlite/jni/sqlite3_stmt.java 78e6d1b95ac600a9475e9db4623f69449322b0c93d1bd4e1616e76ed547ed9fc
|
||||
F ext/jni/src/org/sqlite/jni/sqlite3_value.java 3d1d4903e267bc0bc81d57d21f5e85978eff389a1a6ed46726dbe75f85e6914a
|
||||
F ext/jni/src/org/sqlite/jni/tester/SQLTester.java a9f4b9e12109645b21fef15807973706dd958aad9fe1c835693fcb8e95abe949
|
||||
F ext/jni/src/org/sqlite/jni/tester/SQLTester.java e5a1a4b55ed940e61558be1292aa66563219f360c7c1f9d40d770307e6da3c07
|
||||
F ext/jni/src/org/sqlite/jni/tester/test-script-interpreter.md f9f25126127045d051e918fe59004a1485311c50a13edbf18c79a6ff9160030e
|
||||
F ext/jni/src/tests/000-000-sanity.test cfe6dc1b950751d6096e3f5695becaadcdaa048bfe9567209d6eb676e693366d
|
||||
F ext/jni/src/tests/000-001-ignored.test e17e874c6ab3c437f1293d88093cf06286083b65bf162317f91bbfd92f961b70
|
||||
@ -548,8 +548,8 @@ F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34ce
|
||||
F ext/wasm/GNUmakefile 0e362f3fc04eab6628cbe4f1e35f4ab4a200881f6b5f753b27fb45eabeddd9d2
|
||||
F ext/wasm/README-dist.txt 6382cb9548076fca472fb3330bbdba3a55c1ea0b180ff9253f084f07ff383576
|
||||
F ext/wasm/README.md a8a2962c3aebdf8d2104a9102e336c5554e78fc6072746e5daf9c61514e7d193
|
||||
F ext/wasm/SQLTester/SQLTester.mjs 345736d970dc56e2c1041f8583fc602eedd8a64d455864f312db7d3208e640ea
|
||||
F ext/wasm/SQLTester/SQLTester.run.mjs 2dfa1407f5f188dadafe6f21f7a6740b4f07d59c594781a01eedadec16b2ddfe
|
||||
F ext/wasm/SQLTester/SQLTester.mjs ed6bc486d804829883d05a94cbc5ace1b468837fcaf687d87f17969a659100ae
|
||||
F ext/wasm/SQLTester/SQLTester.run.mjs e053a4e94b22a97f5981a0ce927b77c542d68a564d723dbaeb7b299d817bb915
|
||||
F ext/wasm/SQLTester/index.html 88d87e3ccbc33e7ab3773a8e48c1172e876951c4be31d1307c3700671262cddf
|
||||
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api d6a5078f48a5301ed17b9a30331075d9b2506e1360c1f0dee0c7816c10acd9ab
|
||||
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-see fb29e62082a658f0d81102488414d422c393c4b20cc2f685b216bc566237957b
|
||||
@ -2111,8 +2111,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P d21b1217964a53f33b7ba3958b34aa8560dff8ede33e66f54aa0afbab7099ec3
|
||||
R 7266768b4057594984eb0965145c2068
|
||||
P 5e798369375ce1b0c9cdf831f835d931fbd562ff7b4db09a06d1bdca2ac1b975
|
||||
R 3c7d31cab0e76e0f71d5ac9e71d46fd7
|
||||
U stephan
|
||||
Z 703bcb5450951150eb9347fe40faa521
|
||||
Z 3b4eebe6c916b635f59799d0c8f89ba5
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
@ -1 +1 @@
|
||||
5e798369375ce1b0c9cdf831f835d931fbd562ff7b4db09a06d1bdca2ac1b975
|
||||
8c503dfb9fa15389613a819fcc1792e23d3c05f99a9f450f82eac5125298726f
|
Reference in New Issue
Block a user