-
-
Notifications
You must be signed in to change notification settings - Fork 107
/
test-builder.js
71 lines (56 loc) · 2.61 KB
/
test-builder.js
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
// Generate a tests-generated for all available keyboards
// We do this because dynamically setting up test cases using Mocha + karma is
// fragile at best -- and does not report the total number of cases correctly.
const fs = require('fs');
const path = require('path');
const config = require('./node_src/config.js');
const util = require('./node_src/util.js');
const program = require('commander');
const KEYBOARDS_ROOT = path.join(config.KEYBOARDS_ROOT, config.KEYBOARDS_GROUP);
function list(val) {
return val.split(',');
}
program
.version('0.1')
.option('-c, --compiler-version [version]', 'Specify compiler version that is being tested, which is saved in the results file.')
.option('-e, --engine-version [version]', 'Specify KeymanWeb engine version that is being tested, which is saved in the results file.')
.option('-k, --keyboards [keyboards]', 'Test specific keyboard(s) in the repo, e.g. k/khmer_angkor. If -k is not specified, then test all keyboards in the keyboards repository.', list, []);
program.parse(process.argv);
config.compilerVersion = program.compilerVersion;
config.engineVersion = program.engineVersion;
let keyboards = util.getKeyboardFolders(KEYBOARDS_ROOT, true);
let code = `
let assert = chai.assert;
`;
keyboards.forEach(function(keyboard) {
if(program.keyboards.length == 0 || program.keyboards.indexOf(keyboard.shortname+'/'+keyboard.id) >= 0) {
code += `
describe('Test keyboard ${keyboard.id}', () => {
const shortname='${keyboard.shortname}';
const id='${keyboard.id}';
const locator = shortname+'/'+id;
it('should generate a set of results for "all" possible inputs', function() {
return windowLoad
.then(() => testRunner.loadTests(locator))
.then((shouldRun) => { if(shouldRun) { return testRunner.runTests(id); } })
.then(() => testRunner.saveTestResults(locator, (testRunner.keyboards[id] || {}).results));
}).timeout(0);
});
`;
}
});
fs.writeFileSync('./tests-generated.js', code);
//
// Run Karma with the generated tests
//
const Server = require('karma').Server;
const cfg = require('karma').config;
// Note: if karma.conf.js is invalid, then this will die with exit code 1
// without logging the error. The easiest way to see the error is to
// run `node_modules/bin/karma start karma.conf.js`
const karmaConfig = cfg.parseConfig(path.resolve('./karma.conf.js'), process.env.TEAMCITY_PROJECT_NAME ? {'reporters': ['teamcity']} : {});
let server = new Server(karmaConfig, function(exitCode) {
console.log('Karma has exited with ' + exitCode)
process.exit(exitCode)
});
server.start();