react 0.2.6 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/.npmignore +2 -1
  2. package/README.md +94 -149
  3. package/doc/advanced.md +161 -0
  4. package/doc/color-def.graffle +938 -0
  5. package/doc/color-def.png +0 -0
  6. package/doc/default-simple.dot +19 -0
  7. package/doc/default-simple.dot.png +0 -0
  8. package/examples/default-events1.js +33 -6
  9. package/examples/{fstr1.js → default-log-events.js} +20 -13
  10. package/examples/default-simple.js +45 -0
  11. package/lib/base-task.js +8 -6
  12. package/lib/cb-task.js +14 -1
  13. package/lib/core.js +43 -12
  14. package/lib/dsl.js +14 -6
  15. package/lib/event-collector.js +65 -0
  16. package/lib/event-manager.js +29 -16
  17. package/lib/finalcb-first-task.js +16 -10
  18. package/lib/finalcb-task.js +17 -10
  19. package/lib/input-parser.js +7 -3
  20. package/lib/log-events.js +86 -0
  21. package/lib/parse.js +6 -3
  22. package/lib/promise-resolve.js +35 -0
  23. package/lib/promise-task.js +89 -0
  24. package/lib/ret-task.js +1 -1
  25. package/lib/task.js +32 -23
  26. package/lib/track-tasks.js +60 -0
  27. package/lib/validate.js +3 -3
  28. package/lib/vcon.js +6 -3
  29. package/lib/when-task.js +81 -0
  30. package/package.json +5 -3
  31. package/react.js +33 -5
  32. package/test/core-deferred.test.js +134 -0
  33. package/test/core-promised.test.js +132 -0
  34. package/test/core-when.test.js +84 -0
  35. package/test/core.test.js +108 -60
  36. package/test/dsl.test.js +58 -6
  37. package/test/exec-options.test.js +2 -1
  38. package/test/finalcb-task.test.js +6 -5
  39. package/test/input-parser.test.js +10 -6
  40. package/test/module-use.test.js +16 -199
  41. package/test/promise-auto-resolve.test.js +52 -0
  42. package/test/validate.test.js +4 -2
  43. package/test/vcon.test.js +13 -0
  44. package/Jakefile.js +0 -8
  45. package/examples/chain-events1.js +0 -34
  46. package/examples/chain1.js +0 -19
  47. package/examples/fstr-events1.js +0 -51
  48. package/examples/pcode1.js +0 -22
  49. package/jake-tasks/jake-test.js +0 -64
  50. package/lib/chain.js +0 -148
  51. package/lib/fstr.js +0 -119
  52. package/lib/pcode.js +0 -173
  53. package/oldExamples/analyze.js +0 -29
  54. package/oldExamples/analyze2.js +0 -29
  55. package/oldExamples/example10-dsl.js +0 -63
  56. package/oldExamples/example11.js +0 -62
  57. package/oldExamples/example12.js +0 -63
  58. package/oldExamples/example13.js +0 -63
  59. package/oldExamples/example14.js +0 -63
  60. package/oldExamples/example15.js +0 -75
  61. package/oldExamples/example6-ast.js +0 -47
  62. package/oldExamples/example6-dsl.js +0 -49
  63. package/oldExamples/example8-ast.js +0 -55
  64. package/oldExamples/example8-dsl.js +0 -53
  65. package/oldExamples/example9-ast.js +0 -58
  66. package/oldExamples/example9-dsl.js +0 -57
  67. package/oldExamples/function-str-ex1.js +0 -33
  68. package/oldExamples/function-str-ex2.js +0 -67
  69. package/oldExamples/trait1.js +0 -41
  70. package/oldExamples/trait2.js +0 -44
  71. package/test/chain.test.js +0 -253
  72. package/test/fstr.test.js +0 -300
  73. package/test/pcode.test.js +0 -335
package/test/fstr.test.js DELETED
@@ -1,300 +0,0 @@
1
- 'use strict';
2
-
3
- var test = require('tap').test;
4
- var sprintf = require('sprintf').sprintf;
5
-
6
- var fstrDefine = require('../lib/fstr.js');
7
-
8
- function falpha() { }
9
- function fbeta() { }
10
-
11
- test('module exports an object', function (t) {
12
- t.type(fstrDefine, 'function', 'has define by DSL method');
13
- t.end();
14
- });
15
-
16
- test('no arguments -> empty inParams, tasks, outTask', function (t) {
17
- var r = fstrDefine();
18
- t.deepEqual(r.ast.inParams, []);
19
- t.deepEqual(r.ast.tasks, []);
20
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
21
- t.end();
22
- });
23
-
24
- test('empty first string -> empty inParams, tasks, outTask', function (t) {
25
- var r = fstrDefine('');
26
- t.deepEqual(r.ast.inParams, []);
27
- t.deepEqual(r.ast.tasks, []);
28
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
29
- t.end();
30
- });
31
-
32
-
33
- test('single first string -> inParams["foo"], empty tasks, outTask', function (t) {
34
- var r = fstrDefine('foo');
35
- t.deepEqual(r.ast.inParams, ['foo']);
36
- t.deepEqual(r.ast.tasks, []);
37
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
38
- t.end();
39
- });
40
-
41
- test('triple first string -> inParams["foo", "bar", "baz"], empty tasks, outTask',
42
- function (t) {
43
- var r = fstrDefine(' foo, bar,baz ');
44
- t.deepEqual(r.ast.inParams, ['foo', 'bar', 'baz']);
45
- t.deepEqual(r.ast.tasks, []);
46
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
47
- t.end();
48
- });
49
-
50
- test('single task, single out params', function (t) {
51
- var r = fstrDefine('a, b', [
52
- falpha, 'a, b -> err, c'
53
- ], 'c');
54
- t.deepEqual(r.ast.inParams, ['a', 'b']);
55
- t.deepEqual(r.ast.tasks, [
56
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
57
- ]);
58
- t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
59
- t.end();
60
- });
61
-
62
- test('single task, err params', function (t) {
63
- var r = fstrDefine('a, b', [
64
- falpha, 'a, b -> err, c'
65
- ], 'err');
66
- t.deepEqual(r.ast.inParams, ['a', 'b']);
67
- t.deepEqual(r.ast.tasks, [
68
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
69
- ]);
70
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
71
- t.end();
72
- });
73
-
74
- test('single task, err and out params', function (t) {
75
- var r = fstrDefine('a, b', [
76
- falpha, 'a, b -> err, c'
77
- ], 'err, c');
78
- t.deepEqual(r.ast.inParams, ['a', 'b']);
79
- t.deepEqual(r.ast.tasks, [
80
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
81
- ]);
82
- t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
83
- t.end();
84
- });
85
-
86
- test('single task, ERR and out params', function (t) {
87
- var r = fstrDefine('a, b', [
88
- falpha, 'a, b -> ERR, c'
89
- ], 'ERR, c');
90
- t.deepEqual(r.ast.inParams, ['a', 'b']);
91
- t.deepEqual(r.ast.tasks, [
92
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
93
- ]);
94
- t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
95
- t.end();
96
- });
97
-
98
- test('cb used in defs is simply ignored', function (t) {
99
- var r = fstrDefine('a, b, cb', [
100
- falpha, 'a, b, cb -> err, c'
101
- ], 'err, c');
102
- t.deepEqual(r.ast.inParams, ['a', 'b']);
103
- t.deepEqual(r.ast.tasks, [
104
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
105
- ]);
106
- t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
107
- t.end();
108
- });
109
-
110
- test('callback used in defs is simply ignored', function (t) {
111
- var r = fstrDefine('a, b, callback', [
112
- falpha, 'a, b, callback -> err, c'
113
- ], 'err, c');
114
- t.deepEqual(r.ast.inParams, ['a', 'b']);
115
- t.deepEqual(r.ast.tasks, [
116
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
117
- ]);
118
- t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
119
- t.end();
120
- });
121
-
122
- test('two inputs, two tasks, two out params', function (t) {
123
- var r = fstrDefine('a, b', [
124
- falpha, 'a, b -> err, c',
125
- fbeta, 'a, b -> err, d, e'
126
- ], 'c, d');
127
- t.deepEqual(r.ast.inParams, ['a', 'b']);
128
- t.deepEqual(r.ast.tasks, [
129
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
130
- { f: fbeta, a: ['a', 'b'], out: ['d', 'e'], type: 'cb', name: 'fbeta'}
131
- ]);
132
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
133
- t.end();
134
- });
135
-
136
- test('two inputs, two tasks, two out params, options', function (t) {
137
- var r = fstrDefine('a, b', [
138
- falpha, 'a, b -> err, c',
139
- fbeta, 'a, b -> err, d, e'
140
- ], 'c, d', { name: 'myflow', otherOptFoo: 'foo'});
141
- t.deepEqual(r.ast.inParams, ['a', 'b']);
142
- t.deepEqual(r.ast.tasks, [
143
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
144
- { f: fbeta, a: ['a', 'b'], out: ['d', 'e'], type: 'cb', name: 'fbeta'}
145
- ]);
146
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
147
- t.equal(r.ast.name, 'myflow', 'name should match if supplied');
148
- t.equal(r.ast.otherOptFoo, 'foo', 'other options should pass through');
149
- t.end();
150
- });
151
-
152
- test('two inputs, two mixed tasks, two out params', function (t) {
153
- var r = fstrDefine('a, b', [
154
- falpha, 'a, b -> err, c',
155
- fbeta, 'a, b -> returns d'
156
- ], 'c, d');
157
- t.deepEqual(r.ast.inParams, ['a', 'b']);
158
- t.deepEqual(r.ast.tasks, [
159
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
160
- { f: fbeta, a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
161
- ]);
162
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
163
- t.end();
164
- });
165
-
166
- test('uses return', function (t) {
167
- var r = fstrDefine('a, b', [
168
- falpha, 'a, b -> err, c',
169
- fbeta, 'a, b -> return d'
170
- ], 'c, d');
171
- t.deepEqual(r.ast.inParams, ['a', 'b']);
172
- t.deepEqual(r.ast.tasks, [
173
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
174
- { f: fbeta, a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
175
- ]);
176
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
177
- t.end();
178
- });
179
-
180
- test('uses Return', function (t) {
181
- var r = fstrDefine('a, b', [
182
- falpha, 'a, b -> err, c',
183
- fbeta, 'a, b -> Return d'
184
- ], 'c, d');
185
- t.deepEqual(r.ast.inParams, ['a', 'b']);
186
- t.deepEqual(r.ast.tasks, [
187
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
188
- { f: fbeta, a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
189
- ]);
190
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
191
- t.end();
192
- });
193
-
194
- test('uses RETURN', function (t) {
195
- var r = fstrDefine('a, b', [
196
- falpha, 'a, b -> err, c',
197
- fbeta, 'a, b -> RETURN d'
198
- ], 'c, d');
199
- t.deepEqual(r.ast.inParams, ['a', 'b']);
200
- t.deepEqual(r.ast.tasks, [
201
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
202
- { f: fbeta, a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
203
- ]);
204
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
205
- t.end();
206
- });
207
-
208
- test('uses RETURNS', function (t) {
209
- var r = fstrDefine('a, b', [
210
- falpha, 'a, b -> err, c',
211
- fbeta, 'a, b -> RETURNS d'
212
- ], 'c, d');
213
- t.deepEqual(r.ast.inParams, ['a', 'b']);
214
- t.deepEqual(r.ast.tasks, [
215
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
216
- { f: fbeta, a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
217
- ]);
218
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
219
- t.end();
220
- });
221
-
222
- test('two inputs, two mixed tasks, two out params, opts', function (t) {
223
- var r = fstrDefine('a, b', [
224
- falpha, 'a -> err, c', { after: fbeta },
225
- fbeta, 'a, b -> returns d'
226
- ], 'c, d');
227
- t.deepEqual(r.ast.inParams, ['a', 'b']);
228
- t.deepEqual(r.ast.tasks, [
229
- { after: ['fbeta'], f: falpha, a: ['a'], out: ['c'], type: 'cb', name: 'falpha'},
230
- { f: fbeta, a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
231
- ]);
232
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
233
- t.end();
234
- });
235
-
236
-
237
- // Object use
238
- test('object prop task params', function (t) {
239
- var r = fstrDefine('a, b', [
240
- falpha, 'a, b.cat -> err, c',
241
- fbeta, 'c.dog, b -> returns d',
242
- 'd.egg', 'c -> e'
243
- ], 'c, e');
244
- t.deepEqual(r.ast.inParams, ['a', 'b']);
245
- t.deepEqual(r.ast.tasks, [
246
- { f: falpha, a: ['a', 'b.cat'], out: ['c'], type: 'cb', name: 'falpha'},
247
- { f: fbeta, a: ['c.dog', 'b'], out: ['d'], type: 'ret', name: 'fbeta'},
248
- { f: 'd.egg', a: ['c'], out: ['e'], type: 'cb', name: 'd.egg'}
249
- ]);
250
- t.deepEqual(r.ast.outTask, { a: ['c', 'e'], type: 'finalcb' });
251
- t.end();
252
- });
253
-
254
-
255
-
256
-
257
-
258
- test('extra arg throws error', function (t) {
259
- var fn = function () {
260
- var r = fstrDefine('a, b', [
261
- falpha, 'a -> err, c', { after: fbeta },
262
- fbeta, 'a, b -> returns d',
263
- 'extraBadArg'
264
- ], 'c, d');
265
- };
266
- t.throws(fn, new Error('extra unmatched task arg: extraBadArg'));
267
- t.end();
268
- });
269
-
270
- test('not enough args throws error', function (t) {
271
- var fn = function () {
272
- var r = fstrDefine('a, b', [
273
- falpha, 'a -> err, c', { after: fbeta },
274
- fbeta
275
- ], 'c, d');
276
- };
277
- t.throws(fn, new Error(sprintf('extra unmatched task arg: %s', fbeta)));
278
- t.end();
279
- });
280
-
281
-
282
-
283
- /* selectFirst */
284
-
285
- test('selectFirst', function (t) {
286
- var r = fstrDefine.selectFirst('a, b', [
287
- falpha, 'a, b -> err, c',
288
- fbeta, 'a, b -> returns c'
289
- ], 'c', { name: 'myflow', otherOptFoo: 'foo'});
290
- t.deepEqual(r.ast.inParams, ['a', 'b']);
291
- t.deepEqual(r.ast.tasks, [
292
- { f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
293
- { f: fbeta, a: ['a', 'b'], out: ['c'], type: 'ret', name: 'fbeta', after: ['falpha']}
294
- ]);
295
- t.deepEqual(r.ast.outTask, { type: 'finalcbFirst', a: ['c'] });
296
- t.equal(r.ast.name, 'myflow', 'name should match if supplied');
297
- t.equal(r.ast.otherOptFoo, 'foo', 'other options should pass through');
298
- t.end();
299
- });
300
-
@@ -1,335 +0,0 @@
1
- 'use strict';
2
-
3
- var test = require('tap').test;
4
- var sprintf = require('sprintf').sprintf;
5
-
6
- var pcode = require('../lib/pcode.js');
7
-
8
- function falpha() { }
9
- function fbeta() { }
10
- function fcharlie() { }
11
-
12
- test('module exports an object', function (t) {
13
- t.type(pcode, 'function', 'has define by DSL method');
14
- t.end();
15
- });
16
-
17
- test('no arguments -> empty inParams, tasks, outTask', function (t) {
18
- var r = pcode();
19
- t.deepEqual(r.ast.inParams, []);
20
- t.deepEqual(r.ast.tasks, []);
21
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
22
- t.end();
23
- });
24
-
25
- test('empty first string -> empty inParams, tasks, outTask', function (t) {
26
- var r = pcode('');
27
- t.deepEqual(r.ast.inParams, []);
28
- t.deepEqual(r.ast.tasks, []);
29
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
30
- t.end();
31
- });
32
-
33
-
34
- test('single first string -> inParams["foo"], empty tasks, outTask', function (t) {
35
- var r = pcode('foo');
36
- t.deepEqual(r.ast.inParams, ['foo']);
37
- t.deepEqual(r.ast.tasks, []);
38
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
39
- t.end();
40
- });
41
-
42
- test('triple first string -> inParams["foo", "bar", "baz"], empty tasks, outTask',
43
- function (t) {
44
- var r = pcode(' foo, bar,baz ');
45
- t.deepEqual(r.ast.inParams, ['foo', 'bar', 'baz']);
46
- t.deepEqual(r.ast.tasks, []);
47
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
48
- t.end();
49
- });
50
-
51
- test('single task, single out params', function (t) {
52
- var locals = { falpha: falpha };
53
- var r = pcode('a, b', [
54
- 'c := falpha(a, b)',
55
- 'cb(err, c)'
56
- ], locals);
57
- t.deepEqual(r.ast.inParams, ['a', 'b']);
58
- t.deepEqual(r.ast.tasks, [
59
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
60
- ]);
61
- t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
62
- t.end();
63
- });
64
-
65
- test('single task, single out params, cb(err)', function (t) {
66
- var locals = { falpha: falpha };
67
- var r = pcode('a, b', [
68
- 'c := falpha(a, b)',
69
- 'cb(err)'
70
- ], locals);
71
- t.deepEqual(r.ast.inParams, ['a', 'b']);
72
- t.deepEqual(r.ast.tasks, [
73
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
74
- ]);
75
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
76
- t.end();
77
- });
78
-
79
- test('single task, err and out params', function (t) {
80
- var locals = { falpha: falpha };
81
- var r = pcode('a, b', [
82
- 'c := falpha(a, b)',
83
- 'cb(err, c)'
84
- ], locals);
85
- t.deepEqual(r.ast.inParams, ['a', 'b']);
86
- t.deepEqual(r.ast.tasks, [
87
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
88
- ]);
89
- t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
90
- t.end();
91
- });
92
-
93
- test('two inputs, two tasks, two out params', function (t) {
94
- var locals = { falpha: falpha, fbeta: fbeta };
95
- var r = pcode('a, b', [
96
- 'c := falpha(a, b)',
97
- 'd, e := fbeta(a, b)',
98
- 'cb(err, c, d)'
99
- ], locals);
100
- t.deepEqual(r.ast.inParams, ['a', 'b']);
101
- t.deepEqual(r.ast.tasks, [
102
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
103
- { f: 'fbeta', a: ['a', 'b'], out: ['d', 'e'], type: 'cb', name: 'fbeta'}
104
- ]);
105
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
106
- t.end();
107
- });
108
-
109
- test('two inputs, two tasks, two out params, options', function (t) {
110
- var locals = { falpha: falpha, fbeta: fbeta };
111
- var r = pcode('a, b', [
112
- 'c := falpha(a, b)',
113
- 'd, e := fbeta(a, b)',
114
- 'cb(err, c, d)'
115
- ], locals, { name: 'myflow', otherOptFoo: 'foo'});
116
- t.deepEqual(r.ast.inParams, ['a', 'b']);
117
- t.deepEqual(r.ast.tasks, [
118
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
119
- { f: 'fbeta', a: ['a', 'b'], out: ['d', 'e'], type: 'cb', name: 'fbeta'}
120
- ]);
121
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
122
- t.equal(r.ast.name, 'myflow', 'name should match if supplied');
123
- t.equal(r.ast.otherOptFoo, 'foo', 'other options should pass through');
124
- t.end();
125
- });
126
-
127
-
128
-
129
- test('two inputs, two mixed tasks, two out params', function (t) {
130
- var locals = { falpha: falpha, fbeta: fbeta };
131
- var r = pcode('a, b', [
132
- 'c := falpha(a, b)',
133
- 'd = fbeta(a, b)',
134
- 'cb(err, c, d)'
135
- ], locals);
136
- t.deepEqual(r.ast.inParams, ['a', 'b']);
137
- t.deepEqual(r.ast.tasks, [
138
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
139
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
140
- ]);
141
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
142
- t.end();
143
- });
144
-
145
- test('allow cb in the definitions', function (t) {
146
- var locals = { falpha: falpha, fbeta: fbeta };
147
- var r = pcode('a, b, cb', [
148
- 'c := falpha(a, b, cb)',
149
- 'd = fbeta(a, b)',
150
- 'cb(err, c, d)'
151
- ], locals);
152
- t.deepEqual(r.ast.inParams, ['a', 'b']);
153
- t.deepEqual(r.ast.tasks, [
154
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
155
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
156
- ]);
157
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
158
- t.end();
159
- });
160
-
161
- test('allow Cb in the definitions', function (t) {
162
- var locals = { falpha: falpha, fbeta: fbeta };
163
- var r = pcode('a, b, Cb', [
164
- 'c := falpha(a, b, Cb)',
165
- 'd = fbeta(a, b)',
166
- 'cb(err, c, d)'
167
- ], locals);
168
- t.deepEqual(r.ast.inParams, ['a', 'b']);
169
- t.deepEqual(r.ast.tasks, [
170
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
171
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
172
- ]);
173
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
174
- t.end();
175
- });
176
-
177
- test('allow callback in the definitions', function (t) {
178
- var locals = { falpha: falpha, fbeta: fbeta };
179
- var r = pcode('a, b, callback', [
180
- 'c := falpha(a, b, callback)',
181
- 'd = fbeta(a, b)',
182
- 'callback(err, c, d)'
183
- ], locals);
184
- t.deepEqual(r.ast.inParams, ['a', 'b']);
185
- t.deepEqual(r.ast.tasks, [
186
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
187
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
188
- ]);
189
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
190
- t.end();
191
- });
192
-
193
- test('allow Callback in the definitions', function (t) {
194
- var locals = { falpha: falpha, fbeta: fbeta };
195
- var r = pcode('a, b, Callback', [
196
- 'c := falpha(a, b, Callback)',
197
- 'd = fbeta(a, b)',
198
- 'Callback(err, c, d)'
199
- ], locals);
200
- t.deepEqual(r.ast.inParams, ['a', 'b']);
201
- t.deepEqual(r.ast.tasks, [
202
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
203
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
204
- ]);
205
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
206
- t.end();
207
- });
208
-
209
-
210
-
211
-
212
-
213
- test('var prefix two inputs, two mixed tasks, two out params', function (t) {
214
- var locals = { falpha: falpha, fbeta: fbeta };
215
- var r = pcode('a, b', [
216
- 'var c := falpha(a, b);',
217
- 'var d = fbeta(a, b);',
218
- 'cb(err, c, d);'
219
- ], locals);
220
- t.deepEqual(r.ast.inParams, ['a', 'b']);
221
- t.deepEqual(r.ast.tasks, [
222
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
223
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
224
- ]);
225
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
226
- t.end();
227
- });
228
-
229
- test('when single ret fn:done', function (t) {
230
- var locals = { falpha: falpha, fbeta: fbeta };
231
- var r = pcode('a, b', [
232
- 'c := falpha(a, b)',
233
- 'd = fbeta(a, b) when falpha:done',
234
- 'cb(err, c, d);'
235
- ], locals);
236
- t.deepEqual(r.ast.inParams, ['a', 'b']);
237
- t.deepEqual(r.ast.tasks, [
238
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
239
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', after: ['falpha'], name: 'fbeta'}
240
- ]);
241
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
242
- t.end();
243
- });
244
-
245
- test('when single cb fn:done', function (t) {
246
- var locals = { falpha: falpha, fbeta: fbeta };
247
- var r = pcode('a, b', [
248
- 'c := falpha(a, b) when fbeta:done',
249
- 'd = fbeta(a, b)',
250
- 'cb(err, c, d);'
251
- ], locals);
252
- t.deepEqual(r.ast.inParams, ['a', 'b']);
253
- t.deepEqual(r.ast.tasks, [
254
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', after: ['fbeta'], name: 'falpha'},
255
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
256
- ]);
257
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
258
- t.end();
259
- });
260
-
261
- test('when multiple fn:done cb', function (t) {
262
- var locals = { falpha: falpha, fbeta: fbeta, fcharlie: fcharlie };
263
- var r = pcode('a, b', [
264
- 'd = fbeta(a, b)',
265
- 'e = fcharlie(a, b)',
266
- 'c := falpha(a, b) when fbeta:done and fcharlie:done',
267
- 'cb(err, c, d);'
268
- ], locals);
269
- t.deepEqual(r.ast.inParams, ['a', 'b']);
270
- t.deepEqual(r.ast.tasks, [
271
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'},
272
- { f: 'fcharlie', a: ['a', 'b'], out: ['e'], type: 'ret', name: 'fcharlie'},
273
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', after: ['fbeta', 'fcharlie'], name: 'falpha'}
274
- ]);
275
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
276
- t.end();
277
- });
278
-
279
- test('when multiple fn:done ret', function (t) {
280
- var locals = { falpha: falpha, fbeta: fbeta, fcharlie: fcharlie };
281
- var r = pcode('a, b', [
282
- 'd = fbeta(a, b)',
283
- 'e = fcharlie(a, b)',
284
- 'c = falpha(a, b) when fbeta:done and fcharlie:done',
285
- 'cb(err, c, d);'
286
- ], locals);
287
- t.deepEqual(r.ast.inParams, ['a', 'b']);
288
- t.deepEqual(r.ast.tasks, [
289
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'},
290
- { f: 'fcharlie', a: ['a', 'b'], out: ['e'], type: 'ret', name: 'fcharlie'},
291
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'ret', after: ['fbeta', 'fcharlie'], name: 'falpha'}
292
- ]);
293
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
294
- t.end();
295
- });
296
-
297
- test('when mixed multiple fn:done', function (t) {
298
- var locals = { falpha: falpha, fbeta: fbeta, fcharlie: fcharlie };
299
- var r = pcode('a, b', [
300
- 'd = fbeta(a, b)',
301
- 'e = fcharlie(a, b) when fbeta;',
302
- 'c = falpha(a, b) when fbeta and fcharlie;',
303
- 'cb(err, c, d);'
304
- ], locals);
305
- t.deepEqual(r.ast.inParams, ['a', 'b']);
306
- t.deepEqual(r.ast.tasks, [
307
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'},
308
- { f: 'fcharlie', a: ['a', 'b'], out: ['e'], type: 'ret', after: ['fbeta'], name: 'fcharlie'},
309
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'ret', after: ['fbeta', 'fcharlie'], name: 'falpha'}
310
- ]);
311
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
312
- t.end();
313
- });
314
-
315
-
316
- /* selectFirst */
317
-
318
- test('selectFirst', function (t) {
319
- var locals = { falpha: falpha, fbeta: fbeta, fcharlie: fcharlie };
320
- var r = pcode.selectFirst('a, b', [
321
- 'c := falpha(a, b)',
322
- 'c = fbeta(a, b)',
323
- 'cb(err, c)'
324
- ], locals, { name: 'myflow', otherOptFoo: 'foo'});
325
- t.deepEqual(r.ast.inParams, ['a', 'b']);
326
- t.deepEqual(r.ast.tasks, [
327
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
328
- { f: 'fbeta', a: ['a', 'b'], out: ['c'], type: 'ret', name: 'fbeta', after: ['falpha']}
329
- ]);
330
- t.deepEqual(r.ast.outTask, { type: 'finalcbFirst', a: ['c'] });
331
- t.equal(r.ast.name, 'myflow', 'name should match if supplied');
332
- t.equal(r.ast.otherOptFoo, 'foo', 'other options should pass through');
333
- t.end();
334
- });
335
-