1 | var dataflows = require ('dataflo.ws');
|
2 | var paint = dataflows.color;
|
3 |
|
4 | var minimist = require ('commop/lib/minimist');
|
5 |
|
6 | module.exports = {
|
7 | launchContext: function () {
|
8 | return {
|
9 | token: process.argv[3],
|
10 | args: minimist(process.argv.slice(3))
|
11 | };
|
12 | },
|
13 | launch: function (conf) {
|
14 | var tokenIConf = conf.initiator['token'];
|
15 | var tokenIClass = dataflows.initiator('token');
|
16 |
|
17 | if ('function' == typeof tokenIClass) {
|
18 | var processor = new tokenIClass(tokenIConf);
|
19 | } else {
|
20 | console.error('Cannot load initiator "%s"', 'token');
|
21 | }
|
22 |
|
23 | var context = this.launchContext();
|
24 |
|
25 | var caseMatch = context.args._[0] || "^test\\W";
|
26 |
|
27 | var flows = processor.dataflows || processor.flows;
|
28 | var cases = [];
|
29 | for (var token in flows) {
|
30 | if (token.match (caseMatch))
|
31 | cases.push (token);
|
32 | }
|
33 | cases.sort();
|
34 |
|
35 | var casesToRun = cases.length;
|
36 | var casesResult = { ok: [], fail: [] };
|
37 |
|
38 | var onTestEnd = function(token) {
|
39 | if (--casesToRun)
|
40 | return;
|
41 |
|
42 | console.log('Completed: ' + casesResult.ok.length + ' of ' + cases.length );
|
43 | console.log(
|
44 | 'Failed: ' + casesResult.fail.length + ' of ' + cases.length
|
45 | + (casesResult.fail.length === 0 ? '': ': ')
|
46 | + casesResult.fail.map (function (c) {return paint.error (c)}).join (', ')
|
47 | );
|
48 |
|
49 |
|
50 | }
|
51 |
|
52 | cases.forEach(function(token) {
|
53 | var successKey = 'ok';
|
54 | var failKey = 'fail';
|
55 |
|
56 | console.log ('Running test case ' + paint.magenta (token) + '; expected ' + paint.green (successKey));
|
57 |
|
58 |
|
59 | var flow = processor.process(token, {
|
60 | templates: conf.templates.task,
|
61 | request: context.param,
|
62 | autoRun: false
|
63 | });
|
64 |
|
65 | var flowExpect = "ok";
|
66 | if (flow.expect) {
|
67 | flowExpect = flow.expect;
|
68 | }
|
69 |
|
70 | if (flowExpect == 'fail') {
|
71 | successKey = 'fail';
|
72 | failKey = 'ok';
|
73 | }
|
74 |
|
75 | flow.on('completed', function(flow) {
|
76 | console.log (paint.green ('Test case', token, 'ok'));
|
77 | casesResult[successKey].push (token);
|
78 | onTestEnd(token);
|
79 | });
|
80 |
|
81 | flow.on('failed', function(flow) {
|
82 | console.log (paint.red ('Test case', token, 'failed'));
|
83 | casesResult[failKey].push (token);
|
84 | onTestEnd(token);
|
85 | });
|
86 |
|
87 | flow.run();
|
88 | })
|
89 |
|
90 | }
|
91 | }
|