react 0.6.0 → 0.7.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 (58) hide show
  1. package/.travis.yml +5 -2
  2. package/README.md +16 -2
  3. package/browser-test/dist.html +1 -1
  4. package/browser-test/index.html +3 -3
  5. package/browser-test/min.html +1 -1
  6. package/dist/react.js +407 -557
  7. package/dist/react.min.js +22 -1
  8. package/doc/advanced.md +9 -1
  9. package/lib/base-task.js +16 -19
  10. package/lib/cb-task.js +5 -5
  11. package/lib/core.js +7 -7
  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 +13 -6
  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 +8 -8
  28. package/lib/status.js +3 -3
  29. package/lib/task.js +44 -47
  30. package/lib/track-tasks.js +4 -4
  31. package/lib/validate.js +8 -8
  32. package/lib/vcon.js +31 -8
  33. package/lib/when-task.js +7 -8
  34. package/package.json +7 -8
  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 CbTask:true VContext:true */
3
2
 
4
3
  if (typeof(chai) === 'undefined') {
@@ -18,6 +17,7 @@ if (typeof(VContext) === 'undefined') {
18
17
  }
19
18
 
20
19
  (function () {
20
+ 'use strict';
21
21
 
22
22
  var t = chai.assert;
23
23
 
@@ -66,7 +66,7 @@ if (typeof(VContext) === 'undefined') {
66
66
  t.equal(task.isReady(vCon, tasksByName), false);
67
67
  task.status = null;
68
68
  t.equal(task.isReady(vCon, tasksByName), true);
69
- done();
69
+ done();
70
70
  });
71
71
 
72
72
  test('no args defined, no after -> not ready', function (done) {
@@ -82,39 +82,39 @@ if (typeof(VContext) === 'undefined') {
82
82
  var vCon = VContext.create([1, {}], ['b', 'c']);
83
83
  var tasksByName = { foo: task };
84
84
  t.equal(task.isReady(vCon, tasksByName), false);
85
- done();
85
+ done();
86
86
  });
87
87
 
88
88
  test('all args defined, no after, out no obj parent -> NOT ready', function (done) {
89
89
  var task = new CbTask({ type: 'cb', f: foo, a: ['b', 'c'], out: ['d.e'] });
90
90
  var vCon = VContext.create([1, null], ['b', 'c']);
91
91
  var tasksByName = { foo: task };
92
- t.equal(task.isReady(vCon, tasksByName), false, 'false if out objparent undef');
93
- done();
92
+ t.equal(task.isReady(vCon, tasksByName), false, 'false if out objparent undef');
93
+ done();
94
94
  });
95
95
 
96
96
  test('all args defined, no after, out no obj.par.par -> NOT ready', function (done) {
97
97
  var task = new CbTask({ type: 'cb', f: foo, a: ['b', 'c'], out: ['c.e.f'] });
98
98
  var vCon = VContext.create([1, { }], ['b', 'c']);
99
99
  var tasksByName = { foo: task };
100
- t.equal(task.isReady(vCon, tasksByName), false, 'false if out objparent undef');
101
- done();
100
+ t.equal(task.isReady(vCon, tasksByName), false, 'false if out objparent undef');
101
+ done();
102
102
  });
103
103
 
104
104
  test('all args defined, no after, out null obj parent -> NOT ready', function (done) {
105
105
  var task = new CbTask({ type: 'cb', f: foo, a: ['b', 'c'], out: ['c.e'] });
106
106
  var vCon = VContext.create([1, null], ['b', 'c']);
107
107
  var tasksByName = { foo: task };
108
- t.equal(task.isReady(vCon, tasksByName), false, 'false if out objparent null');
109
- done();
108
+ t.equal(task.isReady(vCon, tasksByName), false, 'false if out objparent null');
109
+ done();
110
110
  });
111
111
 
112
112
  test('all args defined, no after, out null obj.par.par -> NOT ready', function (done) {
113
113
  var task = new CbTask({ type: 'cb', f: foo, a: ['b', 'c'], out: ['c.e.f'] });
114
114
  var vCon = VContext.create([1, { e: null }], ['b', 'c']);
115
115
  var tasksByName = { foo: task };
116
- t.equal(task.isReady(vCon, tasksByName), false, 'false if out objparent null');
117
- done();
116
+ t.equal(task.isReady(vCon, tasksByName), false, 'false if out objparent null');
117
+ done();
118
118
  });
119
119
 
120
120
  test('all args defined, no after -> ready', function (done) {
@@ -122,7 +122,7 @@ if (typeof(VContext) === 'undefined') {
122
122
  var vCon = VContext.create([1, null], ['b', 'c']);
123
123
  var tasksByName = { foo: task };
124
124
  t.equal(task.isReady(vCon, tasksByName), true);
125
- done();
125
+ done();
126
126
  });
127
127
 
128
128
  test('all args defined, objprop null, no after -> ready', function (done) {
@@ -130,7 +130,7 @@ if (typeof(VContext) === 'undefined') {
130
130
  var vCon = VContext.create([1, { prop: null }], ['b', 'c']);
131
131
  var tasksByName = { foo: task };
132
132
  t.equal(task.isReady(vCon, tasksByName), true);
133
- done();
133
+ done();
134
134
  });
135
135
 
136
136
  test('all args defined, after not complete -> NOT ready', function (done) {
@@ -140,8 +140,8 @@ if (typeof(VContext) === 'undefined') {
140
140
  { type: 'cb', f: foo, a: ['b', 'c'], out: [], after: ['cat', 'bar']});
141
141
  var vCon = VContext.create([1, 2], ['b', 'c']);
142
142
  var tasksByName = { foo: task, bar: tbar, cat: tcat };
143
- t.equal(task.isReady(vCon, tasksByName), false);
144
- done();
143
+ t.equal(task.isReady(vCon, tasksByName), false);
144
+ done();
145
145
  });
146
146
 
147
147
  test('all args defined, after all complete -> ready', function (done) {
@@ -151,8 +151,8 @@ if (typeof(VContext) === 'undefined') {
151
151
  { type: 'cb', f: foo, a: ['b', 'c'], out: [], after: ['cat', 'bar']});
152
152
  var vCon = VContext.create([1, 2], ['b', 'c']);
153
153
  var tasksByName = { foo: task, bar: tbar, cat: tcat };
154
- t.equal(task.isReady(vCon, tasksByName), true);
155
- done();
154
+ t.equal(task.isReady(vCon, tasksByName), true);
155
+ done();
156
156
  });
157
157
 
158
158
  test('string without . is not method call', function (done) {
@@ -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
 
@@ -55,7 +55,7 @@ if (typeof(Deferred) === 'undefined') {
55
55
  var fn = react();
56
56
  var errors = fn.setAndValidateAST({
57
57
  inParams: ['a', 'b'],
58
- tasks: [
58
+ tasks: [
59
59
  { f: multiply, a: ['a', 'b'], out: ['c'], type: 'promise' },
60
60
  { f: add, a: ['c', 'b'], out: ['d'], type: 'promise' }
61
61
  ],
@@ -69,7 +69,7 @@ if (typeof(Deferred) === 'undefined') {
69
69
  t.equal(d, 9);
70
70
  done();
71
71
  });
72
- });
72
+ });
73
73
 
74
74
  test('using "this" in a cb function', function (done) {
75
75
  function getA(cb) {
@@ -81,11 +81,11 @@ if (typeof(Deferred) === 'undefined') {
81
81
  }, 10);
82
82
  return deferred.promise();
83
83
  }
84
-
84
+
85
85
  var fn = react();
86
86
  var errors = fn.setAndValidateAST({
87
87
  inParams: [],
88
- tasks: [
88
+ tasks: [
89
89
  { f: getA, a: [], out: ['a'], type: 'promise' }
90
90
  ],
91
91
  outTask: { a: ['a'] }
@@ -108,7 +108,7 @@ if (typeof(Deferred) === 'undefined') {
108
108
  var fn = react();
109
109
  var errors = fn.setAndValidateAST({
110
110
  inParams: ['a', 'b'],
111
- tasks: [
111
+ tasks: [
112
112
  { f: badFunc, a: ['a', 'b'], out: ['c'], type: 'promise' },
113
113
  { f: add, a: ['c', 'b'], out: ['d'], type: 'promise' }
114
114
  ],
@@ -126,7 +126,7 @@ if (typeof(Deferred) === 'undefined') {
126
126
  var fn = react();
127
127
  var errors = fn.setAndValidateAST({
128
128
  inParams: ['a', 'b'],
129
- tasks: [
129
+ tasks: [
130
130
  { f: badF2, a: ['a', 'b'], out: ['c'], type: 'promise' },
131
131
  { f: add, a: ['c', 'b'], out: ['d'], type: 'promise' }
132
132
  ],
@@ -140,4 +140,4 @@ if (typeof(Deferred) === 'undefined') {
140
140
  });
141
141
  });
142
142
 
143
- }());
143
+ }());
@@ -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
  }());