react 0.6.1 → 0.7.1
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.
- package/.travis.yml +5 -2
- package/README.md +15 -3
- package/browser-test/dist.html +1 -0
- package/browser-test/index.html +1 -0
- package/browser-test/min.html +1 -0
- package/dist/react.js +370 -322
- package/dist/react.min.js +22 -1
- package/doc/advanced.md +11 -2
- package/lib/base-task.js +16 -19
- package/lib/cb-task.js +5 -5
- package/lib/core.js +5 -5
- package/lib/dsl.js +29 -29
- package/lib/error.js +4 -4
- package/lib/event-collector.js +6 -6
- package/lib/event-manager.js +7 -3
- package/lib/eventemitter.js +3 -3
- package/lib/finalcb-first-task.js +4 -4
- package/lib/finalcb-task.js +4 -4
- package/lib/id.js +3 -3
- package/lib/input-parser.js +10 -10
- package/lib/log-events.js +23 -14
- package/lib/parse.js +3 -3
- package/lib/promise-resolve.js +4 -4
- package/lib/promise-task.js +4 -4
- package/lib/react.js +7 -7
- package/lib/ret-task.js +4 -4
- package/lib/sprintf.js +4 -4
- package/lib/status.js +3 -3
- package/lib/task.js +12 -12
- package/lib/track-tasks.js +4 -4
- package/lib/validate.js +8 -8
- package/lib/vcon.js +28 -5
- package/lib/when-task.js +7 -8
- package/package.json +17 -7
- package/test/ast.mocha.js +4 -4
- package/test/cb-task.mocha.js +17 -17
- package/test/core-deferred.mocha.js +8 -8
- package/test/core-when.mocha.js +7 -7
- package/test/core.mocha.js +52 -52
- package/test/dsl.mocha.js +45 -43
- package/test/event-manager.mocha.js +2 -2
- package/test/exec-options.mocha.js +4 -4
- package/test/finalcb-task.mocha.js +6 -6
- package/test/input-parser.mocha.js +1 -1
- package/test/log-events.mocha.js +88 -0
- package/test/module-use.mocha.js +24 -7
- package/test/promise-auto-resolve.mocha.js +4 -4
- package/test/ret-task.mocha.js +18 -18
- package/test/task.mocha.js +3 -3
- package/test/validate-cb-task.mocha.js +11 -11
- package/test/validate-ret-task.mocha.js +14 -14
- package/test/validate.mocha.js +57 -57
- package/test/vcon.mocha.js +13 -13
- package/vendor/chai/chai.js +3371 -1158
- package/vendor/requirejs/require.js +1447 -1455
- package/vendor/requirejs/require.min.js +31 -28
- package/vendor/mocha/mocha.css +0 -135
- package/vendor/mocha/mocha.js +0 -3589
package/test/core-when.mocha.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
'use strict';
|
|
2
1
|
/*global react:true Deferred:true */
|
|
3
2
|
|
|
4
3
|
if (typeof(chai) === 'undefined') {
|
|
@@ -14,6 +13,7 @@ if (typeof(Deferred) === 'undefined') {
|
|
|
14
13
|
}
|
|
15
14
|
|
|
16
15
|
(function () {
|
|
16
|
+
'use strict';
|
|
17
17
|
|
|
18
18
|
var t = chai.assert;
|
|
19
19
|
|
|
@@ -51,7 +51,7 @@ if (typeof(Deferred) === 'undefined') {
|
|
|
51
51
|
var fn = react();
|
|
52
52
|
var errors = fn.setAndValidateAST({
|
|
53
53
|
inParams: ['pm', 'pa'],
|
|
54
|
-
tasks: [
|
|
54
|
+
tasks: [
|
|
55
55
|
{ a: ['pm'], out: ['m'], type: 'when' },
|
|
56
56
|
{ a: ['pa'], out: ['a'], type: 'when' }
|
|
57
57
|
],
|
|
@@ -61,21 +61,21 @@ if (typeof(Deferred) === 'undefined') {
|
|
|
61
61
|
|
|
62
62
|
var pm = multiply(2, 3);
|
|
63
63
|
var pa = add(4, 5);
|
|
64
|
-
|
|
64
|
+
|
|
65
65
|
fn(pm, pa, function (err, m, a) {
|
|
66
66
|
t.equal(err, null);
|
|
67
67
|
t.equal(m, 6);
|
|
68
68
|
t.equal(a, 9);
|
|
69
69
|
done();
|
|
70
70
|
});
|
|
71
|
-
});
|
|
71
|
+
});
|
|
72
72
|
|
|
73
73
|
|
|
74
74
|
test('rejects with error', function (done) {
|
|
75
75
|
var fn = react();
|
|
76
76
|
var errors = fn.setAndValidateAST({
|
|
77
77
|
inParams: ['pm', 'pa'],
|
|
78
|
-
tasks: [
|
|
78
|
+
tasks: [
|
|
79
79
|
{ a: ['pm'], out: ['m'], type: 'when' },
|
|
80
80
|
{ a: ['pa'], out: ['a'], type: 'when' }
|
|
81
81
|
],
|
|
@@ -86,11 +86,11 @@ if (typeof(Deferred) === 'undefined') {
|
|
|
86
86
|
var pm = badF2(2, 3);
|
|
87
87
|
var pa = add(4, 5);
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
|
|
90
90
|
fn(pm, pa, function (err, m, a) {
|
|
91
91
|
t.equal(err.message, 'my-error');
|
|
92
92
|
done();
|
|
93
93
|
});
|
|
94
94
|
});
|
|
95
95
|
|
|
96
|
-
}());
|
|
96
|
+
}());
|
package/test/core.mocha.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
'use strict';
|
|
2
1
|
/*global react:true */
|
|
3
2
|
|
|
4
3
|
if (typeof(chai) === 'undefined') {
|
|
@@ -10,6 +9,7 @@ if (typeof(react) === 'undefined') {
|
|
|
10
9
|
}
|
|
11
10
|
|
|
12
11
|
(function () {
|
|
12
|
+
'use strict';
|
|
13
13
|
|
|
14
14
|
var t = chai.assert;
|
|
15
15
|
|
|
@@ -68,7 +68,7 @@ if (typeof(react) === 'undefined') {
|
|
|
68
68
|
{ f: multiply, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'multiply_0' },
|
|
69
69
|
{ f: multiply, a: ['a', 'b'], out: ['d'], name: 'multiply', type: 'cb' },
|
|
70
70
|
{ f: multiply, a: ['a', 'b'], out: ['e'], name: 'times', type: 'cb' },
|
|
71
|
-
{ f: anonFn, a: ['a', 'b'], out: ['g'], type: 'ret', name: 'task_3' },
|
|
71
|
+
{ f: anonFn, a: ['a', 'b'], out: ['g'], type: 'ret', name: 'task_3' },
|
|
72
72
|
{ f: multiply, a: ['a', 'b'], out: ['f'], type: 'cb', name: 'multiply_4' }
|
|
73
73
|
]);
|
|
74
74
|
done();
|
|
@@ -96,7 +96,7 @@ if (typeof(react) === 'undefined') {
|
|
|
96
96
|
var fn = react();
|
|
97
97
|
var errors = fn.setAndValidateAST({
|
|
98
98
|
inParams: ['a', 'b'],
|
|
99
|
-
tasks: [
|
|
99
|
+
tasks: [
|
|
100
100
|
{ f: multiply, a: ['a', 'b'], out: ['c'] },
|
|
101
101
|
{ f: add, a: ['c', 'b'], out: ['d'] }
|
|
102
102
|
],
|
|
@@ -110,13 +110,13 @@ if (typeof(react) === 'undefined') {
|
|
|
110
110
|
t.equal(d, 9);
|
|
111
111
|
done();
|
|
112
112
|
});
|
|
113
|
-
});
|
|
113
|
+
});
|
|
114
114
|
|
|
115
115
|
test('multi-step with after as nonarr fn', function (done) {
|
|
116
116
|
var fn = react();
|
|
117
117
|
var errors = fn.setAndValidateAST({
|
|
118
118
|
inParams: ['a', 'b'],
|
|
119
|
-
tasks: [
|
|
119
|
+
tasks: [
|
|
120
120
|
{ f: multiply, a: ['a', 'b'], out: ['c'], after: add },
|
|
121
121
|
{ f: add, a: ['a', 'b'], out: ['d'] }
|
|
122
122
|
],
|
|
@@ -126,7 +126,7 @@ if (typeof(react) === 'undefined') {
|
|
|
126
126
|
|
|
127
127
|
var collector = react.createEventCollector();
|
|
128
128
|
collector.capture(fn, 'task.complete');
|
|
129
|
-
|
|
129
|
+
|
|
130
130
|
fn(2, 3, function (err, c, d) {
|
|
131
131
|
t.equal(err, null);
|
|
132
132
|
t.equal(c, 6);
|
|
@@ -137,13 +137,13 @@ if (typeof(react) === 'undefined') {
|
|
|
137
137
|
t.equal(events[1].task.name, 'multiply', 'name matches');
|
|
138
138
|
done();
|
|
139
139
|
});
|
|
140
|
-
});
|
|
140
|
+
});
|
|
141
141
|
|
|
142
142
|
test('mixed multi-step with after as nonarr fn w/events', function (done) {
|
|
143
143
|
var fn = react();
|
|
144
144
|
var errors = fn.setAndValidateAST({
|
|
145
145
|
inParams: ['a', 'b'],
|
|
146
|
-
tasks: [
|
|
146
|
+
tasks: [
|
|
147
147
|
{ f: multiply, a: ['a', 'b'], out: ['c'], after: fnRetsSum },
|
|
148
148
|
{ f: fnRetsSum, a: ['a', 'b'], out: ['d'], type: 'ret' }
|
|
149
149
|
],
|
|
@@ -153,7 +153,7 @@ if (typeof(react) === 'undefined') {
|
|
|
153
153
|
|
|
154
154
|
var collector = react.createEventCollector();
|
|
155
155
|
collector.capture(fn, 'task.complete');
|
|
156
|
-
|
|
156
|
+
|
|
157
157
|
fn(2, 3, function (err, c, d) {
|
|
158
158
|
t.equal(err, null);
|
|
159
159
|
t.equal(c, 6);
|
|
@@ -164,19 +164,19 @@ if (typeof(react) === 'undefined') {
|
|
|
164
164
|
t.isNotNull(events[0].task.id, 'has unique id');
|
|
165
165
|
t.isNotNull(events[0].task.startTime, 'has startTime');
|
|
166
166
|
t.isNotNull(events[0].task.endTime, 'has endTime');
|
|
167
|
-
t.isNotNull(events[0].task.elapsedTime !== undefined, 'has elapsedTime');
|
|
167
|
+
t.isNotNull(events[0].task.elapsedTime !== undefined, 'has elapsedTime');
|
|
168
168
|
t.isNotNull(events[0].task.args, 'has args');
|
|
169
169
|
t.isNotNull(events[0].task.results, 'has results');
|
|
170
170
|
t.equal(events[1].task.name, 'multiply', 'name matches');
|
|
171
171
|
t.isNotNull(events[1].task.id, 'has unique id');
|
|
172
172
|
t.isNotNull(events[1].task.startTime, 'has startTime');
|
|
173
173
|
t.isNotNull(events[1].task.endTime, 'has endTime');
|
|
174
|
-
t.isNotNull(events[1].task.elapsedTime !== undefined, 'has elapsedTime');
|
|
174
|
+
t.isNotNull(events[1].task.elapsedTime !== undefined, 'has elapsedTime');
|
|
175
175
|
t.isNotNull(events[1].task.args, 'has args');
|
|
176
176
|
t.isNotNull(events[1].task.results, 'has results');
|
|
177
177
|
done();
|
|
178
178
|
});
|
|
179
|
-
});
|
|
179
|
+
});
|
|
180
180
|
|
|
181
181
|
|
|
182
182
|
|
|
@@ -185,7 +185,7 @@ if (typeof(react) === 'undefined') {
|
|
|
185
185
|
var fn = react();
|
|
186
186
|
var errors = fn.setAndValidateAST({
|
|
187
187
|
inParams: ['a', 'b', 'c'],
|
|
188
|
-
tasks: [
|
|
188
|
+
tasks: [
|
|
189
189
|
{ f: multiply, a: ['a', 'b'], out: ['c.mult'] },
|
|
190
190
|
{ f: fnRetsSum, a: ['c.mult', 'b'], out: ['c.sum'], type: 'ret' }
|
|
191
191
|
],
|
|
@@ -200,13 +200,13 @@ if (typeof(react) === 'undefined') {
|
|
|
200
200
|
t.deepEqual(c, { foo: 1, mult: 6, sum: 9});
|
|
201
201
|
done();
|
|
202
202
|
});
|
|
203
|
-
});
|
|
203
|
+
});
|
|
204
204
|
|
|
205
205
|
test('error when cant complete', function (done) {
|
|
206
206
|
var fn = react();
|
|
207
207
|
var errors = fn.setAndValidateAST({
|
|
208
208
|
inParams: ['a', 'b', 'c'],
|
|
209
|
-
tasks: [
|
|
209
|
+
tasks: [
|
|
210
210
|
{ f: multiply, a: ['a', 'b'], out: ['c.mult'] },
|
|
211
211
|
{ f: fnRetsSum, a: ['c.bad', 'b'], out: ['c.sum'], type: 'ret' },
|
|
212
212
|
{ f: add, a: ['c.sum', 'a'], out: ['d']}
|
|
@@ -225,11 +225,11 @@ if (typeof(react) === 'undefined') {
|
|
|
225
225
|
test('objects', function (done) {
|
|
226
226
|
function retObj(a, b, cb) { cb(null, { bar: a + b }); }
|
|
227
227
|
function concat(a, b, cb) { cb(null, { result: a + b }); }
|
|
228
|
-
|
|
228
|
+
|
|
229
229
|
var fn = react();
|
|
230
230
|
var errors = fn.setAndValidateAST({
|
|
231
231
|
inParams: ['a', 'b'],
|
|
232
|
-
tasks: [
|
|
232
|
+
tasks: [
|
|
233
233
|
{ f: retObj, a: ['a.foo', 'b'], out: ['c'] },
|
|
234
234
|
{ f: concat, a: ['c.bar', 'b'], out: ['d'] }
|
|
235
235
|
],
|
|
@@ -243,18 +243,18 @@ if (typeof(react) === 'undefined') {
|
|
|
243
243
|
t.equal(dresult, 'FOOBB');
|
|
244
244
|
done();
|
|
245
245
|
});
|
|
246
|
-
});
|
|
246
|
+
});
|
|
247
247
|
|
|
248
248
|
test('objects from container', function (done) {
|
|
249
249
|
var C = {
|
|
250
250
|
retObj: function retObj(a, b, cb) { cb(null, { bar: a + b }); },
|
|
251
251
|
concat: function concat(a, b, cb) { cb(null, { result: a + b }); }
|
|
252
252
|
};
|
|
253
|
-
|
|
253
|
+
|
|
254
254
|
var fn = react();
|
|
255
255
|
var errors = fn.setAndValidateAST({
|
|
256
256
|
inParams: ['a', 'b'],
|
|
257
|
-
tasks: [
|
|
257
|
+
tasks: [
|
|
258
258
|
{ f: C.retObj, a: ['a.foo', 'b'], out: ['c'] },
|
|
259
259
|
{ f: C.concat, a: ['c.bar', 'b'], out: ['d'] }
|
|
260
260
|
],
|
|
@@ -268,43 +268,43 @@ if (typeof(react) === 'undefined') {
|
|
|
268
268
|
t.equal(dresult, 'FOOBB');
|
|
269
269
|
done();
|
|
270
270
|
});
|
|
271
|
-
});
|
|
271
|
+
});
|
|
272
272
|
|
|
273
273
|
test('objects from container input arg', function (done) {
|
|
274
274
|
var CONT = {
|
|
275
275
|
retObj: function retObj(a, b, cb) { cb(null, { bar: a + b }); },
|
|
276
276
|
concat: function concat(a, b, cb) { cb(null, { result: a + b }); }
|
|
277
277
|
};
|
|
278
|
-
|
|
278
|
+
|
|
279
279
|
var fn = react();
|
|
280
280
|
var errors = fn.setAndValidateAST({
|
|
281
281
|
inParams: ['a', 'b', 'CONT'],
|
|
282
|
-
tasks: [
|
|
282
|
+
tasks: [
|
|
283
283
|
{ f: 'CONT.retObj', a: ['a.foo', 'b'], out: ['c'] },
|
|
284
284
|
{ f: 'CONT.concat', a: ['c.bar', 'b'], out: ['d'] }
|
|
285
285
|
],
|
|
286
286
|
outTask: { a: ['c', 'd.result'] }
|
|
287
287
|
});
|
|
288
288
|
t.deepEqual(errors, [], 'no validation errors');
|
|
289
|
-
|
|
289
|
+
|
|
290
290
|
fn({ foo: 'FOO' }, 'B', CONT, function (err, c, dresult) {
|
|
291
291
|
t.equal(err, null);
|
|
292
292
|
t.deepEqual(c, { bar: 'FOOB' });
|
|
293
293
|
t.equal(dresult, 'FOOBB');
|
|
294
294
|
done();
|
|
295
295
|
});
|
|
296
|
-
});
|
|
296
|
+
});
|
|
297
297
|
|
|
298
298
|
test('use locals for functions', function (done) {
|
|
299
299
|
var locals = {
|
|
300
300
|
retObj: function retObj(a, b, cb) { cb(null, { bar: a + b }); },
|
|
301
301
|
concat: function concat(a, b, cb) { cb(null, { result: a + b }); }
|
|
302
302
|
};
|
|
303
|
-
|
|
303
|
+
|
|
304
304
|
var fn = react();
|
|
305
305
|
var errors = fn.setAndValidateAST({
|
|
306
306
|
inParams: ['a', 'b'],
|
|
307
|
-
tasks: [
|
|
307
|
+
tasks: [
|
|
308
308
|
{ f: 'retObj', a: ['a.foo', 'b'], out: ['c'] },
|
|
309
309
|
{ f: 'concat', a: ['c.bar', 'b'], out: ['d'] }
|
|
310
310
|
],
|
|
@@ -319,18 +319,18 @@ if (typeof(react) === 'undefined') {
|
|
|
319
319
|
t.equal(dresult, 'FOOBB');
|
|
320
320
|
done();
|
|
321
321
|
});
|
|
322
|
-
});
|
|
322
|
+
});
|
|
323
323
|
|
|
324
324
|
test('objects from locals', function (done) {
|
|
325
325
|
var CONT = {
|
|
326
326
|
retObj: function retObj(a, b, cb) { cb(null, { bar: a + b }); },
|
|
327
327
|
concat: function concat(a, b, cb) { cb(null, { result: a + b }); }
|
|
328
328
|
};
|
|
329
|
-
|
|
329
|
+
|
|
330
330
|
var fn = react();
|
|
331
331
|
var errors = fn.setAndValidateAST({
|
|
332
332
|
inParams: ['a', 'b'],
|
|
333
|
-
tasks: [
|
|
333
|
+
tasks: [
|
|
334
334
|
{ f: 'CONT.retObj', a: ['a.foo', 'b'], out: ['c'] },
|
|
335
335
|
{ f: 'CONT.concat', a: ['c.bar', 'b'], out: ['d'] }
|
|
336
336
|
],
|
|
@@ -345,13 +345,13 @@ if (typeof(react) === 'undefined') {
|
|
|
345
345
|
t.equal(dresult, 'FOOBB');
|
|
346
346
|
done();
|
|
347
347
|
});
|
|
348
|
-
});
|
|
349
|
-
|
|
348
|
+
});
|
|
349
|
+
|
|
350
350
|
test('multi-step func throws, cb with error', function (done) {
|
|
351
351
|
var fn = react();
|
|
352
352
|
var errors = fn.setAndValidateAST({
|
|
353
353
|
inParams: ['a', 'b'],
|
|
354
|
-
tasks: [
|
|
354
|
+
tasks: [
|
|
355
355
|
{ f: multiply, a: ['a', 'b'], out: ['c'] },
|
|
356
356
|
{ f: badFunc, a: ['c', 'b'], out: ['d'] }
|
|
357
357
|
],
|
|
@@ -363,14 +363,14 @@ if (typeof(react) === 'undefined') {
|
|
|
363
363
|
t.equal(err.message, 'badFuncThrow');
|
|
364
364
|
done();
|
|
365
365
|
});
|
|
366
|
-
});
|
|
367
|
-
|
|
366
|
+
});
|
|
367
|
+
|
|
368
368
|
test('multi-step func cb err, cb with error', function (done) {
|
|
369
|
-
|
|
369
|
+
|
|
370
370
|
var fn = react();
|
|
371
371
|
var errors = fn.setAndValidateAST({
|
|
372
372
|
inParams: ['a', 'b'],
|
|
373
|
-
tasks: [
|
|
373
|
+
tasks: [
|
|
374
374
|
{ f: multiply, a: ['a', 'b'], out: ['c'] },
|
|
375
375
|
{ f: badF2, a: ['c', 'b'], out: ['d'] },
|
|
376
376
|
{ f: add, a: ['d', 'b'], out: ['e'] }
|
|
@@ -383,19 +383,19 @@ if (typeof(react) === 'undefined') {
|
|
|
383
383
|
t.equal(err.message, 'my-error');
|
|
384
384
|
done();
|
|
385
385
|
});
|
|
386
|
-
});
|
|
386
|
+
});
|
|
387
387
|
|
|
388
388
|
test('using "this" in a cb function', function (done) {
|
|
389
|
-
|
|
389
|
+
|
|
390
390
|
function getA(cb) {
|
|
391
391
|
/*jshint validthis: true */
|
|
392
392
|
cb(null, this.a);
|
|
393
393
|
}
|
|
394
|
-
|
|
394
|
+
|
|
395
395
|
var fn = react();
|
|
396
396
|
var errors = fn.setAndValidateAST({
|
|
397
397
|
inParams: [],
|
|
398
|
-
tasks: [
|
|
398
|
+
tasks: [
|
|
399
399
|
{ f: getA, a: [], out: ['a'] }
|
|
400
400
|
],
|
|
401
401
|
outTask: { a: ['a'] }
|
|
@@ -418,11 +418,11 @@ if (typeof(react) === 'undefined') {
|
|
|
418
418
|
/*jshint validthis: true */
|
|
419
419
|
return this.a;
|
|
420
420
|
}
|
|
421
|
-
|
|
421
|
+
|
|
422
422
|
var fn = react();
|
|
423
423
|
var errors = fn.setAndValidateAST({
|
|
424
424
|
inParams: [],
|
|
425
|
-
tasks: [
|
|
425
|
+
tasks: [
|
|
426
426
|
{ f: getA, a: [], out: ['a'], type: 'ret' }
|
|
427
427
|
],
|
|
428
428
|
outTask: { a: ['a'] }
|
|
@@ -443,7 +443,7 @@ if (typeof(react) === 'undefined') {
|
|
|
443
443
|
test('undefined input arguments will be upgraded from undefined to null', function (done) {
|
|
444
444
|
var fn = react();
|
|
445
445
|
function concat(a, b) {
|
|
446
|
-
return '' + a + b;
|
|
446
|
+
return '' + a + b;
|
|
447
447
|
}
|
|
448
448
|
var errors = fn.setAndValidateAST({
|
|
449
449
|
inParams: ['a', 'b'],
|
|
@@ -469,7 +469,7 @@ if (typeof(react) === 'undefined') {
|
|
|
469
469
|
var fn = react();
|
|
470
470
|
var errors = fn.setAndValidateAST({
|
|
471
471
|
inParams: ['a', 'b'],
|
|
472
|
-
tasks: [
|
|
472
|
+
tasks: [
|
|
473
473
|
{ f: multiply, a: ['a', 'b'], out: ['c'] },
|
|
474
474
|
{ f: add, a: ['a', 'b'], out: ['c'], after: ['multiply'] }
|
|
475
475
|
],
|
|
@@ -489,7 +489,7 @@ if (typeof(react) === 'undefined') {
|
|
|
489
489
|
t.deepEqual(events[0].task.results, [6], 'results match');
|
|
490
490
|
done();
|
|
491
491
|
});
|
|
492
|
-
});
|
|
492
|
+
});
|
|
493
493
|
|
|
494
494
|
test('selectFirst with third succeeding', function (done) {
|
|
495
495
|
function noSuccess(a, b, cb) { cb(null); } // returns undefined result
|
|
@@ -497,7 +497,7 @@ if (typeof(react) === 'undefined') {
|
|
|
497
497
|
var fn = react();
|
|
498
498
|
var errors = fn.setAndValidateAST({
|
|
499
499
|
inParams: ['a', 'b'],
|
|
500
|
-
tasks: [
|
|
500
|
+
tasks: [
|
|
501
501
|
{ f: noSuccess, a: ['a', 'b'], out: ['c'] },
|
|
502
502
|
{ f: noSuccessNull, a: ['a', 'b'], out: ['c'], after: ['noSuccess'] },
|
|
503
503
|
{ f: add, a: ['a', 'b'], out: ['c'], after: ['noSuccessNull'] }
|
|
@@ -518,7 +518,7 @@ if (typeof(react) === 'undefined') {
|
|
|
518
518
|
t.deepEqual(events[2].task.results, [5], 'results match');
|
|
519
519
|
done();
|
|
520
520
|
});
|
|
521
|
-
});
|
|
521
|
+
});
|
|
522
522
|
|
|
523
523
|
|
|
524
524
|
test('selectFirst forces order with third succeeding', function (done) {
|
|
@@ -529,7 +529,7 @@ if (typeof(react) === 'undefined') {
|
|
|
529
529
|
var fn = react();
|
|
530
530
|
var errors = fn.setAndValidateAST({
|
|
531
531
|
inParams: ['a', 'b'],
|
|
532
|
-
tasks: [
|
|
532
|
+
tasks: [
|
|
533
533
|
{ f: noSuccess, a: ['a', 'b'], out: ['c'] },
|
|
534
534
|
{ f: noSuccessNull, a: ['a', 'b'], out: ['c'], after: ['noSuccess']},
|
|
535
535
|
{ f: add, a: ['a', 'b'], out: ['c'], after: ['noSuccessNull'] },
|
|
@@ -553,7 +553,7 @@ if (typeof(react) === 'undefined') {
|
|
|
553
553
|
t.deepEqual(events[2].task.results, [5], 'results match');
|
|
554
554
|
done();
|
|
555
555
|
});
|
|
556
|
-
});
|
|
556
|
+
});
|
|
557
557
|
|
|
558
558
|
test('selectFirst using direct returns', function (done) {
|
|
559
559
|
function noSuccess(a, b) { } // returns undefined result
|
|
@@ -562,7 +562,7 @@ if (typeof(react) === 'undefined') {
|
|
|
562
562
|
var fn = react();
|
|
563
563
|
var errors = fn.setAndValidateAST({
|
|
564
564
|
inParams: ['a', 'b'],
|
|
565
|
-
tasks: [
|
|
565
|
+
tasks: [
|
|
566
566
|
{ f: noSuccess, a: ['a', 'b'], out: ['c'], type: 'ret' },
|
|
567
567
|
{ f: noSuccessNull, a: ['a', 'b'], out: ['c'], type: 'ret', after: ['noSuccess'] },
|
|
568
568
|
{ f: addRet, a: ['a', 'b'], out: ['c'], type: 'ret', after: ['noSuccessNull'] }
|
|
@@ -583,7 +583,7 @@ if (typeof(react) === 'undefined') {
|
|
|
583
583
|
t.deepEqual(events[2].task.results, [5], 'results match');
|
|
584
584
|
done();
|
|
585
585
|
});
|
|
586
|
-
});
|
|
586
|
+
});
|
|
587
587
|
|
|
588
588
|
|
|
589
589
|
}());
|
package/test/dsl.mocha.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
'use strict';
|
|
2
1
|
/*global react:true sprintf:true */
|
|
3
2
|
|
|
4
3
|
if (typeof(chai) === 'undefined') {
|
|
@@ -14,6 +13,7 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
14
13
|
}
|
|
15
14
|
|
|
16
15
|
(function () {
|
|
16
|
+
'use strict';
|
|
17
17
|
|
|
18
18
|
var t = chai.assert;
|
|
19
19
|
|
|
@@ -80,7 +80,7 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
80
80
|
{ f: falpha, a: [], out: ['c'], type: 'cb', name: 'falpha'}
|
|
81
81
|
]);
|
|
82
82
|
t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
|
|
83
|
-
done();
|
|
83
|
+
done();
|
|
84
84
|
});
|
|
85
85
|
|
|
86
86
|
test('single task, err and out params', function (done) {
|
|
@@ -92,7 +92,7 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
92
92
|
{ f: falpha, a: [], out: ['c'], type: 'cb', name: 'falpha'}
|
|
93
93
|
]);
|
|
94
94
|
t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
|
|
95
|
-
done();
|
|
95
|
+
done();
|
|
96
96
|
});
|
|
97
97
|
|
|
98
98
|
test('using - with literal string', function (done) {
|
|
@@ -104,11 +104,11 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
104
104
|
{ f: falpha, a: ['"another-string"'], out: ['c'], type: 'cb', name: 'falpha'}
|
|
105
105
|
]);
|
|
106
106
|
t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
|
|
107
|
-
done();
|
|
107
|
+
done();
|
|
108
108
|
});
|
|
109
109
|
|
|
110
110
|
test('single task, ERR and out params', function (done) {
|
|
111
|
-
var r = react('myName', 'cb -> ERR, c',
|
|
111
|
+
var r = react('myName', 'cb -> ERR, c',
|
|
112
112
|
falpha, 'cb -> ERR, c'
|
|
113
113
|
);
|
|
114
114
|
t.deepEqual(r.ast.inParams, []);
|
|
@@ -116,11 +116,11 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
116
116
|
{ f: falpha, a: [], out: ['c'], type: 'cb', name: 'falpha'}
|
|
117
117
|
]);
|
|
118
118
|
t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
|
|
119
|
-
done();
|
|
119
|
+
done();
|
|
120
120
|
});
|
|
121
121
|
|
|
122
122
|
test('cb used in defs is simply ignored', function (done) {
|
|
123
|
-
var r = react('myName', 'a, b, cb -> err, c',
|
|
123
|
+
var r = react('myName', 'a, b, cb -> err, c',
|
|
124
124
|
falpha, 'a, b, cb -> err, c'
|
|
125
125
|
);
|
|
126
126
|
t.deepEqual(r.ast.inParams, ['a', 'b']);
|
|
@@ -128,7 +128,7 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
128
128
|
{ f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
|
|
129
129
|
]);
|
|
130
130
|
t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
|
|
131
|
-
done();
|
|
131
|
+
done();
|
|
132
132
|
});
|
|
133
133
|
|
|
134
134
|
test('callback used in defs is simply ignored', function (done) {
|
|
@@ -140,7 +140,7 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
140
140
|
{ f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
|
|
141
141
|
]);
|
|
142
142
|
t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
|
|
143
|
-
done();
|
|
143
|
+
done();
|
|
144
144
|
});
|
|
145
145
|
|
|
146
146
|
test('two inputs, two tasks, two out params', function (done) {
|
|
@@ -154,7 +154,7 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
154
154
|
{ f: fbeta, a: ['a', 'b'], out: ['d', 'e'], type: 'cb', name: 'fbeta'}
|
|
155
155
|
]);
|
|
156
156
|
t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
|
|
157
|
-
done();
|
|
157
|
+
done();
|
|
158
158
|
});
|
|
159
159
|
|
|
160
160
|
test('two inputs, two tasks, two out params, options', function (done) {
|
|
@@ -171,7 +171,7 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
171
171
|
t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
|
|
172
172
|
t.equal(r.ast.name, 'myName', 'name should match');
|
|
173
173
|
t.equal(r.ast.otherOptFoo, 'foo', 'other options should pass through');
|
|
174
|
-
done();
|
|
174
|
+
done();
|
|
175
175
|
});
|
|
176
176
|
|
|
177
177
|
test('two inputs, two mixed tasks, two out params', function (done) {
|
|
@@ -185,12 +185,12 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
185
185
|
{ f: fbeta, a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
|
|
186
186
|
]);
|
|
187
187
|
t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
|
|
188
|
-
done();
|
|
188
|
+
done();
|
|
189
189
|
});
|
|
190
190
|
|
|
191
191
|
|
|
192
192
|
test('two inputs, two mixed tasks, two out params, opts', function (done) {
|
|
193
|
-
var r = react('myName', 'a, b, cb -> err, c, d',
|
|
193
|
+
var r = react('myName', 'a, b, cb -> err, c, d',
|
|
194
194
|
falpha, 'a, cb -> err, c', { after: fbeta },
|
|
195
195
|
fbeta, 'a, b -> d'
|
|
196
196
|
);
|
|
@@ -200,13 +200,13 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
200
200
|
{ f: fbeta, a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
|
|
201
201
|
]);
|
|
202
202
|
t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
|
|
203
|
-
done();
|
|
203
|
+
done();
|
|
204
204
|
});
|
|
205
205
|
|
|
206
206
|
|
|
207
207
|
// Object use
|
|
208
208
|
test('object prop task params', function (done) {
|
|
209
|
-
var r = react('myName', 'a, b, cb -> err, c, e',
|
|
209
|
+
var r = react('myName', 'a, b, cb -> err, c, e',
|
|
210
210
|
falpha, 'a, b.cat, cb -> err, c',
|
|
211
211
|
fbeta, 'c.dog, b -> d',
|
|
212
212
|
'd.egg', 'c, cb -> err, e'
|
|
@@ -218,7 +218,7 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
218
218
|
{ f: 'd.egg', a: ['c'], out: ['e'], type: 'cb', name: 'd.egg'}
|
|
219
219
|
]);
|
|
220
220
|
t.deepEqual(r.ast.outTask, { a: ['c', 'e'], type: 'finalcb' });
|
|
221
|
-
done();
|
|
221
|
+
done();
|
|
222
222
|
});
|
|
223
223
|
|
|
224
224
|
// Errors
|
|
@@ -229,7 +229,7 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
229
229
|
falpha, 'cb -> err, c'
|
|
230
230
|
);
|
|
231
231
|
};
|
|
232
|
-
t.throws(fn,
|
|
232
|
+
t.throws(fn, 'first flow parameter should be the flow name, but found in/out def: cb -> err, c');
|
|
233
233
|
done();
|
|
234
234
|
});
|
|
235
235
|
|
|
@@ -239,7 +239,7 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
239
239
|
falpha, 'cb -> err, c'
|
|
240
240
|
);
|
|
241
241
|
};
|
|
242
|
-
t.throws(fn,
|
|
242
|
+
t.throws(fn, 'callback specified, but first out param was not "err", use for clarity. Found in/out def: cb -> c');
|
|
243
243
|
done();
|
|
244
244
|
});
|
|
245
245
|
|
|
@@ -249,7 +249,7 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
249
249
|
falpha, 'cb -> c' // missing err
|
|
250
250
|
);
|
|
251
251
|
};
|
|
252
|
-
t.throws(fn,
|
|
252
|
+
t.throws(fn, 'callback specified, but first out param was not "err", use for clarity. Found in/out def: cb -> c');
|
|
253
253
|
done();
|
|
254
254
|
});
|
|
255
255
|
|
|
@@ -259,7 +259,7 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
259
259
|
falpha, 'cb -> err, c'
|
|
260
260
|
);
|
|
261
261
|
};
|
|
262
|
-
t.throws(fn,
|
|
262
|
+
t.throws(fn, 'found err param, but cb/callback is not specified, is this cb-style async or sync function? Found in/out def: a -> err, c');
|
|
263
263
|
done();
|
|
264
264
|
});
|
|
265
265
|
|
|
@@ -269,36 +269,36 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
269
269
|
falpha, 'a -> err, c' // missing cb
|
|
270
270
|
);
|
|
271
271
|
};
|
|
272
|
-
t.throws(fn,
|
|
272
|
+
t.throws(fn, 'found err param, but cb/callback is not specified, is this cb-style async or sync function? Found in/out def: a -> err, c');
|
|
273
273
|
done();
|
|
274
274
|
});
|
|
275
275
|
|
|
276
276
|
test('extra arg throws error', function (done) {
|
|
277
277
|
var fn = function () {
|
|
278
|
-
var r = react('myName', 'a, b, cb -> err, c, d',
|
|
278
|
+
var r = react('myName', 'a, b, cb -> err, c, d',
|
|
279
279
|
falpha, 'a, cb -> err, c', { after: fbeta },
|
|
280
280
|
fbeta, 'a, b -> returns d',
|
|
281
281
|
'extraBadArg'
|
|
282
282
|
);
|
|
283
283
|
};
|
|
284
|
-
t.throws(fn,
|
|
285
|
-
done();
|
|
284
|
+
t.throws(fn, 'extra unmatched task arg: extraBadArg');
|
|
285
|
+
done();
|
|
286
286
|
});
|
|
287
287
|
|
|
288
288
|
test('not enough args throws error', function (done) {
|
|
289
289
|
var fn = function () {
|
|
290
|
-
var r = react('myName', 'a, b, cb -> err, c, d',
|
|
290
|
+
var r = react('myName', 'a, b, cb -> err, c, d',
|
|
291
291
|
falpha, 'a, cb -> err, c', { after: fbeta },
|
|
292
292
|
fbeta
|
|
293
293
|
);
|
|
294
294
|
};
|
|
295
|
-
t.throws(fn,
|
|
296
|
-
done();
|
|
295
|
+
t.throws(fn, sprintf('extra unmatched task arg: %s', fbeta));
|
|
296
|
+
done();
|
|
297
297
|
});
|
|
298
298
|
|
|
299
299
|
test('long example', function (done) {
|
|
300
300
|
/*jshint white: false */
|
|
301
|
-
|
|
301
|
+
|
|
302
302
|
function loadUser(uid, cb){ setTimeout(cb, 100, null, "User"+uid); }
|
|
303
303
|
function loadFile(filename, cb){ setTimeout(cb, 100, null, 'Filedata'+filename); }
|
|
304
304
|
function markdown(filedata) { return 'html'+filedata; }
|
|
@@ -307,17 +307,19 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
307
307
|
function loadEmailTemplate(cb) { setTimeout(cb, 50, null, 'emailmd'); }
|
|
308
308
|
function customizeEmail(user, emailHtml) { return 'cust-'+user+emailHtml; }
|
|
309
309
|
function deliverEmail(custEmailHtml, cb) { setTimeout(cb, 100, null, 'delivered-'+custEmailHtml); }
|
|
310
|
-
var loadAndSave = react(
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
310
|
+
var loadAndSave = react(
|
|
311
|
+
'loadAndSave', 'filename, uid, outDirname, cb -> err, html, user, bytesWritten', // name, in/out params
|
|
312
|
+
loadUser, 'uid, cb -> err, user', // calling async fn loadUser with uid, cb is called w/ err & user
|
|
313
|
+
loadFile, 'filename, cb -> err, filedata',
|
|
314
|
+
markdown, 'filedata -> html', // using a sync function
|
|
315
|
+
prepareDirectory, 'outDirname, cb -> err, dircreated',
|
|
316
|
+
writeOutput, 'html, user, cb -> err, bytesWritten', { after: prepareDirectory }, // after prepareDirectory done
|
|
317
|
+
loadEmailTemplate, 'cb -> err, emailmd',
|
|
318
|
+
markdown, 'emailmd -> emailHtml', // using a sync function
|
|
319
|
+
customizeEmail, 'user, emailHtml -> custEmailHtml',
|
|
320
|
+
deliverEmail, 'custEmailHtml, cb -> err, deliveredEmail', { after: writeOutput } // only after writeOutput is done
|
|
321
|
+
);
|
|
322
|
+
|
|
321
323
|
loadAndSave('file.md', 100, '/tmp/foo', function (err, html, user, bytesWritten) { // executing the flow
|
|
322
324
|
t.equal(err, null);
|
|
323
325
|
t.equal(html, 'htmlFiledatafile.md');
|
|
@@ -327,11 +329,11 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
327
329
|
});
|
|
328
330
|
});
|
|
329
331
|
|
|
330
|
-
// selectFirst
|
|
332
|
+
// selectFirst
|
|
331
333
|
|
|
332
334
|
test('selectFirst', function (done) {
|
|
333
335
|
var r = react.selectFirst('myName', 'a, b, cb -> err, c',
|
|
334
|
-
{ otherOptFoo: 'foo'}, // main options
|
|
336
|
+
{ otherOptFoo: 'foo'}, // main options
|
|
335
337
|
falpha, 'a, b, cb -> err, c',
|
|
336
338
|
fbeta, 'a, b -> c'
|
|
337
339
|
);
|
|
@@ -344,7 +346,7 @@ if (typeof(sprintf) === 'undefined') {
|
|
|
344
346
|
t.deepEqual(r.ast.outTask, { type: 'finalcbFirst', a: ['c'] });
|
|
345
347
|
t.equal(r.ast.name, 'myName', 'name should match if supplied');
|
|
346
348
|
t.equal(r.ast.otherOptFoo, 'foo', 'other options should pass through');
|
|
347
|
-
done();
|
|
349
|
+
done();
|
|
348
350
|
});
|
|
349
351
|
|
|
350
|
-
}());
|
|
352
|
+
}());
|