ruote-maestrodev 2.2.1

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 (265) hide show
  1. data/CHANGELOG.txt +290 -0
  2. data/CREDITS.txt +99 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.rdoc +88 -0
  5. data/Rakefile +108 -0
  6. data/TODO.txt +488 -0
  7. data/lib/ruote.rb +7 -0
  8. data/lib/ruote/context.rb +194 -0
  9. data/lib/ruote/engine.rb +1062 -0
  10. data/lib/ruote/engine/process_error.rb +122 -0
  11. data/lib/ruote/engine/process_status.rb +448 -0
  12. data/lib/ruote/exp/command.rb +87 -0
  13. data/lib/ruote/exp/commanded.rb +69 -0
  14. data/lib/ruote/exp/condition.rb +227 -0
  15. data/lib/ruote/exp/fe_add_branches.rb +138 -0
  16. data/lib/ruote/exp/fe_apply.rb +154 -0
  17. data/lib/ruote/exp/fe_cancel_process.rb +78 -0
  18. data/lib/ruote/exp/fe_command.rb +156 -0
  19. data/lib/ruote/exp/fe_concurrence.rb +321 -0
  20. data/lib/ruote/exp/fe_concurrent_iterator.rb +219 -0
  21. data/lib/ruote/exp/fe_cron.rb +141 -0
  22. data/lib/ruote/exp/fe_cursor.rb +324 -0
  23. data/lib/ruote/exp/fe_define.rb +112 -0
  24. data/lib/ruote/exp/fe_echo.rb +60 -0
  25. data/lib/ruote/exp/fe_equals.rb +115 -0
  26. data/lib/ruote/exp/fe_error.rb +82 -0
  27. data/lib/ruote/exp/fe_filter.rb +648 -0
  28. data/lib/ruote/exp/fe_forget.rb +88 -0
  29. data/lib/ruote/exp/fe_given.rb +154 -0
  30. data/lib/ruote/exp/fe_if.rb +127 -0
  31. data/lib/ruote/exp/fe_inc.rb +205 -0
  32. data/lib/ruote/exp/fe_iterator.rb +234 -0
  33. data/lib/ruote/exp/fe_let.rb +75 -0
  34. data/lib/ruote/exp/fe_listen.rb +304 -0
  35. data/lib/ruote/exp/fe_lose.rb +110 -0
  36. data/lib/ruote/exp/fe_noop.rb +45 -0
  37. data/lib/ruote/exp/fe_once.rb +215 -0
  38. data/lib/ruote/exp/fe_participant.rb +287 -0
  39. data/lib/ruote/exp/fe_read.rb +69 -0
  40. data/lib/ruote/exp/fe_redo.rb +82 -0
  41. data/lib/ruote/exp/fe_ref.rb +152 -0
  42. data/lib/ruote/exp/fe_registerp.rb +110 -0
  43. data/lib/ruote/exp/fe_reserve.rb +126 -0
  44. data/lib/ruote/exp/fe_restore.rb +102 -0
  45. data/lib/ruote/exp/fe_save.rb +72 -0
  46. data/lib/ruote/exp/fe_sequence.rb +59 -0
  47. data/lib/ruote/exp/fe_set.rb +154 -0
  48. data/lib/ruote/exp/fe_subprocess.rb +211 -0
  49. data/lib/ruote/exp/fe_that.rb +92 -0
  50. data/lib/ruote/exp/fe_undo.rb +67 -0
  51. data/lib/ruote/exp/fe_unregisterp.rb +69 -0
  52. data/lib/ruote/exp/fe_wait.rb +95 -0
  53. data/lib/ruote/exp/flowexpression.rb +886 -0
  54. data/lib/ruote/exp/iterator.rb +81 -0
  55. data/lib/ruote/exp/merge.rb +118 -0
  56. data/lib/ruote/exp/ro_attributes.rb +212 -0
  57. data/lib/ruote/exp/ro_filters.rb +136 -0
  58. data/lib/ruote/exp/ro_persist.rb +154 -0
  59. data/lib/ruote/exp/ro_variables.rb +189 -0
  60. data/lib/ruote/exp/ro_vf.rb +68 -0
  61. data/lib/ruote/fei.rb +260 -0
  62. data/lib/ruote/id/mnemo_wfid_generator.rb +43 -0
  63. data/lib/ruote/id/wfid_generator.rb +81 -0
  64. data/lib/ruote/log/default_history.rb +122 -0
  65. data/lib/ruote/log/pretty.rb +176 -0
  66. data/lib/ruote/log/storage_history.rb +159 -0
  67. data/lib/ruote/log/test_logger.rb +208 -0
  68. data/lib/ruote/log/wait_logger.rb +64 -0
  69. data/lib/ruote/part/block_participant.rb +137 -0
  70. data/lib/ruote/part/code_participant.rb +81 -0
  71. data/lib/ruote/part/engine_participant.rb +189 -0
  72. data/lib/ruote/part/local_participant.rb +138 -0
  73. data/lib/ruote/part/no_op_participant.rb +60 -0
  74. data/lib/ruote/part/null_participant.rb +54 -0
  75. data/lib/ruote/part/rev_participant.rb +169 -0
  76. data/lib/ruote/part/smtp_participant.rb +116 -0
  77. data/lib/ruote/part/storage_participant.rb +392 -0
  78. data/lib/ruote/part/template.rb +84 -0
  79. data/lib/ruote/participant.rb +7 -0
  80. data/lib/ruote/reader.rb +278 -0
  81. data/lib/ruote/reader/json.rb +49 -0
  82. data/lib/ruote/reader/radial.rb +290 -0
  83. data/lib/ruote/reader/ruby_dsl.rb +186 -0
  84. data/lib/ruote/reader/xml.rb +99 -0
  85. data/lib/ruote/receiver/base.rb +212 -0
  86. data/lib/ruote/storage/base.rb +364 -0
  87. data/lib/ruote/storage/composite_storage.rb +121 -0
  88. data/lib/ruote/storage/fs_storage.rb +139 -0
  89. data/lib/ruote/storage/hash_storage.rb +211 -0
  90. data/lib/ruote/svc/dispatch_pool.rb +158 -0
  91. data/lib/ruote/svc/dollar_sub.rb +298 -0
  92. data/lib/ruote/svc/error_handler.rb +138 -0
  93. data/lib/ruote/svc/expression_map.rb +97 -0
  94. data/lib/ruote/svc/participant_list.rb +397 -0
  95. data/lib/ruote/svc/tracker.rb +172 -0
  96. data/lib/ruote/svc/treechecker.rb +141 -0
  97. data/lib/ruote/tree_dot.rb +85 -0
  98. data/lib/ruote/util/filter.rb +525 -0
  99. data/lib/ruote/util/hashdot.rb +79 -0
  100. data/lib/ruote/util/look.rb +128 -0
  101. data/lib/ruote/util/lookup.rb +127 -0
  102. data/lib/ruote/util/misc.rb +167 -0
  103. data/lib/ruote/util/ometa.rb +71 -0
  104. data/lib/ruote/util/serializer.rb +103 -0
  105. data/lib/ruote/util/subprocess.rb +88 -0
  106. data/lib/ruote/util/time.rb +100 -0
  107. data/lib/ruote/util/tree.rb +58 -0
  108. data/lib/ruote/version.rb +29 -0
  109. data/lib/ruote/worker.rb +386 -0
  110. data/lib/ruote/workitem.rb +394 -0
  111. data/phil.txt +14 -0
  112. data/ruote.gemspec +44 -0
  113. data/test/bm/ci.rb +55 -0
  114. data/test/bm/ici.rb +71 -0
  115. data/test/bm/juuman.rb +54 -0
  116. data/test/bm/launch_bench.rb +37 -0
  117. data/test/bm/load_26c.rb +97 -0
  118. data/test/bm/mega.rb +64 -0
  119. data/test/bm/seq_thousand.rb +31 -0
  120. data/test/bm/t.rb +35 -0
  121. data/test/functional/base.rb +247 -0
  122. data/test/functional/concurrent_base.rb +98 -0
  123. data/test/functional/crunner.rb +31 -0
  124. data/test/functional/ct_0_concurrence.rb +65 -0
  125. data/test/functional/ct_1_iterator.rb +67 -0
  126. data/test/functional/ct_2_cancel.rb +81 -0
  127. data/test/functional/eft_0_process_definition.rb +65 -0
  128. data/test/functional/eft_10_cancel_process.rb +46 -0
  129. data/test/functional/eft_11_wait.rb +109 -0
  130. data/test/functional/eft_12_listen.rb +500 -0
  131. data/test/functional/eft_13_iterator.rb +342 -0
  132. data/test/functional/eft_14_cursor.rb +456 -0
  133. data/test/functional/eft_15_loop.rb +69 -0
  134. data/test/functional/eft_16_if.rb +183 -0
  135. data/test/functional/eft_17_equals.rb +55 -0
  136. data/test/functional/eft_18_concurrent_iterator.rb +410 -0
  137. data/test/functional/eft_19_reserve.rb +136 -0
  138. data/test/functional/eft_1_echo.rb +68 -0
  139. data/test/functional/eft_20_save.rb +116 -0
  140. data/test/functional/eft_21_restore.rb +61 -0
  141. data/test/functional/eft_22_noop.rb +28 -0
  142. data/test/functional/eft_23_apply.rb +168 -0
  143. data/test/functional/eft_24_add_branches.rb +98 -0
  144. data/test/functional/eft_25_command.rb +28 -0
  145. data/test/functional/eft_26_error.rb +77 -0
  146. data/test/functional/eft_27_inc.rb +280 -0
  147. data/test/functional/eft_28_once.rb +135 -0
  148. data/test/functional/eft_29_cron.rb +64 -0
  149. data/test/functional/eft_2_sequence.rb +58 -0
  150. data/test/functional/eft_30_ref.rb +155 -0
  151. data/test/functional/eft_31_registerp.rb +130 -0
  152. data/test/functional/eft_32_lose.rb +93 -0
  153. data/test/functional/eft_33_let.rb +31 -0
  154. data/test/functional/eft_34_given.rb +123 -0
  155. data/test/functional/eft_35_filter.rb +375 -0
  156. data/test/functional/eft_36_read.rb +95 -0
  157. data/test/functional/eft_3_participant.rb +149 -0
  158. data/test/functional/eft_4_set.rb +296 -0
  159. data/test/functional/eft_5_subprocess.rb +163 -0
  160. data/test/functional/eft_6_concurrence.rb +304 -0
  161. data/test/functional/eft_7_forget.rb +61 -0
  162. data/test/functional/eft_8_undo.rb +114 -0
  163. data/test/functional/eft_9_redo.rb +138 -0
  164. data/test/functional/ft_0_worker.rb +65 -0
  165. data/test/functional/ft_10_dollar.rb +304 -0
  166. data/test/functional/ft_11_recursion.rb +109 -0
  167. data/test/functional/ft_12_launchitem.rb +43 -0
  168. data/test/functional/ft_13_variables.rb +151 -0
  169. data/test/functional/ft_14_re_apply.rb +324 -0
  170. data/test/functional/ft_15_timeout.rb +226 -0
  171. data/test/functional/ft_16_participant_params.rb +98 -0
  172. data/test/functional/ft_17_conditional.rb +102 -0
  173. data/test/functional/ft_18_kill.rb +138 -0
  174. data/test/functional/ft_19_participant_code.rb +67 -0
  175. data/test/functional/ft_1_process_status.rb +796 -0
  176. data/test/functional/ft_20_storage_participant.rb +543 -0
  177. data/test/functional/ft_21_forget.rb +153 -0
  178. data/test/functional/ft_22_process_definitions.rb +90 -0
  179. data/test/functional/ft_23_load_defs.rb +79 -0
  180. data/test/functional/ft_24_block_participant.rb +235 -0
  181. data/test/functional/ft_25_receiver.rb +207 -0
  182. data/test/functional/ft_26_participant_rtimeout.rb +179 -0
  183. data/test/functional/ft_27_var_indirection.rb +128 -0
  184. data/test/functional/ft_28_null_noop_participants.rb +51 -0
  185. data/test/functional/ft_29_part_template.rb +60 -0
  186. data/test/functional/ft_2_errors.rb +380 -0
  187. data/test/functional/ft_30_smtp_participant.rb +122 -0
  188. data/test/functional/ft_31_part_blocking.rb +72 -0
  189. data/test/functional/ft_33_participant_subprocess_priority.rb +32 -0
  190. data/test/functional/ft_34_cursor_rewind.rb +101 -0
  191. data/test/functional/ft_35_add_service.rb +56 -0
  192. data/test/functional/ft_36_storage_history.rb +150 -0
  193. data/test/functional/ft_37_default_history.rb +109 -0
  194. data/test/functional/ft_38_participant_more.rb +193 -0
  195. data/test/functional/ft_39_wait_for.rb +136 -0
  196. data/test/functional/ft_3_participant_registration.rb +574 -0
  197. data/test/functional/ft_40_wait_logger.rb +62 -0
  198. data/test/functional/ft_41_participants.rb +91 -0
  199. data/test/functional/ft_42_storage_copy.rb +71 -0
  200. data/test/functional/ft_43_participant_on_reply.rb +87 -0
  201. data/test/functional/ft_44_var_participant.rb +35 -0
  202. data/test/functional/ft_45_participant_accept.rb +64 -0
  203. data/test/functional/ft_46_launch_single.rb +83 -0
  204. data/test/functional/ft_47_wfid_generator.rb +54 -0
  205. data/test/functional/ft_48_lose.rb +112 -0
  206. data/test/functional/ft_49_engine_on_error.rb +201 -0
  207. data/test/functional/ft_4_cancel.rb +132 -0
  208. data/test/functional/ft_50_engine_config.rb +22 -0
  209. data/test/functional/ft_51_misc.rb +67 -0
  210. data/test/functional/ft_52_case.rb +134 -0
  211. data/test/functional/ft_53_engine_on_terminate.rb +95 -0
  212. data/test/functional/ft_54_patterns.rb +104 -0
  213. data/test/functional/ft_55_engine_participant.rb +303 -0
  214. data/test/functional/ft_56_filter_attribute.rb +259 -0
  215. data/test/functional/ft_57_rev_participant.rb +252 -0
  216. data/test/functional/ft_58_workitem.rb +69 -0
  217. data/test/functional/ft_59_pause.rb +343 -0
  218. data/test/functional/ft_5_on_error.rb +384 -0
  219. data/test/functional/ft_60_code_participant.rb +45 -0
  220. data/test/functional/ft_61_trailing_fields.rb +34 -0
  221. data/test/functional/ft_62_exp_name_and_dollar_substitution.rb +35 -0
  222. data/test/functional/ft_6_on_cancel.rb +221 -0
  223. data/test/functional/ft_7_tags.rb +177 -0
  224. data/test/functional/ft_8_participant_consumption.rb +124 -0
  225. data/test/functional/ft_9_subprocesses.rb +146 -0
  226. data/test/functional/restart_base.rb +34 -0
  227. data/test/functional/rt_0_wait.rb +55 -0
  228. data/test/functional/rt_1_listen.rb +56 -0
  229. data/test/functional/rt_2_errors.rb +56 -0
  230. data/test/functional/rt_3_once.rb +70 -0
  231. data/test/functional/rt_4_cron.rb +64 -0
  232. data/test/functional/rt_5_timeout.rb +60 -0
  233. data/test/functional/rtest.rb +8 -0
  234. data/test/functional/storage_helper.rb +93 -0
  235. data/test/functional/test.rb +44 -0
  236. data/test/functional/vertical.rb +46 -0
  237. data/test/path_helper.rb +15 -0
  238. data/test/test.rb +13 -0
  239. data/test/test_helper.rb +28 -0
  240. data/test/unit/storage.rb +428 -0
  241. data/test/unit/storages.rb +37 -0
  242. data/test/unit/test.rb +28 -0
  243. data/test/unit/ut_0_ruby_reader.rb +223 -0
  244. data/test/unit/ut_11_lookup.rb +122 -0
  245. data/test/unit/ut_13_serializer.rb +65 -0
  246. data/test/unit/ut_14_is_uri.rb +28 -0
  247. data/test/unit/ut_15_util.rb +57 -0
  248. data/test/unit/ut_16_reader.rb +225 -0
  249. data/test/unit/ut_18_engine.rb +47 -0
  250. data/test/unit/ut_19_part_template.rb +86 -0
  251. data/test/unit/ut_1_fei.rb +165 -0
  252. data/test/unit/ut_20_composite_storage.rb +74 -0
  253. data/test/unit/ut_21_svc_participant_list.rb +46 -0
  254. data/test/unit/ut_22_filter.rb +1094 -0
  255. data/test/unit/ut_23_svc_tracker.rb +48 -0
  256. data/test/unit/ut_24_radial_reader.rb +332 -0
  257. data/test/unit/ut_25_merge.rb +113 -0
  258. data/test/unit/ut_3_wait_logger.rb +39 -0
  259. data/test/unit/ut_4_expmap.rb +20 -0
  260. data/test/unit/ut_5_tree.rb +54 -0
  261. data/test/unit/ut_6_condition.rb +303 -0
  262. data/test/unit/ut_7_workitem.rb +99 -0
  263. data/test/unit/ut_8_tree_to_dot.rb +72 -0
  264. data/test/unit/ut_9_xml_reader.rb +61 -0
  265. metadata +504 -0
@@ -0,0 +1,98 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Fri Sep 11 16:09:32 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+
11
+ class EftAddBranchesTest < Test::Unit::TestCase
12
+ include FunctionalBase
13
+
14
+
15
+ def test_add_branches
16
+
17
+ pdef = Ruote.process_definition :name => 'test' do
18
+ concurrent_iterator :on => 'a, b' do
19
+ sequence do
20
+ echo '${v:i}'
21
+ add_branches 'c, d', :if => '${v:ii} == 0'
22
+ end
23
+ end
24
+ end
25
+
26
+ #noisy
27
+
28
+ wfid = @engine.launch(pdef)
29
+ wait_for(wfid)
30
+
31
+ assert_equal %w[ a b c d ], @tracer.to_a.sort
32
+ end
33
+
34
+ def test_add_branches_times
35
+
36
+ pdef = Ruote.process_definition :name => 'test' do
37
+ concurrent_iterator :times => 3 do
38
+ sequence do
39
+ echo '${v:i}'
40
+ add_branches 2, :if => '${v:i} == 1'
41
+ end
42
+ end
43
+ end
44
+
45
+ #noisy
46
+
47
+ wfid = @engine.launch(pdef)
48
+ wait_for(wfid)
49
+
50
+ assert_equal %w[ 1 2 3 4 5 ], @tracer.to_a.sort
51
+ end
52
+
53
+ def test_add_branches_times_and_whatever
54
+
55
+ pdef = Ruote.process_definition :name => 'test' do
56
+ concurrent_iterator :times => 3 do
57
+ sequence do
58
+ echo '${v:i}'
59
+ add_branches 'a, b', :if => '${v:i} == 1'
60
+ end
61
+ end
62
+ end
63
+
64
+ #noisy
65
+
66
+ wfid = @engine.launch(pdef)
67
+ wait_for(wfid)
68
+
69
+ assert_equal %w[ 1 2 3 a b ], @tracer.to_a.sort
70
+ end
71
+
72
+ def test_add_branches_with_tag
73
+
74
+ pdef = Ruote.process_definition :name => 'test' do
75
+ concurrent_iterator :on => 'a, b', :to_v => 'x', :tag => 'here' do
76
+ sequence do
77
+ echo '<:${v:x}'
78
+ concurrent_iterator :on => '0, 1' do
79
+ sequence do
80
+ echo '>:${v:i}'
81
+ add_branch 'c', :ref => 'here', :if => '${v:x} == a'
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ #noisy
89
+
90
+ wfid = @engine.launch(pdef)
91
+ wait_for(wfid)
92
+
93
+ assert_equal(
94
+ %w[ <:a <:b <:c <:c >:0 >:0 >:0 >:0 >:1 >:1 >:1 >:1 ],
95
+ @tracer.to_a.sort)
96
+ end
97
+ end
98
+
@@ -0,0 +1,28 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Mon Sep 14 08:39:35 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+
11
+ class EftCommandTest < Test::Unit::TestCase
12
+ include FunctionalBase
13
+
14
+ def test_ref_to_missing_tag
15
+
16
+ pdef = Ruote.process_definition :name => 'test' do
17
+ sequence do
18
+ _break :ref => 'nemo'
19
+ echo 'done.'
20
+ end
21
+ end
22
+
23
+ #noisy
24
+
25
+ assert_trace 'done.', pdef
26
+ end
27
+ end
28
+
@@ -0,0 +1,77 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Tue Sep 15 19:26:33 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+
11
+ class EftErrorTest < Test::Unit::TestCase
12
+ include FunctionalBase
13
+
14
+ PDEF0 = Ruote.process_definition :name => 'test' do
15
+ sequence do
16
+ echo 'a'
17
+ error
18
+ echo 'b'
19
+ end
20
+ end
21
+
22
+ def test_error
23
+
24
+ #noisy
25
+
26
+ wfid = @engine.launch(PDEF0)
27
+
28
+ wait_for(wfid)
29
+
30
+ ps = @engine.process(wfid)
31
+
32
+ assert_equal(
33
+ 'a', @tracer.to_s)
34
+ assert_equal(
35
+ 1, ps.errors.size)
36
+ assert_equal(
37
+ '#<Ruote::ForcedError: error triggered from process definition>',
38
+ ps.errors.first.message)
39
+ end
40
+
41
+ def test_error_replay
42
+
43
+ #noisy
44
+
45
+ wfid = @engine.launch(PDEF0)
46
+
47
+ wait_for(wfid)
48
+
49
+ ps = @engine.process(wfid)
50
+
51
+ @engine.replay_at_error(ps.errors.first)
52
+
53
+ wait_for(wfid)
54
+
55
+ assert_nil @engine.process(wfid)
56
+ assert_equal "a\nb", @tracer.to_s
57
+ end
58
+
59
+ def test_error_cancel
60
+
61
+ wfid = @engine.launch(PDEF0)
62
+
63
+ wait_for(wfid)
64
+
65
+ ps = @engine.process(wfid)
66
+
67
+ sequence = ps.expressions.find { |fe| fe.fei.expid == '0_0' }
68
+
69
+ @engine.cancel_expression(sequence.fei)
70
+
71
+ wait_for(wfid)
72
+
73
+ assert_nil @engine.process(wfid)
74
+ assert_equal 'a', @tracer.to_s
75
+ end
76
+ end
77
+
@@ -0,0 +1,280 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Sat Sep 19 12:56:16 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+
11
+ class EftIncTest < Test::Unit::TestCase
12
+ include FunctionalBase
13
+
14
+ def test_inc
15
+
16
+ pdef = Ruote.process_definition do
17
+ sequence do
18
+
19
+ set :var => 'x', :value => 0
20
+ set :field => 'y', :value => 0
21
+
22
+ inc 'v:x'
23
+ inc 'f:y'
24
+ inc :var => 'x'
25
+ inc :field => 'y'
26
+
27
+ echo '${v:x}|${f:y}'
28
+ end
29
+ end
30
+
31
+ #noisy
32
+
33
+ assert_trace '2|2', pdef
34
+ end
35
+
36
+ def test_inc_missing
37
+
38
+ pdef = Ruote.process_definition do
39
+ sequence do
40
+
41
+ inc 'v:x'
42
+ inc 'f:y'
43
+ inc :var => 'x'
44
+ inc :field => 'y'
45
+
46
+ echo '${v:x}|${f:y}'
47
+ end
48
+ end
49
+
50
+ #noisy
51
+
52
+ assert_trace '2|2', pdef
53
+ end
54
+
55
+ def test_inc_delta
56
+
57
+ pdef = Ruote.process_definition do
58
+ sequence do
59
+
60
+ inc 'v:x', :val => 2
61
+ inc 'f:y', :val => 3
62
+ inc 'v:z', :val => 1.0
63
+ inc :var => 'x', :val => '4'
64
+ inc :field => 'y', :val => 5
65
+ inc 'v:z', :val => '2.0'
66
+
67
+ echo '${v:x}|${f:y}|${v:z}'
68
+ end
69
+ end
70
+
71
+ #noisy
72
+
73
+ assert_trace '6|8|3.0', pdef
74
+ end
75
+
76
+ def test_inc_v_val
77
+
78
+ pdef = Ruote.process_definition do
79
+ sequence do
80
+
81
+ set 'v:x' => 2
82
+
83
+ inc 'v:x', :v_val => 'x'
84
+
85
+ echo '${v:x}'
86
+ end
87
+ end
88
+
89
+ #noisy
90
+
91
+ assert_trace '4', pdef
92
+ end
93
+
94
+ def test_inc_array
95
+
96
+ @engine.context['ruby_eval_allowed'] = true
97
+
98
+ pdef = Ruote.process_definition do
99
+ sequence do
100
+
101
+ set 'v:x' => %w[ alpha bravo ]
102
+
103
+ inc 'v:x', :val => 'charly'
104
+
105
+ echo '${r:fe.lv("x").join("\n")}'
106
+ end
107
+ end
108
+
109
+ #noisy
110
+
111
+ assert_trace %w[ alpha bravo charly ], pdef
112
+ end
113
+
114
+ def test_inc_array_head
115
+
116
+ #@engine.context['ruby_eval_allowed'] = true
117
+ @engine.configure('ruby_eval_allowed', true)
118
+
119
+ pdef = Ruote.process_definition do
120
+ sequence do
121
+
122
+ set 'v:x' => %w[ alpha bravo ]
123
+
124
+ inc 'v:x', :val => 'charly', :pos => :head
125
+
126
+ echo '${r:fe.lv("x").join("\n")}'
127
+ end
128
+ end
129
+
130
+ #noisy
131
+
132
+ assert_trace %w[ charly alpha bravo ], pdef
133
+ end
134
+
135
+ def test_inc_array_missing
136
+
137
+ @engine.context['ruby_eval_allowed'] = true
138
+
139
+ pdef = Ruote.process_definition do
140
+ sequence do
141
+
142
+ inc 'v:x', :val => 'charly'
143
+ inc 'v:y', :val => 'charly', :pos => :head
144
+
145
+ echo '${r:fe.lv("x").join(".")}'
146
+ echo '${r:fe.lv("y").join(".")}'
147
+ end
148
+ end
149
+
150
+ #noisy
151
+
152
+ assert_trace %w[ charly charly ], pdef
153
+ end
154
+
155
+ def test_dec
156
+
157
+ pdef = Ruote.process_definition do
158
+ sequence do
159
+
160
+ set :var => 'x', :value => 4
161
+ set :field => 'y', :value => 4
162
+
163
+ dec 'v:x'
164
+ dec 'f:y'
165
+ dec 'v:z'
166
+
167
+ echo '${v:x}|${f:y}|${v:z}'
168
+ end
169
+ end
170
+
171
+ #noisy
172
+
173
+ assert_trace '3|3|-1', pdef
174
+ end
175
+
176
+ def test_dec_array
177
+
178
+ @engine.context['ruby_eval_allowed'] = true
179
+
180
+ pdef = Ruote.process_definition do
181
+ sequence do
182
+
183
+ set 'v:x' => %w[ a b c ]
184
+ set 'v:y' => %w[ a b c ]
185
+
186
+ dec 'v:x'
187
+ dec 'v:y', :position => :head
188
+
189
+ echo '${r:fe.lv("x").join(".")}'
190
+ echo '${r:fe.lv("y").join(".")}'
191
+ echo '${v:d}'
192
+ end
193
+ end
194
+
195
+ #noisy
196
+
197
+ assert_trace %w[ a.b b.c a ], pdef
198
+ end
199
+
200
+ def test_dec_to
201
+
202
+ @engine.context['ruby_eval_allowed'] = true
203
+
204
+ pdef = Ruote.process_definition do
205
+ sequence do
206
+
207
+ set 'v:x' => %w[ a b c ]
208
+
209
+ dec 'v:x', :to_var => 'y'
210
+
211
+ echo '${r:fe.lv("x").join(".")}'
212
+ echo '${v:y}'
213
+ end
214
+ end
215
+
216
+ #noisy
217
+
218
+ assert_trace %w[ a.b c ], pdef
219
+ end
220
+
221
+ def test_dec_val
222
+
223
+ @engine.context['ruby_eval_allowed'] = true
224
+
225
+ pdef = Ruote.process_definition do
226
+ sequence do
227
+
228
+ set 'v:x' => %w[ a b c ]
229
+
230
+ dec 'v:x', :val => 'b'
231
+
232
+ echo '${r:fe.lv("x").join(".")}'
233
+ echo '${v:d}'
234
+ end
235
+ end
236
+
237
+ #noisy
238
+
239
+ assert_trace %w[ a.c b ], pdef
240
+ end
241
+
242
+ def test_cursor
243
+
244
+ pdef = Ruote.process_definition do
245
+ sequence do
246
+ set 'v:x' => %w[ a b c d ]
247
+ repeat do
248
+ dec 'v:x', :pos => :head
249
+ _break :unless => '${v:d}'
250
+ echo '${v:d}'
251
+ end
252
+ end
253
+ end
254
+
255
+ #noisy
256
+
257
+ assert_trace %w[ a b c d ], pdef
258
+ end
259
+
260
+ def test_bare_inc
261
+
262
+ pdef = Ruote.process_definition do
263
+ sequence do
264
+ inc
265
+ echo 'done.'
266
+ end
267
+ end
268
+
269
+ #noisy
270
+
271
+ wfid = @engine.launch(pdef)
272
+
273
+ wait_for(wfid)
274
+
275
+ ps = @engine.process(wfid)
276
+
277
+ assert_equal 1, ps.errors.size
278
+ end
279
+ end
280
+