react 0.6.3 → 0.9.0-rc1
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/README.md +10 -222
- package/addons.js +1 -0
- package/lib/AutoFocusMixin.js +30 -0
- package/lib/CSSCore.js +115 -0
- package/lib/CSSProperty.js +121 -0
- package/lib/CSSPropertyOperations.js +97 -0
- package/lib/ChangeEventPlugin.js +387 -0
- package/lib/ClientReactRootIndex.js +30 -0
- package/lib/CompositionEventPlugin.js +260 -0
- package/lib/DOMChildrenOperations.js +165 -0
- package/lib/DOMProperty.js +268 -0
- package/lib/DOMPropertyOperations.js +181 -0
- package/lib/Danger.js +187 -0
- package/lib/DefaultDOMPropertyConfig.js +197 -0
- package/lib/DefaultEventPluginOrder.js +44 -0
- package/lib/EnterLeaveEventPlugin.js +145 -0
- package/lib/EventConstants.js +76 -0
- package/lib/EventListener.js +69 -0
- package/lib/EventPluginHub.js +291 -0
- package/lib/EventPluginRegistry.js +260 -0
- package/lib/EventPluginUtils.js +214 -0
- package/lib/EventPropagators.js +143 -0
- package/lib/ExecutionEnvironment.js +44 -0
- package/lib/LinkedStateMixin.js +46 -0
- package/lib/LinkedValueUtils.js +161 -0
- package/lib/MobileSafariClickEventPlugin.js +63 -0
- package/lib/PooledClass.js +119 -0
- package/lib/React.js +95 -0
- package/lib/ReactCSSTransitionGroup.js +65 -0
- package/lib/ReactCSSTransitionGroupChild.js +138 -0
- package/lib/ReactChildren.js +132 -0
- package/lib/ReactComponent.js +550 -0
- package/lib/ReactComponentBrowserEnvironment.js +158 -0
- package/lib/ReactComponentEnvironment.js +26 -0
- package/lib/ReactCompositeComponent.js +1455 -0
- package/lib/ReactContext.js +67 -0
- package/lib/ReactCurrentOwner.js +39 -0
- package/lib/ReactDOM.js +207 -0
- package/lib/ReactDOMButton.js +68 -0
- package/lib/ReactDOMComponent.js +399 -0
- package/lib/ReactDOMForm.js +59 -0
- package/lib/ReactDOMIDOperations.js +218 -0
- package/lib/ReactDOMImg.js +58 -0
- package/lib/ReactDOMInput.js +181 -0
- package/lib/ReactDOMOption.js +51 -0
- package/lib/ReactDOMSelect.js +179 -0
- package/lib/ReactDOMSelection.js +189 -0
- package/lib/ReactDOMTextarea.js +140 -0
- package/lib/ReactDefaultBatchingStrategy.js +75 -0
- package/lib/ReactDefaultInjection.js +115 -0
- package/lib/ReactDefaultPerf.js +244 -0
- package/lib/ReactDefaultPerfAnalysis.js +199 -0
- package/lib/ReactErrorUtils.js +37 -0
- package/lib/ReactEventEmitter.js +337 -0
- package/lib/ReactEventEmitterMixin.js +57 -0
- package/lib/ReactEventTopLevelCallback.js +109 -0
- package/lib/ReactInjection.js +39 -0
- package/lib/ReactInputSelection.js +140 -0
- package/lib/ReactInstanceHandles.js +338 -0
- package/lib/ReactLink.js +54 -0
- package/lib/ReactMarkupChecksum.js +53 -0
- package/lib/ReactMount.js +641 -0
- package/lib/ReactMountReady.js +95 -0
- package/lib/ReactMultiChild.js +425 -0
- package/lib/ReactMultiChildUpdateTypes.js +38 -0
- package/lib/ReactOwner.js +154 -0
- package/lib/ReactPerf.js +85 -0
- package/lib/ReactPropTransferer.js +147 -0
- package/lib/ReactPropTypeLocationNames.js +31 -0
- package/lib/ReactPropTypeLocations.js +29 -0
- package/lib/ReactPropTypes.js +359 -0
- package/lib/ReactPutListenerQueue.js +61 -0
- package/lib/ReactReconcileTransaction.js +181 -0
- package/lib/ReactRootIndex.js +36 -0
- package/lib/ReactServerRendering.js +59 -0
- package/lib/ReactStateSetters.js +111 -0
- package/lib/ReactTextComponent.js +99 -0
- package/lib/ReactTransitionChildMapping.js +106 -0
- package/lib/ReactTransitionEvents.js +97 -0
- package/lib/ReactTransitionGroup.js +187 -0
- package/lib/ReactUpdates.js +148 -0
- package/lib/ReactWithAddons.js +46 -0
- package/lib/SelectEventPlugin.js +200 -0
- package/lib/ServerReactRootIndex.js +36 -0
- package/lib/SimpleEventPlugin.js +413 -0
- package/lib/SyntheticClipboardEvent.js +51 -0
- package/lib/SyntheticCompositionEvent.js +51 -0
- package/lib/SyntheticDragEvent.js +44 -0
- package/lib/SyntheticEvent.js +164 -0
- package/lib/SyntheticFocusEvent.js +44 -0
- package/lib/SyntheticKeyboardEvent.js +58 -0
- package/lib/SyntheticMouseEvent.js +85 -0
- package/lib/SyntheticTouchEvent.js +50 -0
- package/lib/SyntheticUIEvent.js +45 -0
- package/lib/SyntheticWheelEvent.js +66 -0
- package/lib/Transaction.js +276 -0
- package/lib/ViewportMetrics.js +37 -0
- package/lib/accumulate.js +54 -0
- package/lib/adler32.js +39 -0
- package/lib/cloneWithProps.js +59 -0
- package/lib/containsNode.js +49 -0
- package/lib/copyProperties.js +54 -0
- package/lib/createArrayFrom.js +91 -0
- package/lib/createFullPageComponent.js +63 -0
- package/lib/createNodesFromMarkup.js +93 -0
- package/lib/createObjectFrom.js +61 -0
- package/lib/cx.js +44 -0
- package/lib/dangerousStyleValue.js +57 -0
- package/lib/emptyFunction.js +43 -0
- package/lib/escapeTextForBrowser.js +47 -0
- package/lib/flattenChildren.js +57 -0
- package/lib/forEachAccumulated.js +36 -0
- package/lib/getActiveElement.js +34 -0
- package/lib/getEventKey.js +85 -0
- package/lib/getEventTarget.js +36 -0
- package/lib/getMarkupWrap.js +118 -0
- package/lib/getNodeForCharacterOffset.js +80 -0
- package/lib/getReactRootElementInContainer.js +40 -0
- package/lib/getTextContentAccessor.js +42 -0
- package/lib/getUnboundedScrollPosition.js +45 -0
- package/lib/hyphenate.js +35 -0
- package/lib/invariant.js +62 -0
- package/lib/isEventSupported.js +70 -0
- package/lib/isNode.js +33 -0
- package/lib/isTextInputElement.js +49 -0
- package/lib/isTextNode.js +30 -0
- package/lib/joinClasses.js +44 -0
- package/lib/keyMirror.js +58 -0
- package/lib/keyOf.js +41 -0
- package/lib/memoizeStringOnly.js +39 -0
- package/lib/merge.js +37 -0
- package/lib/mergeHelpers.js +136 -0
- package/lib/mergeInto.js +45 -0
- package/lib/mixInto.js +34 -0
- package/lib/objMap.js +47 -0
- package/lib/objMapKeyVal.js +47 -0
- package/lib/onlyChild.js +43 -0
- package/lib/performanceNow.js +42 -0
- package/lib/shallowEqual.js +49 -0
- package/lib/shouldUpdateReactComponent.js +58 -0
- package/lib/toArray.js +75 -0
- package/lib/traverseAllChildren.js +189 -0
- package/lib/warning.js +40 -0
- package/package.json +32 -21
- package/react.js +1 -0
- package/.npmignore +0 -7
- package/.travis.yml +0 -5
- package/Jakefile.js +0 -39
- package/LICENSE +0 -19
- package/browser-test/dist.html +0 -90
- package/browser-test/index.html +0 -86
- package/browser-test/min.html +0 -90
- package/dist/react.js +0 -3107
- package/dist/react.min.js +0 -22
- package/doc/advanced.md +0 -174
- package/doc/color-def.graffle +0 -938
- package/doc/color-def.png +0 -0
- package/doc/simple.dot +0 -25
- package/doc/simple.png +0 -0
- package/examples/longer-example.js +0 -41
- package/examples/simple.js +0 -45
- package/examples/using-ast-directly.js +0 -30
- package/examples/using-events1.js +0 -79
- package/examples/using-log-events.js +0 -43
- package/lib/base-task.js +0 -123
- package/lib/cb-task.js +0 -84
- package/lib/core.js +0 -138
- package/lib/dsl.js +0 -138
- package/lib/error.js +0 -55
- package/lib/event-collector.js +0 -81
- package/lib/event-manager.js +0 -89
- package/lib/eventemitter.js +0 -20
- package/lib/finalcb-first-task.js +0 -68
- package/lib/finalcb-task.js +0 -65
- package/lib/id.js +0 -22
- package/lib/input-parser.js +0 -56
- package/lib/log-events.js +0 -101
- package/lib/parse.js +0 -41
- package/lib/promise-resolve.js +0 -50
- package/lib/promise-task.js +0 -93
- package/lib/react.js +0 -59
- package/lib/ret-task.js +0 -71
- package/lib/sprintf.js +0 -18
- package/lib/status.js +0 -14
- package/lib/task.js +0 -251
- package/lib/track-tasks.js +0 -74
- package/lib/validate.js +0 -159
- package/lib/vcon.js +0 -90
- package/lib/when-task.js +0 -85
- package/src/dist.build.requirejs +0 -20
- package/test/ast.mocha.js +0 -136
- package/test/cb-task.mocha.js +0 -220
- package/test/core-deferred.mocha.js +0 -143
- package/test/core-when.mocha.js +0 -96
- package/test/core.mocha.js +0 -589
- package/test/dsl.mocha.js +0 -350
- package/test/event-manager.mocha.js +0 -119
- package/test/exec-options.mocha.js +0 -48
- package/test/finalcb-task.mocha.js +0 -58
- package/test/input-parser.mocha.js +0 -86
- package/test/log-events.mocha.js +0 -88
- package/test/mocha.opts +0 -2
- package/test/module-use.mocha.js +0 -147
- package/test/promise-auto-resolve.mocha.js +0 -68
- package/test/ret-task.mocha.js +0 -220
- package/test/task.mocha.js +0 -42
- package/test/validate-cb-task.mocha.js +0 -100
- package/test/validate-ret-task.mocha.js +0 -110
- package/test/validate.mocha.js +0 -324
- package/test/vcon.mocha.js +0 -193
- package/vendor/chai/chai.js +0 -2038
- package/vendor/jquery/jquery-1.7.1.js +0 -9266
- package/vendor/jquery/jquery-1.7.1.min.js +0 -4
- package/vendor/mocha/mocha.css +0 -135
- package/vendor/mocha/mocha.js +0 -3589
- package/vendor/node/util.js +0 -531
- package/vendor/requirejs/require.js +0 -2053
- package/vendor/requirejs/require.min.js +0 -33
package/test/dsl.mocha.js
DELETED
|
@@ -1,350 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
/*global react:true sprintf:true */
|
|
3
|
-
|
|
4
|
-
if (typeof(chai) === 'undefined') {
|
|
5
|
-
var chai = require('chai');
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
if (typeof(react) === 'undefined') {
|
|
9
|
-
var react = require('../'); //require('react');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
if (typeof(sprintf) === 'undefined') {
|
|
13
|
-
var sprintf = require('../lib/sprintf');
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
(function () {
|
|
17
|
-
|
|
18
|
-
var t = chai.assert;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
Testing DSL
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
suite('dsl');
|
|
25
|
-
|
|
26
|
-
function falpha() { }
|
|
27
|
-
function fbeta() { }
|
|
28
|
-
|
|
29
|
-
test('module exports is a fn with properties', function (done) {
|
|
30
|
-
t.isFunction(react, 'has define by DSL method'); //
|
|
31
|
-
t.isFunction(react.selectFirst, 'has selectFirst define method');
|
|
32
|
-
done();
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
test('no arguments -> empty name, inParams, tasks, outTask', function (done) {
|
|
36
|
-
var r = react();
|
|
37
|
-
t.equal(r.ast.name.slice(0, 'flow_'.length), 'flow_', 'generated flow name should start with flow_');
|
|
38
|
-
t.deepEqual(r.ast.inParams, []);
|
|
39
|
-
t.deepEqual(r.ast.tasks, []);
|
|
40
|
-
t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
|
|
41
|
-
done();
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
test('empty first string -> empty name, inParams, tasks, outTask', function (done) {
|
|
46
|
-
var r = react('');
|
|
47
|
-
t.equal(r.ast.name.slice(0, 'flow_'.length), 'flow_', 'generated flow name should start with flow_');
|
|
48
|
-
t.deepEqual(r.ast.inParams, []);
|
|
49
|
-
t.deepEqual(r.ast.tasks, []);
|
|
50
|
-
t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
|
|
51
|
-
done();
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
test('single first string -> name, inParams["foo"], empty tasks, outTask', function (done) {
|
|
56
|
-
var r = react('foo');
|
|
57
|
-
t.equal(r.ast.name, 'foo');
|
|
58
|
-
t.deepEqual(r.ast.inParams, []);
|
|
59
|
-
t.deepEqual(r.ast.tasks, []);
|
|
60
|
-
t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
|
|
61
|
-
done();
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
test('triple first string -> inParams["foo", "bar", "baz"], empty tasks, outTask',
|
|
65
|
-
function (done) {
|
|
66
|
-
var r = react('myName', ' foo, bar,baz ');
|
|
67
|
-
t.equal(r.ast.name, 'myName');
|
|
68
|
-
t.deepEqual(r.ast.inParams, ['foo', 'bar', 'baz']);
|
|
69
|
-
t.deepEqual(r.ast.tasks, []);
|
|
70
|
-
t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
|
|
71
|
-
done();
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
test('single task, single out params', function (done) {
|
|
75
|
-
var r = react('myName', 'cb -> err, c',
|
|
76
|
-
falpha, 'cb -> err, c'
|
|
77
|
-
);
|
|
78
|
-
t.deepEqual(r.ast.inParams, []);
|
|
79
|
-
t.deepEqual(r.ast.tasks, [
|
|
80
|
-
{ f: falpha, a: [], out: ['c'], type: 'cb', name: 'falpha'}
|
|
81
|
-
]);
|
|
82
|
-
t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
|
|
83
|
-
done();
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
test('single task, err and out params', function (done) {
|
|
87
|
-
var r = react('myName', 'cb -> err, c',
|
|
88
|
-
falpha, 'cb -> err, c'
|
|
89
|
-
);
|
|
90
|
-
t.deepEqual(r.ast.inParams, []);
|
|
91
|
-
t.deepEqual(r.ast.tasks, [
|
|
92
|
-
{ f: falpha, a: [], out: ['c'], type: 'cb', name: 'falpha'}
|
|
93
|
-
]);
|
|
94
|
-
t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
|
|
95
|
-
done();
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
test('using - with literal string', function (done) {
|
|
99
|
-
var r = react('myName', '"hello-world", cb -> err, c',
|
|
100
|
-
falpha, '"another-string", cb -> err, c'
|
|
101
|
-
);
|
|
102
|
-
t.deepEqual(r.ast.inParams, ['"hello-world"']);
|
|
103
|
-
t.deepEqual(r.ast.tasks, [
|
|
104
|
-
{ f: falpha, a: ['"another-string"'], out: ['c'], type: 'cb', name: 'falpha'}
|
|
105
|
-
]);
|
|
106
|
-
t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
|
|
107
|
-
done();
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
test('single task, ERR and out params', function (done) {
|
|
111
|
-
var r = react('myName', 'cb -> ERR, c',
|
|
112
|
-
falpha, 'cb -> ERR, c'
|
|
113
|
-
);
|
|
114
|
-
t.deepEqual(r.ast.inParams, []);
|
|
115
|
-
t.deepEqual(r.ast.tasks, [
|
|
116
|
-
{ f: falpha, a: [], out: ['c'], type: 'cb', name: 'falpha'}
|
|
117
|
-
]);
|
|
118
|
-
t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
|
|
119
|
-
done();
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
test('cb used in defs is simply ignored', function (done) {
|
|
123
|
-
var r = react('myName', 'a, b, cb -> err, c',
|
|
124
|
-
falpha, 'a, b, cb -> err, c'
|
|
125
|
-
);
|
|
126
|
-
t.deepEqual(r.ast.inParams, ['a', 'b']);
|
|
127
|
-
t.deepEqual(r.ast.tasks, [
|
|
128
|
-
{ f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
|
|
129
|
-
]);
|
|
130
|
-
t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
|
|
131
|
-
done();
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
test('callback used in defs is simply ignored', function (done) {
|
|
135
|
-
var r = react('myName', 'a, b, callback -> err, c',
|
|
136
|
-
falpha, 'a, b, callback -> err, c'
|
|
137
|
-
);
|
|
138
|
-
t.deepEqual(r.ast.inParams, ['a', 'b']);
|
|
139
|
-
t.deepEqual(r.ast.tasks, [
|
|
140
|
-
{ f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
|
|
141
|
-
]);
|
|
142
|
-
t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
|
|
143
|
-
done();
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
test('two inputs, two tasks, two out params', function (done) {
|
|
147
|
-
var r = react('myName', 'a, b, cb -> err, c, d',
|
|
148
|
-
falpha, 'a, b, cb -> err, c',
|
|
149
|
-
fbeta, 'a, b, cb -> err, d, e'
|
|
150
|
-
);
|
|
151
|
-
t.deepEqual(r.ast.inParams, ['a', 'b']);
|
|
152
|
-
t.deepEqual(r.ast.tasks, [
|
|
153
|
-
{ f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
|
|
154
|
-
{ f: fbeta, a: ['a', 'b'], out: ['d', 'e'], type: 'cb', name: 'fbeta'}
|
|
155
|
-
]);
|
|
156
|
-
t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
|
|
157
|
-
done();
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
test('two inputs, two tasks, two out params, options', function (done) {
|
|
161
|
-
var r = react('myName', 'a, b, cb -> err, c, d',
|
|
162
|
-
{ otherOptFoo: 'foo'}, // main flow options
|
|
163
|
-
falpha, 'a, b, cb -> err, c',
|
|
164
|
-
fbeta, 'a, b, cb -> err, d, e'
|
|
165
|
-
);
|
|
166
|
-
t.deepEqual(r.ast.inParams, ['a', 'b']);
|
|
167
|
-
t.deepEqual(r.ast.tasks, [
|
|
168
|
-
{ f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
|
|
169
|
-
{ f: fbeta, a: ['a', 'b'], out: ['d', 'e'], type: 'cb', name: 'fbeta'}
|
|
170
|
-
]);
|
|
171
|
-
t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
|
|
172
|
-
t.equal(r.ast.name, 'myName', 'name should match');
|
|
173
|
-
t.equal(r.ast.otherOptFoo, 'foo', 'other options should pass through');
|
|
174
|
-
done();
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
test('two inputs, two mixed tasks, two out params', function (done) {
|
|
178
|
-
var r = react('myName', 'a, b, cb -> err, c, d',
|
|
179
|
-
falpha, 'a, b, cb -> err, c',
|
|
180
|
-
fbeta, 'a, b -> d'
|
|
181
|
-
);
|
|
182
|
-
t.deepEqual(r.ast.inParams, ['a', 'b']);
|
|
183
|
-
t.deepEqual(r.ast.tasks, [
|
|
184
|
-
{ f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
|
|
185
|
-
{ f: fbeta, a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
|
|
186
|
-
]);
|
|
187
|
-
t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
|
|
188
|
-
done();
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
test('two inputs, two mixed tasks, two out params, opts', function (done) {
|
|
193
|
-
var r = react('myName', 'a, b, cb -> err, c, d',
|
|
194
|
-
falpha, 'a, cb -> err, c', { after: fbeta },
|
|
195
|
-
fbeta, 'a, b -> d'
|
|
196
|
-
);
|
|
197
|
-
t.deepEqual(r.ast.inParams, ['a', 'b']);
|
|
198
|
-
t.deepEqual(r.ast.tasks, [
|
|
199
|
-
{ after: ['fbeta'], f: falpha, a: ['a'], out: ['c'], type: 'cb', name: 'falpha'},
|
|
200
|
-
{ f: fbeta, a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
|
|
201
|
-
]);
|
|
202
|
-
t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
|
|
203
|
-
done();
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
// Object use
|
|
208
|
-
test('object prop task params', function (done) {
|
|
209
|
-
var r = react('myName', 'a, b, cb -> err, c, e',
|
|
210
|
-
falpha, 'a, b.cat, cb -> err, c',
|
|
211
|
-
fbeta, 'c.dog, b -> d',
|
|
212
|
-
'd.egg', 'c, cb -> err, e'
|
|
213
|
-
);
|
|
214
|
-
t.deepEqual(r.ast.inParams, ['a', 'b']);
|
|
215
|
-
t.deepEqual(r.ast.tasks, [
|
|
216
|
-
{ f: falpha, a: ['a', 'b.cat'], out: ['c'], type: 'cb', name: 'falpha'},
|
|
217
|
-
{ f: fbeta, a: ['c.dog', 'b'], out: ['d'], type: 'ret', name: 'fbeta'},
|
|
218
|
-
{ f: 'd.egg', a: ['c'], out: ['e'], type: 'cb', name: 'd.egg'}
|
|
219
|
-
]);
|
|
220
|
-
t.deepEqual(r.ast.outTask, { a: ['c', 'e'], type: 'finalcb' });
|
|
221
|
-
done();
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
// Errors
|
|
225
|
-
|
|
226
|
-
test('missing name, throws error', function (done) {
|
|
227
|
-
var fn = function () {
|
|
228
|
-
var r = react('cb -> err, c',
|
|
229
|
-
falpha, 'cb -> err, c'
|
|
230
|
-
);
|
|
231
|
-
};
|
|
232
|
-
t.throws(fn, 'first flow parameter should be the flow name, but found in/out def: cb -> err, c');
|
|
233
|
-
done();
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
test('missing err in flow in/out - force for consistency, throw error', function (done) {
|
|
237
|
-
var fn = function () {
|
|
238
|
-
var r = react('myname', 'cb -> c', // missing err
|
|
239
|
-
falpha, 'cb -> err, c'
|
|
240
|
-
);
|
|
241
|
-
};
|
|
242
|
-
t.throws(fn, 'callback specified, but first out param was not "err", use for clarity. Found in/out def: cb -> c');
|
|
243
|
-
done();
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
test('missing err in task in/out - force for consistency, throw error', function (done) {
|
|
247
|
-
var fn = function () {
|
|
248
|
-
var r = react('myname', 'cb -> err, c',
|
|
249
|
-
falpha, 'cb -> c' // missing err
|
|
250
|
-
);
|
|
251
|
-
};
|
|
252
|
-
t.throws(fn, 'callback specified, but first out param was not "err", use for clarity. Found in/out def: cb -> c');
|
|
253
|
-
done();
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
test('found err, but missing cb/callback in flow in/out - force for consistency, throw error', function (done) {
|
|
257
|
-
var fn = function () {
|
|
258
|
-
var r = react('myname', 'a -> err, c', // missing cb
|
|
259
|
-
falpha, 'cb -> err, c'
|
|
260
|
-
);
|
|
261
|
-
};
|
|
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
|
-
done();
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
test('found err, but missing cb/callback in task in/out - force for consistency, throw error', function (done) {
|
|
267
|
-
var fn = function () {
|
|
268
|
-
var r = react('myname', 'cb -> err, c',
|
|
269
|
-
falpha, 'a -> err, c' // missing cb
|
|
270
|
-
);
|
|
271
|
-
};
|
|
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
|
-
done();
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
test('extra arg throws error', function (done) {
|
|
277
|
-
var fn = function () {
|
|
278
|
-
var r = react('myName', 'a, b, cb -> err, c, d',
|
|
279
|
-
falpha, 'a, cb -> err, c', { after: fbeta },
|
|
280
|
-
fbeta, 'a, b -> returns d',
|
|
281
|
-
'extraBadArg'
|
|
282
|
-
);
|
|
283
|
-
};
|
|
284
|
-
t.throws(fn, 'extra unmatched task arg: extraBadArg');
|
|
285
|
-
done();
|
|
286
|
-
});
|
|
287
|
-
|
|
288
|
-
test('not enough args throws error', function (done) {
|
|
289
|
-
var fn = function () {
|
|
290
|
-
var r = react('myName', 'a, b, cb -> err, c, d',
|
|
291
|
-
falpha, 'a, cb -> err, c', { after: fbeta },
|
|
292
|
-
fbeta
|
|
293
|
-
);
|
|
294
|
-
};
|
|
295
|
-
t.throws(fn, sprintf('extra unmatched task arg: %s', fbeta));
|
|
296
|
-
done();
|
|
297
|
-
});
|
|
298
|
-
|
|
299
|
-
test('long example', function (done) {
|
|
300
|
-
/*jshint white: false */
|
|
301
|
-
|
|
302
|
-
function loadUser(uid, cb){ setTimeout(cb, 100, null, "User"+uid); }
|
|
303
|
-
function loadFile(filename, cb){ setTimeout(cb, 100, null, 'Filedata'+filename); }
|
|
304
|
-
function markdown(filedata) { return 'html'+filedata; }
|
|
305
|
-
function prepareDirectory(outDirname, cb){ setTimeout(cb, 200, null, 'dircreated-'+outDirname); }
|
|
306
|
-
function writeOutput(html, user, cb){ setTimeout(cb, 300, null, html+'_bytesWritten'); }
|
|
307
|
-
function loadEmailTemplate(cb) { setTimeout(cb, 50, null, 'emailmd'); }
|
|
308
|
-
function customizeEmail(user, emailHtml) { return 'cust-'+user+emailHtml; }
|
|
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
|
-
);
|
|
321
|
-
loadAndSave('file.md', 100, '/tmp/foo', function (err, html, user, bytesWritten) { // executing the flow
|
|
322
|
-
t.equal(err, null);
|
|
323
|
-
t.equal(html, 'htmlFiledatafile.md');
|
|
324
|
-
t.equal(user, 'User100');
|
|
325
|
-
t.equal(bytesWritten, 'htmlFiledatafile.md_bytesWritten');
|
|
326
|
-
done();
|
|
327
|
-
});
|
|
328
|
-
});
|
|
329
|
-
|
|
330
|
-
// selectFirst
|
|
331
|
-
|
|
332
|
-
test('selectFirst', function (done) {
|
|
333
|
-
var r = react.selectFirst('myName', 'a, b, cb -> err, c',
|
|
334
|
-
{ otherOptFoo: 'foo'}, // main options
|
|
335
|
-
falpha, 'a, b, cb -> err, c',
|
|
336
|
-
fbeta, 'a, b -> c'
|
|
337
|
-
);
|
|
338
|
-
t.equal(r.ast.name, 'myName');
|
|
339
|
-
t.deepEqual(r.ast.inParams, ['a', 'b']);
|
|
340
|
-
t.deepEqual(r.ast.tasks, [
|
|
341
|
-
{ f: falpha, a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
|
|
342
|
-
{ f: fbeta, a: ['a', 'b'], out: ['c'], type: 'ret', name: 'fbeta', after: ['falpha']}
|
|
343
|
-
]);
|
|
344
|
-
t.deepEqual(r.ast.outTask, { type: 'finalcbFirst', a: ['c'] });
|
|
345
|
-
t.equal(r.ast.name, 'myName', 'name should match if supplied');
|
|
346
|
-
t.equal(r.ast.otherOptFoo, 'foo', 'other options should pass through');
|
|
347
|
-
done();
|
|
348
|
-
});
|
|
349
|
-
|
|
350
|
-
}());
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
/*global react:true EventManager:true */
|
|
3
|
-
|
|
4
|
-
if (typeof(chai) === 'undefined') {
|
|
5
|
-
var chai = require('chai');
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
if (typeof(react) === 'undefined') {
|
|
9
|
-
var react = require('../'); //require('react');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
if (typeof(EventManager) === 'undefined') {
|
|
13
|
-
var EventManager = require('../lib/event-manager.js');
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
(function () {
|
|
17
|
-
|
|
18
|
-
var t = chai.assert;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
Testing EventManager
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
suite('event-manager');
|
|
25
|
-
|
|
26
|
-
test('Event Manager is disabled by default', function (done) {
|
|
27
|
-
var em = EventManager.create();
|
|
28
|
-
t.isFalse(em.isEnabled(), 'should be falsey by default');
|
|
29
|
-
done();
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
test('Event Manager enabled when a listener if registered', function (done) {
|
|
33
|
-
var em = EventManager.create();
|
|
34
|
-
em.on('foo', function () { });
|
|
35
|
-
t.isTrue(em.isEnabled(), 'should be truthy');
|
|
36
|
-
done();
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
test('Event Manager emits events', function (done) {
|
|
40
|
-
var em = EventManager.create();
|
|
41
|
-
em.on('foo', function (data) {
|
|
42
|
-
t.equal(data, 'hello');
|
|
43
|
-
done();
|
|
44
|
-
});
|
|
45
|
-
em.emit('foo', 'hello');
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
test('Event Manager emits events, wildcarded listener', function (done) {
|
|
49
|
-
var em = EventManager.create();
|
|
50
|
-
em.on('foo.*', function (data) {
|
|
51
|
-
t.equal(data, 'hello-world');
|
|
52
|
-
done();
|
|
53
|
-
});
|
|
54
|
-
em.emit('foo.bar', 'hello-world');
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
test('Event Manager emits events, all wildcarded listener', function (done) {
|
|
58
|
-
var em = EventManager.create();
|
|
59
|
-
em.on('*', function (data) {
|
|
60
|
-
t.equal(data, 'hello-world');
|
|
61
|
-
done();
|
|
62
|
-
});
|
|
63
|
-
em.emit('foo.bar', 'hello-world');
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
test('Event Manager emits event with three args', function (done) {
|
|
67
|
-
var em = EventManager.create();
|
|
68
|
-
em.on('foo', function (data, data2, data3) {
|
|
69
|
-
t.equal(data, 'hello');
|
|
70
|
-
t.equal(data2, 'world');
|
|
71
|
-
t.equal(data3, 100);
|
|
72
|
-
done();
|
|
73
|
-
});
|
|
74
|
-
em.emit('foo', 'hello', 'world', 100);
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
test('Event Manager with a parentListener will receive events', function (done) {
|
|
78
|
-
var parentEm = EventManager.create();
|
|
79
|
-
var em = EventManager.create();
|
|
80
|
-
em.parent = parentEm;
|
|
81
|
-
parentEm.on('foo', function (data) {
|
|
82
|
-
t.equal(data, 'world');
|
|
83
|
-
done();
|
|
84
|
-
});
|
|
85
|
-
em.emit('foo', 'world');
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
test('Event Manager w/listening grandparent will receive events', function (done) {
|
|
89
|
-
var grandEm = EventManager.create();
|
|
90
|
-
var parentEm = EventManager.create();
|
|
91
|
-
parentEm.parent = grandEm;
|
|
92
|
-
var em = EventManager.create();
|
|
93
|
-
em.parent = parentEm;
|
|
94
|
-
grandEm.on('foo', function (data) {
|
|
95
|
-
t.equal(data, 'world');
|
|
96
|
-
done();
|
|
97
|
-
});
|
|
98
|
-
em.emit('foo', 'world');
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
test('Event Manager all parents w/listeners will receive events', function (done) {
|
|
102
|
-
var grandEm = EventManager.create();
|
|
103
|
-
var parentEm = EventManager.create();
|
|
104
|
-
parentEm.parent = grandEm;
|
|
105
|
-
var em = EventManager.create();
|
|
106
|
-
em.parent = parentEm;
|
|
107
|
-
var expectedCalls = 2;
|
|
108
|
-
function recData(data) {
|
|
109
|
-
t.equal(data, 'hello');
|
|
110
|
-
expectedCalls -= 1;
|
|
111
|
-
if (!expectedCalls) done();
|
|
112
|
-
}
|
|
113
|
-
grandEm.on('bar', recData);
|
|
114
|
-
parentEm.on('bar', recData);
|
|
115
|
-
em.on('bar', recData);
|
|
116
|
-
em.emit('bar', 'hello');
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
}());
|