Skip to content

Commit 3138717

Browse files
committed
Added Mocha testrunner
1 parent 342ed21 commit 3138717

File tree

1 file changed

+173
-0
lines changed

1 file changed

+173
-0
lines changed

sqllogic/mocha.js

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
2+
3+
/*
4+
var assert = require("assert")
5+
describe('Array', function(){
6+
describe('#indexOf()', function(){
7+
it('should return -1 when the value is not present', function(){
8+
assert.equal(-1, [1,2,3].indexOf(5));
9+
assert.equal(-1, [1,2,3].indexOf(0));
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+
// Todo: verifying raw results
40+
// Todo: set threshold for hashing results
41+
// Todo: verifying hashed results
42+
43+
var fs = require('fs');
44+
//var alasql = require('../alasql.js');
45+
var alasql = require('alasql');
46+
var sqllogictestparser = require('./sqllogictestparserV2');
47+
48+
49+
50+
51+
// Config of what tests to run
52+
53+
var testfiles = walkFiles(
54+
'test', // Folder where to find test files
55+
56+
/\.test$/, // Regexp for files to include (all files ending with .test )
57+
58+
// Regexp for files to exclude - keep one and outcomment the rest
59+
// null // Exclude no files - As all tests contains a few million tests it can take some time. (622 files at this time)
60+
/00\/|\d{2,}\.test/ // Exclude a lot of files (fastest - 125 files at the time)
61+
// /\/10+\// // exclude biggest files (balance between time and depth) (410 files)
62+
);
63+
64+
65+
///////////////////
66+
67+
68+
69+
70+
console.log(new Date().toISOString())
71+
72+
console.log('Preparing to run the following '+testfiles.length+' test files.')
73+
74+
if(testfiles.length<622){ // Todo: fix hardcode
75+
console.log('(Just to let you know: it looks like you are running a subset of the tests. Check out the config section of this file to run all tests.)')
76+
}
77+
78+
79+
for (var i in testfiles) {
80+
81+
82+
83+
var name = testfiles[i].replace(/[^a-z0-1]/g,'_');
84+
describe(name, function(){
85+
runSQLtestFromFile(testfiles[i], name);
86+
})
87+
88+
//break;
89+
}
90+
91+
92+
93+
function runSQLtestFromFile(path, name){
94+
95+
var db = new alasql.Database(name);
96+
97+
console.log(name)
98+
99+
var fragments = sqllogictestparser(path);
100+
101+
102+
//console.log(fragments); //return;
103+
104+
for (var i = 0; i < fragments.length; i++) {
105+
var fragment =fragments[i];
106+
if('halt' === fragment.command){
107+
//break;
108+
continue;
109+
110+
} else if('setThreshold' === fragment.command){
111+
console.log('setThreshold not implemented');
112+
continue;
113+
114+
}else if('execute' !== fragment.command){
115+
console.log('Unknown command: ',fragments[i].command);
116+
continue;
117+
}
118+
119+
if(false === fragment.expectSuccess){
120+
console.log('Expected error not implemented')
121+
continue;
122+
}
123+
124+
var sql = fragment.sql.replace(/\r|\n/g,' ').replace(/[ ]{2,}/g,' ');
125+
describe(sql, function(){
126+
it('Compiles', function(){
127+
db.parse(sql);
128+
});
129+
130+
it.skip('Returns correct results', function(){
131+
result = db.exec(sql)
132+
assert.equal(result, fragment.result) // todo: fix
133+
});
134+
135+
})
136+
137+
}
138+
console.log(name,'done')
139+
140+
}
141+
142+
143+
144+
145+
146+
147+
148+
149+
150+
151+
152+
153+
function walkFiles(dir, reFilterYes, reFilterNo) {
154+
reFilterYes = reFilterYes || false;
155+
reFilterNo = reFilterNo || false;
156+
157+
var results = [];
158+
var list = fs.readdirSync(dir);
159+
list.forEach(function(file) {
160+
file = dir + '/' + file;
161+
if(reFilterNo && reFilterNo.test(file))
162+
return;
163+
var stat = fs.statSync(file);
164+
if (stat && stat.isDirectory()) {
165+
results = results.concat(walkFiles(file, reFilterYes, reFilterNo))
166+
} else {
167+
if(reFilterYes && !reFilterYes.test(file))
168+
return;
169+
results.push(file)
170+
}
171+
})
172+
return results
173+
}

0 commit comments

Comments
 (0)