File index.js changed (mode: 100755) (index 0bf147e..c80ecb3) |
1 |
1 |
#!/usr/bin/env node |
#!/usr/bin/env node |
2 |
2 |
|
|
3 |
|
const fs = require('fs'), |
|
4 |
|
path = require('path'), |
|
5 |
|
tmp = require('tmp'), |
|
6 |
|
shell = require( 'shelljs' ), |
|
7 |
|
cursor = require('ansi')(process.stdout), |
|
8 |
|
argv = require('minimist')(process.argv.slice(2)), |
|
|
3 |
|
const fs = require("fs"), |
|
4 |
|
path = require("path"), |
|
5 |
|
tmp = require("tmp"), |
|
6 |
|
shell = require("shelljs"), |
|
7 |
|
cursor = require("ansi")(process.stdout), |
|
8 |
|
argv = require("minimist")(process.argv.slice(2)), |
9 |
9 |
defPath = argv.p ? argv.p : argv.project; |
defPath = argv.p ? argv.p : argv.project; |
10 |
10 |
|
|
|
11 |
|
let assertionsPassed = 0; |
|
12 |
|
if (argv.test || argv.t) { |
|
13 |
|
console.time("total"); |
|
14 |
|
process.on("exit", () => { |
|
15 |
|
console.log(`assertions passed: ${assertionsPassed}`); |
|
16 |
|
cursor.green(); |
|
17 |
|
console.timeEnd("total"); |
|
18 |
|
cursor.reset(); |
|
19 |
|
}); |
|
20 |
|
} |
|
21 |
|
|
|
22 |
|
processDef(defPath); |
11 |
23 |
|
|
12 |
|
readDef(defPath) |
|
13 |
|
.then(obj => { |
|
14 |
|
readDef(path.join(__dirname, 'asserter/def.json')) |
|
15 |
|
.then(obj2 => { |
|
16 |
|
let result = [obj, obj2].join(' '); |
|
17 |
|
if (argv.common || argv.c) { |
|
18 |
|
result += ' -pthread -DTARGET_TEST=1'; |
|
19 |
|
} |
|
20 |
|
if (argv.test || argv.t) { |
|
21 |
|
console.time('total'); |
|
22 |
|
process.on('exit', () => { |
|
23 |
|
cursor.green(); |
|
24 |
|
console.timeEnd('total'); |
|
25 |
|
cursor.reset(); |
|
26 |
|
}); |
|
27 |
|
let compiler = 'g++'; |
|
28 |
|
if (argv.clang || argv.llvm) { |
|
29 |
|
compiler = "clang++"; |
|
30 |
|
} else if (argv.emcc) { |
|
31 |
|
compiler = "emcc"; |
|
|
24 |
|
function processDef(defPath) { |
|
25 |
|
console.log("processing ", defPath); |
|
26 |
|
readDef(defPath).then((obj) => { |
|
27 |
|
readDef(path.join(__dirname, "asserter/def.json")).then((obj2) => { |
|
28 |
|
let result = [obj, obj2].join(" "); |
|
29 |
|
if (argv.common || argv.c) { |
|
30 |
|
result += " -pthread -DTARGET_TEST=1"; |
32 |
31 |
} |
} |
33 |
|
tmp.dir((err, tmpDir) => { |
|
34 |
|
if (err) throw err; |
|
35 |
|
const execFile = path.join(tmpDir, 'test'); |
|
36 |
|
console.log( 'test directory:', tmpDir ); |
|
37 |
|
result = `${compiler} ${result} -o ${execFile}`; |
|
38 |
|
if (argv.verbose || argv.v) { |
|
39 |
|
console.log(result); |
|
|
32 |
|
if (argv.test || argv.t) { |
|
33 |
|
let compiler = "g++"; |
|
34 |
|
if (argv.clang || argv.llvm) { |
|
35 |
|
compiler = "clang++"; |
|
36 |
|
} else if (argv.emcc) { |
|
37 |
|
compiler = "emcc"; |
40 |
38 |
} |
} |
41 |
|
shell.exec(result); |
|
42 |
|
shell.exec('./test', {cwd:tmpDir}); |
|
43 |
|
fs.readFile(path.join(tmpDir, 'result.json'), 'utf8', (err, result) => { |
|
44 |
|
if (err) throw err; |
|
45 |
|
const resultObj = JSON.parse(result); |
|
46 |
|
console.log(`assertions passed: ${resultObj.passed}`); |
|
47 |
|
}); |
|
48 |
|
}); |
|
49 |
|
} |
|
50 |
|
else { |
|
51 |
|
console.log( result ); |
|
52 |
|
} |
|
|
39 |
|
tmp.dir((err, tmpDir) => { |
|
40 |
|
if (err) throw err; |
|
41 |
|
const execFile = path.join(tmpDir, "test"); |
|
42 |
|
console.log("test directory:", tmpDir); |
|
43 |
|
result = `${compiler} ${result} -o ${execFile}`; |
|
44 |
|
if (argv.verbose || argv.v) { |
|
45 |
|
console.log(result); |
|
46 |
|
} |
|
47 |
|
shell.exec(result); |
|
48 |
|
shell.exec("./test", { cwd: tmpDir }); |
|
49 |
|
fs.readFile( |
|
50 |
|
path.join(tmpDir, "result.json"), |
|
51 |
|
"utf8", |
|
52 |
|
(err, result) => { |
|
53 |
|
if (!err) { |
|
54 |
|
const resultObj = JSON.parse(result); |
|
55 |
|
assertionsPassed += resultObj.passed; |
|
56 |
|
} |
|
57 |
|
} |
|
58 |
|
); |
|
59 |
|
}); |
|
60 |
|
} else { |
|
61 |
|
console.log(result); |
|
62 |
|
} |
|
63 |
|
}); |
53 |
64 |
}); |
}); |
54 |
|
}); |
|
55 |
|
|
|
56 |
|
function readDef(defFile) { |
|
|
65 |
|
} |
|
66 |
|
|
|
67 |
|
function readDef(defFile) { |
57 |
68 |
return new Promise((resolve, reject) => { |
return new Promise((resolve, reject) => { |
58 |
|
const base = path.dirname(defFile); |
|
59 |
|
fs.readFile(defFile, 'utf8', (err, def) => { |
|
|
69 |
|
const base = path.dirname(defFile); |
|
70 |
|
fs.readFile(defFile, "utf8", (err, def) => { |
60 |
71 |
if (err) throw err; |
if (err) throw err; |
61 |
|
const {includes, sources} = JSON.parse(def); |
|
|
72 |
|
const { includes, sources, tests } = JSON.parse(def); |
62 |
73 |
let result = `-isystem ${base} `; |
let result = `-isystem ${base} `; |
63 |
74 |
if (sources) { |
if (sources) { |
64 |
|
result += sources.filter( entry => { |
|
65 |
|
return path.extname(entry).match(/c|cpp/); |
|
66 |
|
}) |
|
67 |
|
.map( entry => { |
|
68 |
|
return path.join(base, entry); |
|
69 |
|
}).join(' '); |
|
|
75 |
|
result += sources |
|
76 |
|
.filter((entry) => { |
|
77 |
|
return path.extname(entry).match(/c|cpp/); |
|
78 |
|
}) |
|
79 |
|
.map((entry) => { |
|
80 |
|
return path.join(base, entry); |
|
81 |
|
}) |
|
82 |
|
.join(" "); |
70 |
83 |
} |
} |
71 |
84 |
if (includes) { |
if (includes) { |
72 |
|
const batch = includes.map( entry => { |
|
73 |
|
return readDef(path.join(base, entry)); |
|
|
85 |
|
const batch = includes.map((entry) => { |
|
86 |
|
return readDef(path.join(base, entry)); |
74 |
87 |
}); |
}); |
75 |
|
Promise.all(batch).then( results => { |
|
76 |
|
resolve(result + ' ' + results.join(' ')); |
|
77 |
|
}); |
|
78 |
|
} |
|
79 |
|
else { |
|
|
88 |
|
Promise.all(batch).then((results) => { |
|
89 |
|
resolve(result + " " + results.join(" ")); |
|
90 |
|
}); |
|
91 |
|
} else if (tests) { |
|
92 |
|
for (let test of tests) { |
|
93 |
|
processDef(path.join(base, test)); |
|
94 |
|
} |
|
95 |
|
} else { |
80 |
96 |
resolve(result); |
resolve(result); |
81 |
97 |
} |
} |
82 |
98 |
}); |
}); |