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
@@ -0,0 +1,123 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Thu Dec 10 14:08:30 JST 2009
6
+ #
7
+
8
+ require File.expand_path('../../test_helper', __FILE__)
9
+
10
+ require 'ruote'
11
+
12
+
13
+ class UtWaitLoggerTest < Test::Unit::TestCase
14
+
15
+ def setup
16
+ @engine = Ruote::Engine.new(Ruote::Worker.new(Ruote::HashStorage.new))
17
+ @engine.register :alpha, Ruote::StorageParticipant
18
+ end
19
+ def teardown
20
+ @engine.shutdown
21
+ end
22
+
23
+ def test_wait_for_participant
24
+
25
+ #@engine.noisy = true
26
+
27
+ pdef = Ruote.process_definition :name => 'test' do
28
+ alpha
29
+ end
30
+
31
+ @engine.launch(pdef)
32
+ msg = @engine.wait_for(:alpha)
33
+
34
+ assert_equal 1, @engine.storage_participant.size
35
+
36
+ assert_not_nil msg
37
+ assert_not_nil msg['workitem']
38
+ assert_equal 'dispatch', msg['action']
39
+ end
40
+
41
+ def test_wait_for_action
42
+
43
+ #@engine.noisy = true
44
+
45
+ pdef = Ruote.process_definition :name => 'test' do
46
+ alpha
47
+ end
48
+
49
+ @engine.launch(pdef)
50
+
51
+ msg = @engine.wait_for('apply')
52
+
53
+ assert_equal 'apply', msg['action']
54
+
55
+ msg = @engine.wait_for('dispatch')
56
+
57
+ assert_equal 'dispatch', msg['action']
58
+ end
59
+
60
+ def test_wait_for_muliple_things
61
+
62
+ d0 = Ruote.define do
63
+ 7.times { noop }
64
+ end
65
+ d1 = Ruote.define do
66
+ 7.times { noop }
67
+ error 'oh crap'
68
+ end
69
+
70
+ #@engine.noisy = true
71
+
72
+ i0 = @engine.launch(d0)
73
+ i1 = @engine.launch(d1)
74
+
75
+ r = @engine.wait_for(i0, i1)
76
+
77
+ assert [ i0, i1 ].include?(r['wfid'])
78
+ assert %w[ terminated error_intercepted ].include?(r['action'])
79
+ end
80
+
81
+ def test_or_error
82
+
83
+ @engine.register :alpha, Ruote::NullParticipant
84
+
85
+ d0 = Ruote.define do
86
+ 35.times { noop }
87
+ alpha
88
+ end
89
+ d1 = Ruote.define do
90
+ 3.times { noop }
91
+ error 'oh crap'
92
+ end
93
+
94
+ #@engine.noisy = true
95
+
96
+ i0 = @engine.launch(d0)
97
+ i1 = @engine.launch(d1)
98
+
99
+ r = @engine.wait_for(:alpha, :or_error)
100
+
101
+ assert_equal i1, r['wfid']
102
+ assert_equal 'error_intercepted', r['action']
103
+ end
104
+
105
+ def test_wait_for_hash
106
+
107
+ #@engine.noisy = true
108
+
109
+ wfid = @engine.launch(Ruote.define do
110
+ sequence do
111
+ cursor do
112
+ wait '1d'
113
+ end
114
+ end
115
+ end)
116
+
117
+ r = @engine.wait_for('action' => 'apply', 'exp_name' => 'wait')
118
+
119
+ assert_equal 'apply', r['action']
120
+ assert_equal 'wait', r['tree'][0]
121
+ end
122
+ end
123
+
@@ -5,7 +5,7 @@
5
5
  # Tue Sep 1 13:39:43 JST 2009
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), '..', 'test_helper.rb')
8
+ require File.expand_path('../../test_helper', __FILE__)
9
9
 
10
10
  require 'ruote/util/misc'
11
11
 
@@ -5,7 +5,7 @@
5
5
  # Sat Sep 19 13:27:18 JST 2009
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), '..', 'test_helper.rb')
8
+ require File.expand_path('../../test_helper', __FILE__)
9
9
 
10
10
  require 'ruote/util/misc'
11
11
 
@@ -5,8 +5,9 @@
5
5
  # Tue Oct 20 10:48:11 JST 2009
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), '..', 'test_helper.rb')
8
+ require File.expand_path('../../test_helper', __FILE__)
9
9
 
10
+ require_json
10
11
  require 'ruote/reader'
11
12
 
12
13
 
@@ -21,13 +22,13 @@ class PdefReaderTest < Test::Unit::TestCase
21
22
  end
22
23
  }
23
24
 
24
-
25
25
  TREE1 = Ruote::Reader.read(%{
26
26
  Ruote.define :name => 'nada' do
27
- sequence do
28
- alpha
29
- participant 'bravo', :timeout => '2d', :on_board => true
30
- end
27
+ alpha
28
+ participant 'bravo', :timeout => '2d', :on_board => true
29
+ participant 'charly', :on_board => false, :whatever => nil
30
+ doug :a => 'false', :b => 'true', :c => 'nil', :d => 4.5
31
+ dec 'v:x'
31
32
  end
32
33
  })
33
34
 
@@ -65,10 +66,11 @@ class PdefReaderTest < Test::Unit::TestCase
65
66
  %{
66
67
  <?xml version="1.0" encoding="UTF-8"?>
67
68
  <define name="nada">
68
- <sequence>
69
- <alpha/>
70
- <participant timeout="2d" on-board="true" ref="bravo"/>
71
- </sequence>
69
+ <alpha/>
70
+ <participant on-board="true" ref="bravo" timeout="2d"/>
71
+ <participant on-board="false" ref="charly" whatever="nil"/>
72
+ <doug a="false" b="true" c="nil" d="4.5"/>
73
+ <dec ref="v:x"/>
72
74
  </define>
73
75
  }.strip,
74
76
  Ruote::Reader.to_xml(TREE1, :indent => 2).strip)
@@ -99,10 +101,11 @@ class PdefReaderTest < Test::Unit::TestCase
99
101
  assert_equal(
100
102
  %{
101
103
  Ruote.process_definition :name => "nada" do
102
- sequence do
103
- alpha
104
- participant "bravo", :timeout => "2d", :on_board => true
105
- end
104
+ alpha
105
+ participant "bravo", :on_board => true, :timeout => "2d"
106
+ participant "charly", :on_board => false, :whatever => nil
107
+ doug :a => "false", :b => "true", :c => "nil", :d => 4.5
108
+ dec "v:x"
106
109
  end
107
110
  }.strip,
108
111
  Ruote::Reader.to_ruby(TREE1).strip)
@@ -115,6 +118,51 @@ end
115
118
  assert_equal TREE1.to_json, Ruote::Reader.to_json(TREE1)
116
119
  end
117
120
 
121
+ def test_to_radial
122
+
123
+ assert_equal(
124
+ %{
125
+ define name: nada
126
+ alpha
127
+ participant bravo, on_board: true, timeout: 2d
128
+ participant charly, on_board: false, whatever: nil
129
+ doug a: "false", b: "true", c: "nil", d: 4.5
130
+ dec "v:x"
131
+ }.strip,
132
+ Ruote::Reader.to_radial(TREE1).strip)
133
+ end
134
+
135
+ def test_to_radial_back_and_forth
136
+
137
+ rad = Ruote::Reader.to_radial(TREE1)
138
+
139
+ assert_equal TREE1, Ruote::Reader.read(rad)
140
+ end
141
+
142
+ def test_to_radial_2
143
+
144
+ tree = Ruote.define do
145
+ participant 'bob', 'message' => "hello my\ndear world"
146
+ participant 'charly', 'message' => 'oh my'
147
+ end
148
+
149
+ rad = Ruote::Reader.to_radial(tree)
150
+
151
+ assert_equal tree, Ruote::Reader.read(rad)
152
+ end
153
+
154
+ def test_to_expid_radial
155
+
156
+ assert_equal(
157
+ %{ 0 define name: nada
158
+ 0_0 alpha
159
+ 0_1 participant bravo, on_board: true, timeout: 2d
160
+ 0_2 participant charly, on_board: false, whatever: nil
161
+ 0_3 doug a: "false", b: "true", c: "nil", d: 4.5
162
+ 0_4 dec "v:x"},
163
+ Ruote::Reader.to_expid_radial(TREE1))
164
+ end
165
+
118
166
  DEF1 = %{
119
167
  Ruote.process_definition do
120
168
  sequence do
@@ -157,5 +205,79 @@ end
157
205
  ] ],
158
206
  t)
159
207
  end
208
+
209
+ def test_radial
210
+
211
+ tree = Ruote::Reader.read(%{
212
+ define name: 'nada'
213
+ sequence
214
+ alpha
215
+ participant bravo, timeout: 2d, on-board: true
216
+ })
217
+
218
+ assert_equal(
219
+ [ 'define', { 'name' => 'nada' }, [
220
+ [ 'sequence', {}, [
221
+ [ 'alpha', {}, [] ],
222
+ [ 'participant', { 'bravo' => nil, 'timeout' => '2d', 'on_board' => true }, [] ]
223
+ ] ]
224
+ ] ],
225
+ tree)
226
+ end
227
+
228
+ def test_parse_error__ruby
229
+
230
+ err = nil
231
+
232
+ begin
233
+ Ruote::Reader.read(%{
234
+ Ruote.process_definition # missing "do"
235
+ alpha
236
+ end
237
+ })
238
+ rescue => err
239
+ end
240
+
241
+ assert_equal Ruote::Reader::Error, err.class
242
+ assert_equal Racc::ParseError, err.cause.class
243
+ end
244
+
245
+ def test_parse_error__radial
246
+
247
+ err = nil
248
+
249
+ begin
250
+ Ruote::Reader.read(%{
251
+ process_definition [f:y]
252
+ alpha
253
+ })
254
+ rescue => err
255
+ end
256
+
257
+ assert_equal Ruote::Reader::Error, err.class
258
+ assert_equal Parslet::UnconsumedInput, err.cause.class
259
+ end
260
+
261
+ def test_ruby_attributes
262
+
263
+ pdef = Ruote.define do
264
+ sequence :on_error => [
265
+ { /unknown participant/ => 'alpha' },
266
+ { nil => 'bravo' }
267
+ ] do
268
+ nada
269
+ end
270
+ end
271
+
272
+ assert_equal(
273
+ [ 'define', {}, [
274
+ [ 'sequence', { 'on_error' => [
275
+ { '/unknown participant/' => 'alpha' }, { nil => 'bravo' }
276
+ ] }, [
277
+ [ 'nada', {}, [] ]
278
+ ] ]
279
+ ] ],
280
+ pdef)
281
+ end
160
282
  end
161
283
 
@@ -0,0 +1,155 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Fri May 13 14:12:52 JST 2011
6
+ #
7
+
8
+ require File.expand_path('../../test_helper', __FILE__)
9
+
10
+ module Ruote; end
11
+ require 'ruote/exp/flow_expression'
12
+ require 'ruote/exp/merge'
13
+
14
+
15
+ class MergeTest < Test::Unit::TestCase
16
+
17
+ class Merger < Ruote::Exp::FlowExpression
18
+ include Ruote::Exp::MergeMixin
19
+ def initialize
20
+ end
21
+ def tree
22
+ [ 'nada', {}, [] ]
23
+ end
24
+ end
25
+
26
+ def new_workitem(fields)
27
+
28
+ { 'fields' => fields }
29
+ end
30
+
31
+ def new_workitems
32
+
33
+ [
34
+ new_workitem('a' => 0, 'b' => -1),
35
+ new_workitem('a' => 1)
36
+ ]
37
+ end
38
+
39
+ def test_override
40
+
41
+ assert_equal(
42
+ { 'fields' => { 'a' => 1 } },
43
+ Merger.new.merge_workitems(new_workitems, 'override'))
44
+ assert_equal(
45
+ { 'fields' => { 'a' => 0, 'b' => -1 } },
46
+ Merger.new.merge_workitems(new_workitems.reverse, 'override'))
47
+ end
48
+
49
+ def test_mix
50
+
51
+ assert_equal(
52
+ { 'fields' => { 'a' => 1, 'b' => -1 } },
53
+ Merger.new.merge_workitems(new_workitems, 'mix'))
54
+ assert_equal(
55
+ { 'fields' => { 'a' => 0, 'b' => -1 } },
56
+ Merger.new.merge_workitems(new_workitems.reverse, 'mix'))
57
+ end
58
+
59
+ def test_isolate
60
+
61
+ assert_equal(
62
+ { 'fields' => {
63
+ '0' => { 'a' => 0, 'b' => -1 },
64
+ '1' => { 'a' => 1 }
65
+ } },
66
+ Merger.new.merge_workitems(new_workitems, 'isolate'))
67
+ assert_equal(
68
+ { 'fields' => {
69
+ '0' => { 'a' => 1 },
70
+ '1' => { 'a' => 0, 'b' => -1 }
71
+ } },
72
+ Merger.new.merge_workitems(new_workitems.reverse, 'isolate'))
73
+ end
74
+
75
+ def test_stack
76
+
77
+ assert_equal(
78
+ { 'fields' => {
79
+ 'stack' => [ { 'a' => 0, 'b' => -1 }, { 'a' => 1 } ],
80
+ 'stack_attributes' => {}
81
+ } },
82
+ Merger.new.merge_workitems(new_workitems, 'stack'))
83
+ assert_equal(
84
+ { 'fields' => {
85
+ 'stack' => [ { 'a' => 1 }, { 'a' => 0, 'b' => -1 } ],
86
+ 'stack_attributes' => {}
87
+ } },
88
+ Merger.new.merge_workitems(new_workitems.reverse, 'stack'))
89
+ end
90
+
91
+ def test_unknown
92
+
93
+ assert_equal(
94
+ { 'fields' => { 'a' => 0, 'b' => -1 } },
95
+ Merger.new.merge_workitems(new_workitems, '???'))
96
+ assert_equal(
97
+ { 'fields' => { 'a' => 1 } },
98
+ Merger.new.merge_workitems(new_workitems.reverse, '???'))
99
+ end
100
+
101
+ def test_union
102
+
103
+ workitems = [
104
+ new_workitem('a' => 0, 'b' => [ 'x', 'y' ], 'c' => { 'aa' => 'bb' }),
105
+ new_workitem('a' => 1, 'b' => [ 'y', 'z' ], 'c' => { 'cc' => 'dd' })
106
+ ]
107
+
108
+ assert_equal(
109
+ { 'fields' => {
110
+ 'a' => 1,
111
+ 'b' => [ 'x', 'y', 'z' ],
112
+ 'c' => { 'aa' => 'bb', 'cc' => 'dd' }
113
+ } },
114
+ Merger.new.merge_workitems(workitems, 'union'))
115
+ end
116
+
117
+ def test_concat
118
+
119
+ workitems = [
120
+ new_workitem('a' => 0, 'b' => [ 'x', 'y' ], 'c' => { 'aa' => 'bb' }),
121
+ new_workitem('a' => 1, 'b' => [ 'y', 'z' ], 'c' => { 'cc' => 'dd' })
122
+ ]
123
+
124
+ assert_equal(
125
+ { 'fields' => {
126
+ 'a' => 1,
127
+ 'b' => [ 'x', 'y', 'y', 'z' ],
128
+ 'c' => { 'aa' => 'bb', 'cc' => 'dd' }
129
+ } },
130
+ Merger.new.merge_workitems(workitems, 'concat'))
131
+ end
132
+
133
+ def test_deep
134
+
135
+ workitems = [
136
+ new_workitem(
137
+ 'a' => 0,
138
+ 'b' => [ 'x', 'y' ],
139
+ 'c' => { 'aa' => 'bb', 'cc' => { 'a' => 'b' } }),
140
+ new_workitem(
141
+ 'a' => 1,
142
+ 'b' => [ 'y', 'z' ],
143
+ 'c' => { 'dd' => 'ee', 'cc' => { 'c' => 'd' } })
144
+ ]
145
+
146
+ assert_equal(
147
+ { 'fields' => {
148
+ 'a' => 1,
149
+ 'b' => [ 'x', 'y', 'y', 'z' ],
150
+ 'c' => { 'aa' => 'bb', 'cc' => { 'a' => 'b', 'c' => 'd' }, 'dd' => 'ee' }
151
+ } },
152
+ Merger.new.merge_workitems(workitems, 'deep'))
153
+ end
154
+ end
155
+