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.
Files changed (58) hide show
  1. package/.travis.yml +5 -2
  2. package/README.md +15 -3
  3. package/browser-test/dist.html +1 -0
  4. package/browser-test/index.html +1 -0
  5. package/browser-test/min.html +1 -0
  6. package/dist/react.js +370 -322
  7. package/dist/react.min.js +22 -1
  8. package/doc/advanced.md +11 -2
  9. package/lib/base-task.js +16 -19
  10. package/lib/cb-task.js +5 -5
  11. package/lib/core.js +5 -5
  12. package/lib/dsl.js +29 -29
  13. package/lib/error.js +4 -4
  14. package/lib/event-collector.js +6 -6
  15. package/lib/event-manager.js +7 -3
  16. package/lib/eventemitter.js +3 -3
  17. package/lib/finalcb-first-task.js +4 -4
  18. package/lib/finalcb-task.js +4 -4
  19. package/lib/id.js +3 -3
  20. package/lib/input-parser.js +10 -10
  21. package/lib/log-events.js +23 -14
  22. package/lib/parse.js +3 -3
  23. package/lib/promise-resolve.js +4 -4
  24. package/lib/promise-task.js +4 -4
  25. package/lib/react.js +7 -7
  26. package/lib/ret-task.js +4 -4
  27. package/lib/sprintf.js +4 -4
  28. package/lib/status.js +3 -3
  29. package/lib/task.js +12 -12
  30. package/lib/track-tasks.js +4 -4
  31. package/lib/validate.js +8 -8
  32. package/lib/vcon.js +28 -5
  33. package/lib/when-task.js +7 -8
  34. package/package.json +17 -7
  35. package/test/ast.mocha.js +4 -4
  36. package/test/cb-task.mocha.js +17 -17
  37. package/test/core-deferred.mocha.js +8 -8
  38. package/test/core-when.mocha.js +7 -7
  39. package/test/core.mocha.js +52 -52
  40. package/test/dsl.mocha.js +45 -43
  41. package/test/event-manager.mocha.js +2 -2
  42. package/test/exec-options.mocha.js +4 -4
  43. package/test/finalcb-task.mocha.js +6 -6
  44. package/test/input-parser.mocha.js +1 -1
  45. package/test/log-events.mocha.js +88 -0
  46. package/test/module-use.mocha.js +24 -7
  47. package/test/promise-auto-resolve.mocha.js +4 -4
  48. package/test/ret-task.mocha.js +18 -18
  49. package/test/task.mocha.js +3 -3
  50. package/test/validate-cb-task.mocha.js +11 -11
  51. package/test/validate-ret-task.mocha.js +14 -14
  52. package/test/validate.mocha.js +57 -57
  53. package/test/vcon.mocha.js +13 -13
  54. package/vendor/chai/chai.js +3371 -1158
  55. package/vendor/requirejs/require.js +1447 -1455
  56. package/vendor/requirejs/require.min.js +31 -28
  57. package/vendor/mocha/mocha.css +0 -135
  58. package/vendor/mocha/mocha.js +0 -3589
@@ -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
+ }());
@@ -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, new Error('first flow parameter should be the flow name, but found in/out def: cb -> err, c'));
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, new Error('callback specified, but first out param was not "err", use for clarity. Found in/out def: cb -> c'));
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, new Error('callback specified, but first out param was not "err", use for clarity. Found in/out def: cb -> c'));
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, new Error('found err param, but cb/callback is not specified, is this cb-style async or sync function? Found in/out def: a -> err, c'));
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, new Error('found err param, but cb/callback is not specified, is this cb-style async or sync function? Found in/out def: a -> err, c'));
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, new Error('extra unmatched task arg: extraBadArg'));
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, new Error(sprintf('extra unmatched task arg: %s', fbeta)));
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('loadAndSave', 'filename, uid, outDirname, cb -> err, html, user, bytesWritten', // name, in/out params
311
- loadUser, 'uid, cb -> err, user', // calling async fn loadUser with uid, callback is called with err and user
312
- loadFile, 'filename, cb -> err, filedata',
313
- markdown, 'filedata -> html', // using a sync function
314
- prepareDirectory, 'outDirname, cb -> err, dircreated',
315
- writeOutput, 'html, user, cb -> err, bytesWritten', { after: prepareDirectory }, // only after prepareDirectory done
316
- loadEmailTemplate, 'cb -> err, emailmd',
317
- markdown, 'emailmd -> emailHtml', // using a sync function
318
- customizeEmail, 'user, emailHtml -> custEmailHtml',
319
- deliverEmail, 'custEmailHtml, cb -> err, deliveredEmail', { after: writeOutput } // only after writeOutput is done
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
+ }());