ruote 2.2.0 → 2.3.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 (305) hide show
  1. data/CHANGELOG.txt +166 -1
  2. data/CREDITS.txt +36 -17
  3. data/LICENSE.txt +1 -1
  4. data/README.rdoc +1 -7
  5. data/Rakefile +38 -29
  6. data/TODO.txt +93 -52
  7. data/lib/ruote-fs.rb +3 -0
  8. data/lib/ruote.rb +5 -1
  9. data/lib/ruote/context.rb +140 -35
  10. data/lib/ruote/dashboard.rb +1247 -0
  11. data/lib/ruote/{engine → dboard}/process_error.rb +22 -2
  12. data/lib/ruote/dboard/process_status.rb +587 -0
  13. data/lib/ruote/engine.rb +6 -871
  14. data/lib/ruote/exp/command.rb +7 -2
  15. data/lib/ruote/exp/commanded.rb +2 -2
  16. data/lib/ruote/exp/condition.rb +38 -13
  17. data/lib/ruote/exp/fe_add_branches.rb +1 -1
  18. data/lib/ruote/exp/fe_apply.rb +1 -1
  19. data/lib/ruote/exp/fe_await.rb +357 -0
  20. data/lib/ruote/exp/fe_cancel_process.rb +17 -3
  21. data/lib/ruote/exp/fe_command.rb +8 -4
  22. data/lib/ruote/exp/fe_concurrence.rb +218 -18
  23. data/lib/ruote/exp/fe_concurrent_iterator.rb +71 -10
  24. data/lib/ruote/exp/fe_cron.rb +3 -10
  25. data/lib/ruote/exp/fe_cursor.rb +14 -4
  26. data/lib/ruote/exp/fe_define.rb +3 -1
  27. data/lib/ruote/exp/fe_echo.rb +1 -1
  28. data/lib/ruote/exp/fe_equals.rb +1 -1
  29. data/lib/ruote/exp/fe_error.rb +1 -1
  30. data/lib/ruote/exp/fe_filter.rb +163 -4
  31. data/lib/ruote/exp/fe_forget.rb +21 -4
  32. data/lib/ruote/exp/fe_given.rb +1 -1
  33. data/lib/ruote/exp/fe_if.rb +1 -1
  34. data/lib/ruote/exp/fe_inc.rb +102 -35
  35. data/lib/ruote/exp/fe_iterator.rb +47 -12
  36. data/lib/ruote/exp/fe_listen.rb +96 -11
  37. data/lib/ruote/exp/fe_lose.rb +31 -4
  38. data/lib/ruote/exp/fe_noop.rb +1 -1
  39. data/lib/ruote/exp/fe_on_error.rb +109 -0
  40. data/lib/ruote/exp/fe_once.rb +10 -19
  41. data/lib/ruote/exp/fe_participant.rb +90 -28
  42. data/lib/ruote/exp/fe_read.rb +69 -0
  43. data/lib/ruote/exp/fe_redo.rb +3 -2
  44. data/lib/ruote/exp/fe_ref.rb +57 -27
  45. data/lib/ruote/exp/fe_registerp.rb +1 -3
  46. data/lib/ruote/exp/fe_reserve.rb +1 -1
  47. data/lib/ruote/exp/fe_restore.rb +6 -6
  48. data/lib/ruote/exp/fe_save.rb +12 -19
  49. data/lib/ruote/exp/fe_sequence.rb +38 -2
  50. data/lib/ruote/exp/fe_set.rb +143 -40
  51. data/lib/ruote/exp/{fe_let.rb → fe_stall.rb} +7 -38
  52. data/lib/ruote/exp/fe_subprocess.rb +8 -2
  53. data/lib/ruote/exp/fe_that.rb +1 -1
  54. data/lib/ruote/exp/fe_undo.rb +40 -4
  55. data/lib/ruote/exp/fe_unregisterp.rb +1 -3
  56. data/lib/ruote/exp/fe_wait.rb +12 -25
  57. data/lib/ruote/exp/{flowexpression.rb → flow_expression.rb} +375 -229
  58. data/lib/ruote/exp/iterator.rb +2 -2
  59. data/lib/ruote/exp/merge.rb +78 -17
  60. data/lib/ruote/exp/ro_attributes.rb +46 -36
  61. data/lib/ruote/exp/ro_filters.rb +34 -8
  62. data/lib/ruote/exp/ro_on_x.rb +431 -0
  63. data/lib/ruote/exp/ro_persist.rb +19 -7
  64. data/lib/ruote/exp/ro_timers.rb +123 -0
  65. data/lib/ruote/exp/ro_variables.rb +90 -29
  66. data/lib/ruote/fei.rb +57 -3
  67. data/lib/ruote/fs.rb +3 -0
  68. data/lib/ruote/id/mnemo_wfid_generator.rb +30 -7
  69. data/lib/ruote/id/wfid_generator.rb +17 -38
  70. data/lib/ruote/log/default_history.rb +23 -9
  71. data/lib/ruote/log/fancy_printing.rb +265 -0
  72. data/lib/ruote/log/storage_history.rb +23 -13
  73. data/lib/ruote/log/wait_logger.rb +224 -17
  74. data/lib/ruote/observer.rb +82 -0
  75. data/lib/ruote/part/block_participant.rb +65 -28
  76. data/lib/ruote/part/code_participant.rb +81 -0
  77. data/lib/ruote/part/engine_participant.rb +7 -2
  78. data/lib/ruote/part/local_participant.rb +221 -21
  79. data/lib/ruote/part/no_op_participant.rb +1 -1
  80. data/lib/ruote/part/null_participant.rb +1 -1
  81. data/lib/ruote/part/participant.rb +50 -0
  82. data/lib/ruote/part/rev_participant.rb +178 -0
  83. data/lib/ruote/part/smtp_participant.rb +2 -2
  84. data/lib/ruote/part/storage_participant.rb +228 -60
  85. data/lib/ruote/part/template.rb +1 -1
  86. data/lib/ruote/participant.rb +2 -0
  87. data/lib/ruote/reader.rb +205 -68
  88. data/lib/ruote/reader/json.rb +49 -0
  89. data/lib/ruote/reader/radial.rb +303 -0
  90. data/lib/ruote/reader/ruby_dsl.rb +44 -9
  91. data/lib/ruote/reader/xml.rb +11 -8
  92. data/lib/ruote/receiver/base.rb +98 -45
  93. data/lib/ruote/storage/base.rb +104 -35
  94. data/lib/ruote/storage/composite_storage.rb +50 -60
  95. data/lib/ruote/storage/fs_storage.rb +25 -34
  96. data/lib/ruote/storage/hash_storage.rb +38 -36
  97. data/lib/ruote/svc/dispatch_pool.rb +104 -35
  98. data/lib/ruote/svc/dollar_sub.rb +10 -8
  99. data/lib/ruote/svc/error_handler.rb +108 -52
  100. data/lib/ruote/svc/expression_map.rb +3 -3
  101. data/lib/ruote/svc/participant_list.rb +160 -55
  102. data/lib/ruote/svc/tracker.rb +31 -31
  103. data/lib/ruote/svc/treechecker.rb +28 -16
  104. data/lib/ruote/tree_dot.rb +1 -1
  105. data/lib/ruote/util/deep.rb +143 -0
  106. data/lib/ruote/util/filter.rb +125 -18
  107. data/lib/ruote/util/hashdot.rb +15 -13
  108. data/lib/ruote/util/look.rb +1 -1
  109. data/lib/ruote/util/lookup.rb +60 -22
  110. data/lib/ruote/util/misc.rb +63 -18
  111. data/lib/ruote/util/mpatch.rb +53 -0
  112. data/lib/ruote/util/ometa.rb +1 -2
  113. data/lib/ruote/util/process_observer.rb +177 -0
  114. data/lib/ruote/util/subprocess.rb +1 -1
  115. data/lib/ruote/util/time.rb +2 -2
  116. data/lib/ruote/util/tree.rb +64 -2
  117. data/lib/ruote/version.rb +3 -2
  118. data/lib/ruote/worker.rb +421 -92
  119. data/lib/ruote/workitem.rb +157 -22
  120. data/ruote.gemspec +15 -9
  121. data/test/bm/ci.rb +0 -2
  122. data/test/bm/ici.rb +0 -2
  123. data/test/bm/load_26c.rb +0 -3
  124. data/test/bm/mega.rb +0 -2
  125. data/test/functional/base.rb +57 -43
  126. data/test/functional/concurrent_base.rb +16 -13
  127. data/test/functional/ct_0_concurrence.rb +7 -11
  128. data/test/functional/ct_1_iterator.rb +9 -11
  129. data/test/functional/ct_2_cancel.rb +28 -17
  130. data/test/functional/eft_0_flow_expression.rb +35 -0
  131. data/test/functional/eft_10_cancel_process.rb +1 -1
  132. data/test/functional/eft_11_wait.rb +13 -13
  133. data/test/functional/eft_12_listen.rb +199 -66
  134. data/test/functional/eft_13_iterator.rb +95 -29
  135. data/test/functional/eft_14_cursor.rb +74 -24
  136. data/test/functional/eft_15_loop.rb +7 -7
  137. data/test/functional/eft_16_if.rb +1 -1
  138. data/test/functional/eft_17_equals.rb +1 -1
  139. data/test/functional/eft_18_concurrent_iterator.rb +156 -68
  140. data/test/functional/eft_19_reserve.rb +15 -15
  141. data/test/functional/eft_1_echo.rb +1 -1
  142. data/test/functional/eft_20_save.rb +51 -9
  143. data/test/functional/eft_21_restore.rb +1 -1
  144. data/test/functional/eft_22_noop.rb +1 -1
  145. data/test/functional/eft_23_apply.rb +1 -1
  146. data/test/functional/eft_24_add_branches.rb +7 -8
  147. data/test/functional/eft_25_command.rb +1 -1
  148. data/test/functional/eft_26_error.rb +11 -11
  149. data/test/functional/eft_27_inc.rb +111 -67
  150. data/test/functional/eft_28_once.rb +16 -16
  151. data/test/functional/eft_29_cron.rb +9 -9
  152. data/test/functional/eft_2_sequence.rb +23 -4
  153. data/test/functional/eft_30_ref.rb +36 -24
  154. data/test/functional/eft_31_registerp.rb +24 -24
  155. data/test/functional/eft_32_lose.rb +46 -20
  156. data/test/functional/eft_34_given.rb +1 -1
  157. data/test/functional/eft_35_filter.rb +161 -7
  158. data/test/functional/eft_36_read.rb +97 -0
  159. data/test/functional/{eft_0_process_definition.rb → eft_37_process_definition.rb} +4 -4
  160. data/test/functional/eft_38_on_error.rb +195 -0
  161. data/test/functional/eft_39_stall.rb +35 -0
  162. data/test/functional/eft_3_participant.rb +77 -22
  163. data/test/functional/eft_40_await.rb +297 -0
  164. data/test/functional/eft_4_set.rb +110 -11
  165. data/test/functional/eft_5_subprocess.rb +27 -5
  166. data/test/functional/eft_6_concurrence.rb +299 -60
  167. data/test/functional/eft_7_forget.rb +24 -22
  168. data/test/functional/eft_8_undo.rb +52 -15
  169. data/test/functional/eft_9_redo.rb +18 -20
  170. data/test/functional/ft_0_worker.rb +122 -13
  171. data/test/functional/ft_10_dollar.rb +77 -16
  172. data/test/functional/ft_11_recursion.rb +9 -9
  173. data/test/functional/ft_12_launchitem.rb +7 -9
  174. data/test/functional/ft_13_variables.rb +125 -22
  175. data/test/functional/ft_14_re_apply.rb +112 -56
  176. data/test/functional/ft_15_timeout.rb +64 -33
  177. data/test/functional/ft_16_participant_params.rb +59 -6
  178. data/test/functional/ft_17_conditional.rb +68 -2
  179. data/test/functional/ft_18_kill.rb +48 -30
  180. data/test/functional/ft_19_participant_code.rb +67 -0
  181. data/test/functional/ft_1_process_status.rb +222 -150
  182. data/test/functional/ft_20_storage_participant.rb +445 -44
  183. data/test/functional/ft_21_forget.rb +21 -26
  184. data/test/functional/ft_22_process_definitions.rb +8 -6
  185. data/test/functional/ft_23_load_defs.rb +29 -5
  186. data/test/functional/ft_24_block_participant.rb +199 -20
  187. data/test/functional/ft_25_receiver.rb +98 -46
  188. data/test/functional/ft_26_participant_rtimeout.rb +34 -26
  189. data/test/functional/ft_27_var_indirection.rb +40 -5
  190. data/test/functional/ft_28_null_noop_participants.rb +5 -5
  191. data/test/functional/ft_29_part_template.rb +2 -2
  192. data/test/functional/ft_2_errors.rb +106 -74
  193. data/test/functional/ft_30_smtp_participant.rb +7 -7
  194. data/test/functional/ft_31_part_blocking.rb +11 -11
  195. data/test/functional/ft_32_scope.rb +50 -0
  196. data/test/functional/ft_33_participant_subprocess_priority.rb +3 -3
  197. data/test/functional/ft_34_cursor_rewind.rb +14 -14
  198. data/test/functional/ft_35_add_service.rb +67 -9
  199. data/test/functional/ft_36_storage_history.rb +92 -24
  200. data/test/functional/ft_37_default_history.rb +35 -23
  201. data/test/functional/ft_38_participant_more.rb +189 -32
  202. data/test/functional/ft_39_wait_for.rb +25 -25
  203. data/test/functional/ft_3_participant_registration.rb +235 -107
  204. data/test/functional/ft_40_wait_logger.rb +105 -18
  205. data/test/functional/ft_41_participants.rb +13 -12
  206. data/test/functional/ft_42_storage_copy.rb +12 -12
  207. data/test/functional/ft_43_participant_on_reply.rb +85 -11
  208. data/test/functional/ft_44_var_participant.rb +5 -5
  209. data/test/functional/ft_45_participant_accept.rb +3 -3
  210. data/test/functional/ft_46_launch_single.rb +17 -17
  211. data/test/functional/ft_47_wfids.rb +41 -0
  212. data/test/functional/ft_48_lose.rb +19 -25
  213. data/test/functional/ft_49_engine_on_error.rb +54 -70
  214. data/test/functional/ft_4_cancel.rb +84 -26
  215. data/test/functional/ft_50_engine_config.rb +4 -4
  216. data/test/functional/ft_51_misc.rb +12 -12
  217. data/test/functional/ft_52_case.rb +17 -17
  218. data/test/functional/ft_53_engine_on_terminate.rb +18 -21
  219. data/test/functional/ft_54_patterns.rb +18 -16
  220. data/test/functional/ft_55_engine_participant.rb +55 -55
  221. data/test/functional/ft_56_filter_attribute.rb +90 -52
  222. data/test/functional/ft_57_rev_participant.rb +252 -0
  223. data/test/functional/ft_58_workitem.rb +150 -0
  224. data/test/functional/ft_59_pause.rb +329 -0
  225. data/test/functional/ft_5_on_error.rb +430 -77
  226. data/test/functional/ft_60_code_participant.rb +65 -0
  227. data/test/functional/ft_61_trailing_fields.rb +34 -0
  228. data/test/functional/ft_62_exp_name_and_dollar_substitution.rb +35 -0
  229. data/test/functional/ft_63_participants_221.rb +458 -0
  230. data/test/functional/ft_64_stash.rb +41 -0
  231. data/test/functional/ft_65_timers.rb +313 -0
  232. data/test/functional/ft_66_flank.rb +133 -0
  233. data/test/functional/ft_67_radial_misc.rb +34 -0
  234. data/test/functional/ft_68_reput.rb +72 -0
  235. data/test/functional/ft_69_worker_info.rb +56 -0
  236. data/test/functional/ft_6_on_cancel.rb +189 -36
  237. data/test/functional/ft_70_take_and_discard_attributes.rb +94 -0
  238. data/test/functional/ft_71_retries.rb +144 -0
  239. data/test/functional/ft_72_on_terminate.rb +60 -0
  240. data/test/functional/ft_73_raise_msg.rb +107 -0
  241. data/test/functional/ft_74_respark.rb +106 -0
  242. data/test/functional/ft_75_context.rb +66 -0
  243. data/test/functional/ft_76_observer.rb +53 -0
  244. data/test/functional/ft_77_process_observer.rb +157 -0
  245. data/test/functional/ft_78_part_participant.rb +37 -0
  246. data/test/functional/ft_7_tags.rb +238 -50
  247. data/test/functional/ft_8_participant_consumption.rb +27 -21
  248. data/test/functional/ft_9_subprocesses.rb +48 -18
  249. data/test/functional/restart_base.rb +4 -6
  250. data/test/functional/rt_0_wait.rb +10 -10
  251. data/test/functional/rt_1_listen.rb +6 -6
  252. data/test/functional/rt_2_errors.rb +12 -12
  253. data/test/functional/rt_3_once.rb +17 -12
  254. data/test/functional/rt_4_cron.rb +17 -17
  255. data/test/functional/rt_5_timeout.rb +13 -13
  256. data/test/functional/signals.rb +103 -0
  257. data/test/functional/storage.rb +730 -0
  258. data/test/functional/storage_helper.rb +48 -35
  259. data/test/functional/test.rb +6 -2
  260. data/test/misc/idle.rb +21 -0
  261. data/test/misc/light.rb +29 -0
  262. data/test/path_helper.rb +1 -1
  263. data/test/test.rb +2 -5
  264. data/test/test_helper.rb +13 -0
  265. data/test/unit/test.rb +1 -4
  266. data/test/unit/ut_0_ruby_reader.rb +25 -9
  267. data/test/unit/ut_10_participants.rb +47 -0
  268. data/test/unit/ut_11_lookup.rb +59 -2
  269. data/test/unit/ut_12_wait_logger.rb +123 -0
  270. data/test/unit/ut_14_is_uri.rb +1 -1
  271. data/test/unit/ut_15_util.rb +1 -1
  272. data/test/unit/ut_16_reader.rb +136 -14
  273. data/test/unit/ut_17_merge.rb +155 -0
  274. data/test/unit/ut_19_part_template.rb +1 -1
  275. data/test/unit/ut_1_fei.rb +11 -2
  276. data/test/unit/ut_20_composite_storage.rb +27 -1
  277. data/test/unit/{ut_21_participant_list.rb → ut_21_svc_participant_list.rb} +2 -3
  278. data/test/unit/ut_22_filter.rb +231 -10
  279. data/test/unit/ut_23_svc_tracker.rb +48 -0
  280. data/test/unit/ut_24_radial_reader.rb +458 -0
  281. data/test/unit/ut_25_process_status.rb +143 -0
  282. data/test/unit/ut_26_deep.rb +131 -0
  283. data/test/unit/ut_2_dashboard.rb +114 -0
  284. data/test/unit/ut_3_worker.rb +54 -0
  285. data/test/unit/ut_4_expmap.rb +1 -1
  286. data/test/unit/ut_5_tree.rb +23 -23
  287. data/test/unit/ut_6_condition.rb +71 -29
  288. data/test/unit/ut_7_workitem.rb +18 -4
  289. data/test/unit/ut_8_tree_to_dot.rb +1 -1
  290. data/test/unit/ut_9_xml_reader.rb +1 -1
  291. metadata +142 -63
  292. data/jruby_issue.txt +0 -32
  293. data/lib/ruote/engine/process_status.rb +0 -403
  294. data/lib/ruote/log/pretty.rb +0 -165
  295. data/lib/ruote/log/test_logger.rb +0 -204
  296. data/lib/ruote/util/serializer.rb +0 -103
  297. data/phil.txt +0 -14
  298. data/test/functional/eft_33_let.rb +0 -31
  299. data/test/functional/ft_19_alias.rb +0 -33
  300. data/test/functional/ft_47_wfid_generator.rb +0 -54
  301. data/test/unit/storage.rb +0 -403
  302. data/test/unit/storages.rb +0 -37
  303. data/test/unit/ut_13_serializer.rb +0 -65
  304. data/test/unit/ut_18_engine.rb +0 -47
  305. data/test/unit/ut_3_wait_logger.rb +0 -39
@@ -5,7 +5,7 @@
5
5
  # Wed Jun 10 22:57:18 JST 2009
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
8
+ require File.expand_path('../base', __FILE__)
9
9
 
10
10
 
11
11
  class FtDollarTest < Test::Unit::TestCase
@@ -88,14 +88,14 @@ class FtDollarTest < Test::Unit::TestCase
88
88
 
89
89
  #noisy
90
90
 
91
- wfid = @engine.launch(pdef)
91
+ wfid = @dashboard.launch(pdef)
92
92
 
93
- @engine.wait_for(wfid)
93
+ @dashboard.wait_for(wfid)
94
94
 
95
95
  assert_equal(
96
96
  "#<ArgumentError: 'ruby_eval_allowed' is set to false, cannot evaluate" +
97
97
  " >1 + 2< (http://ruote.rubyforge.org/dollar.html)>",
98
- @engine.errors.first.message)
98
+ @dashboard.errors.first.message)
99
99
  end
100
100
 
101
101
  def test_r
@@ -108,7 +108,7 @@ class FtDollarTest < Test::Unit::TestCase
108
108
 
109
109
  #noisy
110
110
 
111
- @engine.context['ruby_eval_allowed'] = true
111
+ @dashboard.context['ruby_eval_allowed'] = true
112
112
 
113
113
  assert_trace('>3<', pdef)
114
114
  end
@@ -118,6 +118,7 @@ class FtDollarTest < Test::Unit::TestCase
118
118
  pdef = Ruote.process_definition do
119
119
  sequence do
120
120
  set 'f:toto' => 'person'
121
+ echo "${r:wi['toto']}"
121
122
  echo "${r:wi.fields['toto']}"
122
123
  echo "${r:workitem.fields['toto']}"
123
124
  end
@@ -125,9 +126,9 @@ class FtDollarTest < Test::Unit::TestCase
125
126
 
126
127
  #noisy
127
128
 
128
- @engine.context['ruby_eval_allowed'] = true
129
+ @dashboard.context['ruby_eval_allowed'] = true
129
130
 
130
- assert_trace "person\nperson", pdef
131
+ assert_trace [ 'person' ] * 3, pdef
131
132
  end
132
133
 
133
134
  def test_r_and_d
@@ -141,7 +142,7 @@ class FtDollarTest < Test::Unit::TestCase
141
142
 
142
143
  #noisy
143
144
 
144
- @engine.context['ruby_eval_allowed'] = true
145
+ @dashboard.context['ruby_eval_allowed'] = true
145
146
 
146
147
  assert_trace 'person', pdef
147
148
  end
@@ -170,9 +171,9 @@ class FtDollarTest < Test::Unit::TestCase
170
171
  end
171
172
  end
172
173
 
173
- wfid = @engine.launch(pdef)
174
+ wfid = @dashboard.launch(pdef)
174
175
 
175
- @engine.wait_for(wfid)
176
+ @dashboard.wait_for(wfid)
176
177
 
177
178
  assert_match /^0_0_0![^!]+!#{wfid}\n#{wfid}$/, @tracer.to_s
178
179
  end
@@ -186,7 +187,7 @@ class FtDollarTest < Test::Unit::TestCase
186
187
  end
187
188
  end
188
189
 
189
- @engine.context['ruby_eval_allowed'] = true
190
+ @dashboard.context['ruby_eval_allowed'] = true
190
191
 
191
192
  #noisy
192
193
 
@@ -225,9 +226,9 @@ class FtDollarTest < Test::Unit::TestCase
225
226
 
226
227
  #noisy
227
228
 
228
- wfid = @engine.launch(pdef)
229
+ wfid = @dashboard.launch(pdef)
229
230
 
230
- r = @engine.wait_for(wfid)
231
+ r = @dashboard.wait_for(wfid)
231
232
 
232
233
  assert_equal(
233
234
  {
@@ -250,19 +251,79 @@ class FtDollarTest < Test::Unit::TestCase
250
251
  alpha :b => '$f:a'
251
252
  end
252
253
 
253
- @engine.register_participant :alpha do |wi|
254
+ @dashboard.register_participant :alpha do |wi|
254
255
  wi.fields['parameters'] = wi.fields['params']
255
256
  end
256
257
 
257
258
  #noisy
258
259
 
259
- wfid = @engine.launch(pdef)
260
+ wfid = @dashboard.launch(pdef)
260
261
 
261
- r = @engine.wait_for(wfid)
262
+ r = @dashboard.wait_for(wfid)
262
263
 
263
264
  assert_equal(
264
265
  { 'b' => %w[ A B C ], 'ref' => 'alpha' },
265
266
  r['workitem']['fields']['parameters'])
266
267
  end
268
+
269
+ # Issue pointed out by John Le.
270
+ #
271
+ def test_not_a_number
272
+
273
+ pdef = Ruote.define do
274
+ echo 'a0', :if => '${a}'
275
+ echo 'a1', :if => '${a} is set'
276
+ echo 'b', :if => '${b}'
277
+ echo 'c'
278
+ end
279
+
280
+ wfid = @dashboard.launch(
281
+ pdef,
282
+ 'a' => '0a')
283
+
284
+ @dashboard.wait_for(wfid)
285
+
286
+ assert_equal "a0\na1\nc", @tracer.to_s
287
+ end
288
+
289
+ def test_literal
290
+
291
+ pdef = Ruote.define do
292
+ set 'f:a' => true
293
+ _if '$a' do
294
+ echo 'a0'
295
+ end
296
+ echo 'a1', :if => '$a'
297
+ end
298
+
299
+ wfid = @dashboard.launch(pdef)
300
+ @dashboard.wait_for(wfid)
301
+
302
+ assert_equal "a0\na1", @tracer.to_s
303
+ end
304
+
305
+ def test_participant_params
306
+
307
+ #@dashboard.noisy = true
308
+
309
+ @dashboard.register :toto do |workitem, fexp|
310
+ workitem['a'] = fexp.compile_atts
311
+ workitem['p'] = workitem.params
312
+ end
313
+
314
+ pdef = Ruote.define do
315
+ toto "${a}", "${b}" => "${c}"
316
+ end
317
+
318
+ wfid = @dashboard.launch(pdef, 'a' => 'x', 'b' => 'y', 'c' => 'z')
319
+ r = @dashboard.wait_for(wfid)
320
+
321
+ assert_equal(
322
+ { 'y' => 'z', 'x' => nil, 'ref' => 'toto' },
323
+ r['workitem']['fields']['a'])
324
+ assert_equal(
325
+ { 'y' => 'z', 'x' => nil, 'ref' => 'toto' },
326
+ r['workitem']['fields']['p'])
327
+ end
267
328
  end
268
329
 
@@ -5,7 +5,7 @@
5
5
  # Sat Jun 13 22:43:16 JST 2009
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
8
+ require File.expand_path('../base', __FILE__)
9
9
 
10
10
  require 'ruote/part/local_participant'
11
11
 
@@ -39,7 +39,7 @@ class FtRecursionTest < Test::Unit::TestCase
39
39
 
40
40
  def test_main_recursion
41
41
 
42
- @engine.context.stash[:wfids] = []
42
+ @dashboard.context.stash[:wfids] = []
43
43
 
44
44
  pdef = Ruote.process_definition :name => 'def0' do
45
45
  sequence do
@@ -48,18 +48,18 @@ class FtRecursionTest < Test::Unit::TestCase
48
48
  end
49
49
  end
50
50
 
51
- alpha = @engine.register_participant :alpha, CountingParticipant
51
+ alpha = @dashboard.register_participant :alpha, CountingParticipant
52
52
 
53
53
  #noisy
54
54
 
55
55
  assert_trace(%w[ 1 2 3 4 5 6 ], pdef)
56
56
 
57
- assert_equal 6, @engine.context.stash[:wfids].uniq.size
57
+ assert_equal 6, @dashboard.context.stash[:wfids].uniq.size
58
58
  end
59
59
 
60
60
  def test_sub_recursion
61
61
 
62
- @engine.context.stash[:wfids] = []
62
+ @dashboard.context.stash[:wfids] = []
63
63
 
64
64
  pdef = Ruote.process_definition do
65
65
  define 'sub0' do
@@ -71,7 +71,7 @@ class FtRecursionTest < Test::Unit::TestCase
71
71
  sub0
72
72
  end
73
73
 
74
- alpha = @engine.register_participant :alpha, CountingParticipant
74
+ alpha = @dashboard.register_participant :alpha, CountingParticipant
75
75
 
76
76
  #noisy
77
77
 
@@ -79,7 +79,7 @@ class FtRecursionTest < Test::Unit::TestCase
79
79
 
80
80
  #p alpha.wfids.uniq
81
81
 
82
- assert_equal 6, @engine.context.stash[:wfids].uniq.size
82
+ assert_equal 6, @dashboard.context.stash[:wfids].uniq.size
83
83
  end
84
84
 
85
85
  def test_forgotten_main_recursion
@@ -93,11 +93,11 @@ class FtRecursionTest < Test::Unit::TestCase
93
93
  end
94
94
  end
95
95
 
96
- alpha = @engine.register_participant :alpha, CountingParticipant
96
+ alpha = @dashboard.register_participant :alpha, CountingParticipant
97
97
 
98
98
  #noisy
99
99
 
100
- wfid = @engine.launch(pdef)
100
+ wfid = @dashboard.launch(pdef)
101
101
 
102
102
  6.times { wait_for(:alpha) }
103
103
 
@@ -5,7 +5,7 @@
5
5
  # Tue Jun 23 10:55:16 JST 2009
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
8
+ require File.expand_path('../base', __FILE__)
9
9
 
10
10
 
11
11
  class FtLaunchitemTest < Test::Unit::TestCase
@@ -17,27 +17,25 @@ class FtLaunchitemTest < Test::Unit::TestCase
17
17
  alpha
18
18
  end
19
19
 
20
- @engine.register_participant :alpha do |workitem|
20
+ @dashboard.register_participant :alpha do |workitem|
21
21
  stash[:fields] = workitem.fields
22
- @tracer << 'a'
22
+ tracer << 'a'
23
23
  nil
24
24
  end
25
25
 
26
- #noisy
27
-
28
- wfid = @engine.launch(pdef, 'a' => 0, 'b' => 1)
26
+ wfid = @dashboard.launch(pdef, 'a' => 0, 'b' => 1)
29
27
  wait_for(wfid)
30
28
 
31
29
  assert_equal('a', @tracer.to_s)
32
30
 
33
- @engine.context.stash[:fields].delete('__result__')
31
+ @dashboard.context.stash[:fields].delete('__result__')
34
32
 
35
33
  assert_not_nil(
36
- @engine.context.stash[:fields].delete('dispatched_at'))
34
+ @dashboard.context.stash[:fields].delete('dispatched_at'))
37
35
 
38
36
  assert_equal(
39
37
  {"a"=>0, "b"=>1, "params"=>{"ref"=>"alpha"}},
40
- @engine.context.stash[:fields])
38
+ @dashboard.context.stash[:fields])
41
39
  end
42
40
  end
43
41
 
@@ -5,7 +5,7 @@
5
5
  # Tue Jun 23 11:16:39 JST 2009
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
8
+ require File.expand_path('../base', __FILE__)
9
9
 
10
10
 
11
11
  class FtVariablesTest < Test::Unit::TestCase
@@ -17,14 +17,46 @@ class FtVariablesTest < Test::Unit::TestCase
17
17
  echo 'at:${wfid}:${expid}'
18
18
  end
19
19
 
20
- #noisy
21
-
22
- wfid = @engine.launch(pdef)
23
- wait_for(wfid)
20
+ wfid = @dashboard.launch(pdef)
21
+ r = @dashboard.wait_for(wfid)
24
22
 
23
+ assert_equal 'terminated', r['action']
25
24
  assert_equal "at:#{wfid}:0_0", @tracer.to_s
26
25
  end
27
26
 
27
+ def test_mnemo_id
28
+
29
+ pdef = Ruote.process_definition do
30
+ echo '>${mnemo_id}<'
31
+ end
32
+
33
+ wfid = @dashboard.launch(pdef)
34
+ r = @dashboard.wait_for(wfid)
35
+
36
+ assert_equal 'terminated', r['action']
37
+ assert_match /^>[a-z]+<$/, @tracer.to_s
38
+ end
39
+
40
+ def test_tags
41
+
42
+ pdef = Ruote.define do
43
+ sequence :tag => 'a' do
44
+ sequence :tag => 'b' do
45
+ sequence :tag => 'c' do
46
+ echo '>${tags}<'
47
+ echo '>${tag}<'
48
+ echo '>${full_tag}<'
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ wfid = @dashboard.launch(pdef); r = @dashboard.wait_for(wfid)
55
+
56
+ assert_equal 'terminated', r['action']
57
+ assert_equal [ ">[\"a\", \"b\", \"c\"]<", ">c<", ">a/b/c<" ], @tracer.to_a
58
+ end
59
+
28
60
  def test_variables_event
29
61
 
30
62
  pdef = Ruote.process_definition do
@@ -35,8 +67,6 @@ class FtVariablesTest < Test::Unit::TestCase
35
67
  end
36
68
  end
37
69
 
38
- #noisy
39
-
40
70
  assert_trace('done.', pdef)
41
71
 
42
72
  #logger.log.each { |e| p e }
@@ -64,8 +94,6 @@ class FtVariablesTest < Test::Unit::TestCase
64
94
  end
65
95
  end
66
96
 
67
- #noisy
68
-
69
97
  assert_trace(%w[ a0:b0:a0:b0 a1:b1:a0:b1 a0:b1:a0:b1 ], pdef)
70
98
  end
71
99
 
@@ -80,9 +108,7 @@ class FtVariablesTest < Test::Unit::TestCase
80
108
  end
81
109
  end
82
110
 
83
- #noisy
84
-
85
- @engine.variables['vb'] = 'b0'
111
+ @dashboard.variables['vb'] = 'b0'
86
112
 
87
113
  assert_trace(%w[ a0: b0:b0 done. ], pdef)
88
114
 
@@ -104,9 +130,9 @@ class FtVariablesTest < Test::Unit::TestCase
104
130
  end
105
131
  end
106
132
 
107
- @engine.context.stash[:results] = []
133
+ @dashboard.context.stash[:results] = []
108
134
 
109
- @engine.register_participant :alpha do |workitem, fexp|
135
+ @dashboard.register_participant :alpha do |workitem, fexp|
110
136
 
111
137
  class << fexp
112
138
  public :locate_var
@@ -117,20 +143,87 @@ class FtVariablesTest < Test::Unit::TestCase
117
143
  stash[:results] << fexp.locate_var('a').first.fei.to_storage_id
118
144
  end
119
145
 
120
- #noisy
121
-
122
146
  assert_trace 'done.', pdef
123
147
 
124
- assert_equal(nil, @engine.context.stash[:results][0])
125
- assert_match(/^0||\d+_\d+$/, @engine.context.stash[:results][1])
126
- assert_match(/^0\_0|\d+|\d+_\d+$/, @engine.context.stash[:results][2])
148
+ assert_equal(nil, @dashboard.context.stash[:results][0])
149
+ assert_match(/^0||\d+_\d+$/, @dashboard.context.stash[:results][1])
150
+ assert_match(/^0\_0|\d+|\d+_\d+$/, @dashboard.context.stash[:results][2])
151
+ end
152
+
153
+ def test_lookup_var
154
+
155
+ pdef = Ruote.define do
156
+ set 'v:v0' => 'a'
157
+ sequence :scope => true do
158
+ echo 'v0:${v:v0}'
159
+ set 'v:v0' => nil
160
+ echo 'v0:${v:v0}'
161
+ end
162
+ echo 'v0:${v:v0}'
163
+ end
164
+
165
+ wfid = @dashboard.launch(pdef)
166
+ r = @dashboard.wait_for(wfid)
167
+
168
+ assert_equal %w[ v0:a v0: v0:a ], @tracer.to_a
169
+ end
170
+
171
+ def test_set_var_override
172
+
173
+ pdef = Ruote.define do
174
+ set 'v:v0' => 'a'
175
+ sequence :scope => true do
176
+ set 'v:v0' => 'b', :over => true
177
+ set 'v:v1' => 'b', :over => true
178
+ set 'v:/v2' => 'b', :over => true
179
+ end
180
+ end
181
+
182
+ wfid = @dashboard.launch(pdef)
183
+ r = @dashboard.wait_for(wfid)
184
+
185
+ assert_equal(
186
+ { 'v0' => 'b', 'v2' => 'b' },
187
+ r['variables'])
188
+ end
189
+
190
+ def test_set_var_override_sub
191
+
192
+ pdef = Ruote.define do
193
+
194
+ set 'v:v0' => 'a'
195
+ set 'v:v1' => 'a'
196
+ set 'v:v2' => 'a'
197
+ set 'v:v3' => 'a'
198
+ sub0
199
+ sequence :scope => true do
200
+ set 'v:v4' => 'a', :over => 'sub'
201
+ end
202
+
203
+ define 'sub0' do
204
+ set 'v:v0' => 'b'
205
+ set 'v:v1' => 'b', :over => true
206
+ set 'v:v3' => 'b'
207
+ sequence :scope => true do
208
+ set 'v:v2' => 'c', :over => 'sub'
209
+ set 'v:v3' => 'c', :over => 'sub'
210
+ end
211
+ set 'v:/v3' => '${v:v3}'
212
+ end
213
+ end
214
+
215
+ wfid = @dashboard.launch(pdef)
216
+ r = @dashboard.wait_for(wfid)
217
+
218
+ assert_equal(
219
+ [ 'a', 'b', 'a', 'c', nil ],
220
+ r['variables'].values_at(*%w[ v0 v1 v2 v3 v4 ]))
127
221
  end
128
222
 
129
223
  def test_lookup_in_var
130
224
 
131
- @engine.register_participant :echo_toto do |wi, fexp|
132
- @tracer << fexp.lookup_variable('toto').join
133
- @tracer << "\n"
225
+ @dashboard.register_participant :echo_toto do |wi, fexp|
226
+ tracer << fexp.lookup_variable('toto').join + "\n"
134
227
  end
135
228
 
136
229
  pdef = Ruote.process_definition do
@@ -147,5 +240,15 @@ class FtVariablesTest < Test::Unit::TestCase
147
240
 
148
241
  assert_trace(%w[ b abC aC ], pdef)
149
242
  end
243
+
244
+ def test_terminated_and_variables
245
+
246
+ pdef = Ruote.define {}
247
+
248
+ wfid = @engine.launch(pdef, {}, { 'a' => 'b' })
249
+ r = @engine.wait_for(wfid)
250
+
251
+ assert_equal({ 'a' => 'b' }, r['variables'])
252
+ end
150
253
  end
151
254