react 0.3.5 → 0.6.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 (310) hide show
  1. package/.npmignore +2 -1
  2. package/.travis.yml +4 -0
  3. package/Jakefile.js +34 -3
  4. package/README.md +34 -174
  5. package/browser-test/dist.html +90 -0
  6. package/browser-test/index.html +86 -0
  7. package/browser-test/min.html +90 -0
  8. package/dist/react.js +3291 -0
  9. package/dist/react.min.js +1 -0
  10. package/doc/advanced.md +166 -0
  11. package/doc/color-def.graffle +938 -0
  12. package/doc/color-def.png +0 -0
  13. package/doc/simple.dot +25 -0
  14. package/doc/simple.png +0 -0
  15. package/examples/{default1.js → longer-example.js} +0 -0
  16. package/examples/{default-simple.js → simple.js} +0 -0
  17. package/examples/{ast1.js → using-ast-directly.js} +4 -0
  18. package/examples/{default-events1.js → using-events1.js} +1 -1
  19. package/examples/{default-log-events.js → using-log-events.js} +1 -1
  20. package/lib/base-task.js +116 -110
  21. package/lib/cb-task.js +71 -67
  22. package/lib/core.js +120 -109
  23. package/lib/dsl.js +120 -115
  24. package/lib/error.js +44 -36
  25. package/lib/event-collector.js +81 -0
  26. package/lib/event-manager.js +66 -55
  27. package/lib/eventemitter.js +20 -0
  28. package/lib/finalcb-first-task.js +56 -53
  29. package/lib/finalcb-task.js +55 -51
  30. package/lib/id.js +18 -6
  31. package/lib/input-parser.js +49 -41
  32. package/lib/log-events.js +81 -60
  33. package/lib/parse.js +34 -25
  34. package/lib/promise-resolve.js +50 -0
  35. package/lib/promise-task.js +78 -74
  36. package/lib/react.js +59 -0
  37. package/lib/ret-task.js +59 -55
  38. package/lib/sprintf.js +18 -0
  39. package/lib/status.js +11 -2
  40. package/lib/task.js +219 -213
  41. package/lib/track-tasks.js +67 -110
  42. package/lib/validate.js +136 -136
  43. package/lib/vcon.js +78 -69
  44. package/lib/when-task.js +69 -65
  45. package/package.json +11 -9
  46. package/src/dist.build.requirejs +20 -0
  47. package/test/ast.mocha.js +136 -0
  48. package/test/cb-task.mocha.js +220 -0
  49. package/test/core-deferred.mocha.js +143 -0
  50. package/test/core-when.mocha.js +96 -0
  51. package/test/core.mocha.js +589 -0
  52. package/test/dsl.mocha.js +350 -0
  53. package/test/event-manager.mocha.js +119 -0
  54. package/test/exec-options.mocha.js +48 -0
  55. package/test/finalcb-task.mocha.js +58 -0
  56. package/test/input-parser.mocha.js +86 -0
  57. package/test/mocha.opts +2 -0
  58. package/test/module-use.mocha.js +147 -0
  59. package/test/promise-auto-resolve.mocha.js +68 -0
  60. package/test/ret-task.mocha.js +220 -0
  61. package/test/task.mocha.js +42 -0
  62. package/test/validate-cb-task.mocha.js +100 -0
  63. package/test/validate-ret-task.mocha.js +110 -0
  64. package/test/validate.mocha.js +324 -0
  65. package/test/vcon.mocha.js +193 -0
  66. package/vendor/chai/chai.js +2038 -0
  67. package/vendor/jquery/jquery-1.7.1.js +9266 -0
  68. package/vendor/jquery/jquery-1.7.1.min.js +4 -0
  69. package/vendor/mocha/mocha.css +135 -0
  70. package/vendor/mocha/mocha.js +3589 -0
  71. package/vendor/node/util.js +531 -0
  72. package/vendor/requirejs/require.js +2053 -0
  73. package/vendor/requirejs/require.min.js +33 -0
  74. package/doc/alternate-dsls.md +0 -103
  75. package/doc/default-simple.dot +0 -19
  76. package/doc/default-simple.dot.png +0 -0
  77. package/dsl/chain.js +0 -150
  78. package/dsl/fstr.js +0 -121
  79. package/dsl/pcode.js +0 -175
  80. package/examples/chain-events1.js +0 -55
  81. package/examples/chain1.js +0 -19
  82. package/examples/fstr-events1.js +0 -38
  83. package/examples/fstr1.js +0 -37
  84. package/examples/pcode1.js +0 -22
  85. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia.html +0 -675
  86. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/37px-Wiktionary-logo-en.svg.png +0 -0
  87. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/closewindow.png +0 -0
  88. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/index(1).php +0 -407
  89. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/index.php +0 -130
  90. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(1).php +0 -3
  91. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(10).php +0 -89
  92. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(2).php +0 -23
  93. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(3).php +0 -153
  94. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(4).php +0 -6
  95. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(5).php +0 -3
  96. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(6).php +0 -96
  97. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(7).php +0 -16
  98. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(8).php +0 -14
  99. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(9).php +0 -123
  100. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load.php +0 -3
  101. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/poweredby_mediawiki_88x31.png +0 -0
  102. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/saved_resource +0 -1
  103. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/search-ltr.png +0 -0
  104. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/wikimedia-button.png +0 -0
  105. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's.html +0 -1369
  106. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/121911_DobbsDigest_Cover.jpg +0 -0
  107. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/160-x-600-IMU Impact 2012.jpg +0 -0
  108. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp= +0 -68
  109. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=(1) +0 -67
  110. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=(2) +0 -2
  111. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=(3) +0 -2
  112. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=(4) +0 -8
  113. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=(5) +0 -2
  114. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461 +0 -2
  115. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(1) +0 -2
  116. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(2) +0 -2
  117. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(3) +0 -2
  118. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(4) +0 -2
  119. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(5) +0 -431
  120. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(6) +0 -2
  121. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(7) +0 -431
  122. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(8) +0 -2
  123. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(9) +0 -2
  124. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Ad0St1Sz6Sq0V0Id20628317.gif +0 -0
  125. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Ad2331174St1Sz225Sq20825250V0Id4.gif +0 -0
  126. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/AdTracImage.gif +0 -0
  127. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Default_Size_16_1x1.gif +0 -0
  128. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/FB.Share +0 -9
  129. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/addthis_widget.js +0 -2
  130. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/adlink_5242_1183459_0_154_AdId=2355270;BnId=1;itime=820768810;key=231400148+_database_231400148;link= +0 -11
  131. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/beacon.js +0 -7
  132. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/checkauth.js +0 -18
  133. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/colorbox.css +0 -49
  134. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/convert_data.js +0 -1
  135. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count(1).js +0 -5
  136. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count.js +0 -5
  137. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count.json +0 -1
  138. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dataflow1.gif +0 -0
  139. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/def.html +0 -126
  140. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/defaults.css +0 -1
  141. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/detect.js +0 -91
  142. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/devtest_left-col-slim.css +0 -30
  143. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqus.js +0 -327
  144. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusHints.css +0 -34
  145. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusHints.js +0 -8
  146. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusLoggedOff(1).css +0 -24
  147. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusLoggedOff.css +0 -24
  148. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dobbs_disqus_logo.gif +0 -0
  149. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dsqcd10c7f376188a4a2ca3e8fea2c03aeb.css +0 -1
  150. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dsqcd10c7f376188a4a2ca3e8fea2c03aeb.js +0 -1
  151. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/elqCfg.js +0 -55
  152. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/elqImg.js +0 -12
  153. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/embed.js +0 -76
  154. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/experience_util.js +0 -636
  155. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/fastbutton.html +0 -11
  156. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/ga.js +0 -51
  157. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-facebook_sm.png +0 -0
  158. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-nav.css +0 -798
  159. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-twitter_sm.png +0 -0
  160. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h_s_code_remote.js +0 -377
  161. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/hintbox_info.jpg +0 -0
  162. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/hub.1326407570.html +0 -3
  163. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/in.js +0 -76
  164. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/insight.min.js +0 -55
  165. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-1.2.6.min.js +0 -32
  166. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-1.4.2.min.js +0 -154
  167. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-ui-1.8rc3.custom.min.js +0 -374
  168. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery.colorbox-min.js +0 -4
  169. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery.min.js +0 -154
  170. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/lib.js +0 -212
  171. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/like.html +0 -214
  172. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/noavatar32.png +0 -0
  173. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/nodetag.js +0 -18
  174. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/nonSecureAnonymousFramework +0 -2913
  175. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/p.json +0 -1
  176. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/plusone.js +0 -32
  177. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/popwindow.js +0 -24
  178. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/q4OyybLB0-A.js +0 -91
  179. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/quant.js +0 -28
  180. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/qxvZoiHdpAF.css +0 -192
  181. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/reply.html +0 -160
  182. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/rss.gif +0 -0
  183. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/s.js +0 -1
  184. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource +0 -421
  185. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(1) +0 -1
  186. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(2) +0 -341
  187. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(3) +0 -127
  188. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/script84.js +0 -113
  189. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/scripts.js +0 -30
  190. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/sh72.html +0 -5
  191. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shAutoloader.js +0 -17
  192. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushAS3.js +0 -59
  193. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushAppleScript.js +0 -75
  194. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushBash.js +0 -59
  195. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCSharp.js +0 -65
  196. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushColdFusion.js +0 -100
  197. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCpp.js +0 -97
  198. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCss.js +0 -91
  199. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushDelphi.js +0 -55
  200. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushDiff.js +0 -41
  201. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushErlang.js +0 -52
  202. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushGroovy.js +0 -67
  203. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJScript.js +0 -52
  204. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJava.js +0 -57
  205. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJavaFX.js +0 -58
  206. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPerl.js +0 -72
  207. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPhp.js +0 -88
  208. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPlain.js +0 -33
  209. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPowerShell.js +0 -74
  210. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPython.js +0 -64
  211. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushRuby.js +0 -55
  212. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushSass.js +0 -94
  213. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushScala.js +0 -51
  214. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushSql.js +0 -66
  215. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushVb.js +0 -56
  216. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushXml.js +0 -69
  217. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCore.css +0 -226
  218. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCoreDefault.css +0 -333
  219. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCore_new.js +0 -17
  220. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shLegacy.js +0 -17
  221. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shThemeDefault.css +0 -117
  222. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share-button-css +0 -67
  223. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share_email_icon.gif +0 -0
  224. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share_print_icon.gif +0 -0
  225. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/sidebar.js +0 -88
  226. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/superfooter_936.css +0 -186
  227. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/svrGP.aspx +0 -0
  228. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/t.gif +0 -0
  229. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/thickbox.js +0 -343
  230. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/thread.js +0 -128
  231. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/togglediv.js +0 -15
  232. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/tweet_button.html +0 -3
  233. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/ubmtechweb_logo_sm.gif +0 -0
  234. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/upload.html +0 -91
  235. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/welcome.js +0 -7
  236. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/widget74.css +0 -1
  237. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/widgets.js +0 -40
  238. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia.html +0 -904
  239. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/50px-Question_book-new.svg.png +0 -0
  240. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/closewindow.png +0 -0
  241. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/index(1).php +0 -407
  242. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/index.php +0 -130
  243. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(1).php +0 -3
  244. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(10).php +0 -89
  245. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(2).php +0 -23
  246. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(3).php +0 -153
  247. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(4).php +0 -6
  248. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(5).php +0 -3
  249. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(6).php +0 -96
  250. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(7).php +0 -16
  251. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(8).php +0 -14
  252. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(9).php +0 -123
  253. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load.php +0 -3
  254. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/poweredby_mediawiki_88x31.png +0 -0
  255. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/saved_resource +0 -1
  256. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/search-ltr.png +0 -0
  257. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/wikimedia-button.png +0 -0
  258. package/externalDocs/The Step of the Conductor - How To Node - NodeJS.html +0 -113
  259. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/6654_111305815684_541245684_2583159_5383291_n_normal.jpg +0 -0
  260. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/MARC3_normal.jpg +0 -2
  261. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/beacon.js +0 -7
  262. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/c953ddd239707998340e1a6fbb3eeb46 +0 -0
  263. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/c953ddd239707998340e1a6fbb3eeb46_normal.jpeg +0 -0
  264. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/clouds2_normal.jpg +0 -0
  265. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/count.json +0 -1
  266. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/def.html +0 -126
  267. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/defaults.css +0 -1
  268. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/disqus.js +0 -327
  269. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/dsq7884a9652e94555c70f96b6be63be216.css +0 -1
  270. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/dsq7884a9652e94555c70f96b6be63be216.js +0 -66
  271. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/embed.js +0 -76
  272. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/example1.dot +0 -0
  273. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/ga.js +0 -51
  274. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/get_num_replies.js +0 -79
  275. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/hub.1326407570.html +0 -3
  276. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/lib.js +0 -212
  277. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/noavatar32.png +0 -0
  278. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/quant.js +0 -28
  279. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/reply.html +0 -160
  280. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/t.gif +0 -0
  281. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/thread.js +0 -128
  282. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/tweet_button.1326407570.html +0 -3
  283. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/twitter_normal.jpg +0 -2
  284. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/upload.html +0 -91
  285. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/widgets.js +0 -40
  286. package/jake-tasks/jake-test.js +0 -64
  287. package/promise-resolve.js +0 -35
  288. package/react.js +0 -8
  289. package/test/ast.test.js +0 -69
  290. package/test/cb-task.test.js +0 -197
  291. package/test/core-deferred.test.js +0 -134
  292. package/test/core-promised.test.js +0 -132
  293. package/test/core-when.test.js +0 -84
  294. package/test/core.test.js +0 -568
  295. package/test/dsl.test.js +0 -330
  296. package/test/dsl/chain.test.js +0 -324
  297. package/test/dsl/fstr.test.js +0 -300
  298. package/test/dsl/pcode.test.js +0 -448
  299. package/test/event-manager.test.js +0 -102
  300. package/test/exec-options.test.js +0 -33
  301. package/test/finalcb-task.test.js +0 -38
  302. package/test/input-parser.test.js +0 -66
  303. package/test/module-use.test.js +0 -131
  304. package/test/promise-auto-resolve.test.js +0 -51
  305. package/test/ret-task.test.js +0 -199
  306. package/test/task.test.js +0 -21
  307. package/test/validate-cb-task.test.js +0 -74
  308. package/test/validate-ret-task.test.js +0 -83
  309. package/test/validate.test.js +0 -295
  310. package/test/vcon.test.js +0 -173
@@ -0,0 +1,350 @@
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, new Error('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, new Error('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, new Error('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, 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'));
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, 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'));
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, new Error('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, new Error(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
+ }());
@@ -0,0 +1,119 @@
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
+ }());