ruote 2.1.11 → 2.2.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 (217) hide show
  1. data/CHANGELOG.txt +60 -0
  2. data/CREDITS.txt +22 -4
  3. data/LICENSE.txt +1 -1
  4. data/README.rdoc +6 -7
  5. data/Rakefile +58 -59
  6. data/TODO.txt +137 -65
  7. data/couch_url.txt +1 -0
  8. data/jruby_issue.txt +32 -0
  9. data/lib/ruote.rb +1 -1
  10. data/lib/ruote/context.rb +12 -10
  11. data/lib/ruote/engine.rb +280 -145
  12. data/lib/ruote/engine/process_error.rb +5 -5
  13. data/lib/ruote/engine/process_status.rb +47 -28
  14. data/lib/ruote/exp/command.rb +7 -10
  15. data/lib/ruote/exp/commanded.rb +2 -2
  16. data/lib/ruote/exp/condition.rb +130 -43
  17. data/lib/ruote/exp/fe_add_branches.rb +2 -2
  18. data/lib/ruote/exp/fe_apply.rb +1 -1
  19. data/lib/ruote/exp/fe_cancel_process.rb +3 -3
  20. data/lib/ruote/exp/fe_command.rb +3 -3
  21. data/lib/ruote/exp/fe_concurrence.rb +4 -4
  22. data/lib/ruote/exp/fe_concurrent_iterator.rb +17 -5
  23. data/lib/ruote/exp/fe_cron.rb +3 -3
  24. data/lib/ruote/exp/fe_cursor.rb +5 -5
  25. data/lib/ruote/exp/fe_define.rb +3 -3
  26. data/lib/ruote/exp/fe_echo.rb +3 -3
  27. data/lib/ruote/exp/fe_equals.rb +2 -2
  28. data/lib/ruote/exp/fe_error.rb +2 -2
  29. data/lib/ruote/exp/fe_filter.rb +519 -0
  30. data/lib/ruote/exp/fe_forget.rb +9 -2
  31. data/lib/ruote/exp/fe_given.rb +154 -0
  32. data/lib/ruote/exp/fe_if.rb +16 -13
  33. data/lib/ruote/exp/fe_inc.rb +3 -3
  34. data/lib/ruote/exp/fe_iterator.rb +4 -4
  35. data/lib/ruote/exp/fe_let.rb +75 -0
  36. data/lib/ruote/exp/fe_listen.rb +68 -12
  37. data/lib/ruote/exp/fe_lose.rb +110 -0
  38. data/lib/ruote/exp/fe_noop.rb +1 -1
  39. data/lib/ruote/exp/{fe_when.rb → fe_once.rb} +25 -21
  40. data/lib/ruote/exp/fe_participant.rb +14 -17
  41. data/lib/ruote/exp/fe_redo.rb +10 -6
  42. data/lib/ruote/exp/fe_ref.rb +1 -1
  43. data/lib/ruote/exp/fe_registerp.rb +112 -0
  44. data/lib/ruote/exp/fe_reserve.rb +3 -3
  45. data/lib/ruote/exp/fe_restore.rb +2 -2
  46. data/lib/ruote/exp/fe_save.rb +2 -2
  47. data/lib/ruote/exp/fe_sequence.rb +3 -4
  48. data/lib/ruote/exp/fe_set.rb +16 -7
  49. data/lib/ruote/exp/fe_subprocess.rb +23 -1
  50. data/lib/ruote/exp/fe_that.rb +92 -0
  51. data/lib/ruote/exp/fe_undo.rb +3 -3
  52. data/lib/ruote/exp/fe_unregisterp.rb +71 -0
  53. data/lib/ruote/exp/fe_wait.rb +2 -2
  54. data/lib/ruote/exp/flowexpression.rb +153 -78
  55. data/lib/ruote/exp/iterator.rb +2 -2
  56. data/lib/ruote/exp/merge.rb +2 -2
  57. data/lib/ruote/exp/ro_attributes.rb +14 -12
  58. data/lib/ruote/exp/ro_filters.rb +136 -0
  59. data/lib/ruote/exp/ro_persist.rb +51 -35
  60. data/lib/ruote/exp/ro_variables.rb +18 -27
  61. data/lib/ruote/fei.rb +73 -33
  62. data/lib/ruote/id/mnemo_wfid_generator.rb +1 -1
  63. data/lib/ruote/id/wfid_generator.rb +11 -4
  64. data/lib/ruote/log/default_history.rb +122 -0
  65. data/lib/ruote/log/pretty.rb +36 -8
  66. data/lib/ruote/log/storage_history.rb +37 -5
  67. data/lib/ruote/log/test_logger.rb +26 -24
  68. data/lib/ruote/log/wait_logger.rb +5 -3
  69. data/lib/ruote/part/block_participant.rb +22 -11
  70. data/lib/ruote/part/engine_participant.rb +6 -7
  71. data/lib/ruote/part/local_participant.rb +6 -12
  72. data/lib/ruote/part/no_op_participant.rb +4 -4
  73. data/lib/ruote/part/null_participant.rb +4 -4
  74. data/lib/ruote/part/smtp_participant.rb +4 -4
  75. data/lib/ruote/part/storage_participant.rb +40 -20
  76. data/lib/ruote/part/template.rb +4 -4
  77. data/lib/ruote/participant.rb +0 -1
  78. data/lib/ruote/{parser.rb → reader.rb} +30 -25
  79. data/lib/ruote/{parser → reader}/ruby_dsl.rb +28 -11
  80. data/lib/ruote/{parser → reader}/xml.rb +6 -5
  81. data/lib/ruote/receiver/base.rb +35 -13
  82. data/lib/ruote/storage/base.rb +20 -18
  83. data/lib/ruote/storage/composite_storage.rb +10 -10
  84. data/lib/ruote/storage/fs_storage.rb +17 -10
  85. data/lib/ruote/storage/hash_storage.rb +29 -18
  86. data/lib/ruote/svc/dispatch_pool.rb +41 -14
  87. data/lib/ruote/svc/dollar_sub.rb +50 -17
  88. data/lib/ruote/svc/error_handler.rb +19 -11
  89. data/lib/ruote/svc/expression_map.rb +4 -4
  90. data/lib/ruote/svc/participant_list.rb +105 -100
  91. data/lib/ruote/svc/tracker.rb +58 -18
  92. data/lib/ruote/svc/treechecker.rb +51 -24
  93. data/lib/ruote/tree_dot.rb +4 -4
  94. data/lib/ruote/util/filter.rb +440 -0
  95. data/lib/ruote/util/hashdot.rb +4 -4
  96. data/lib/ruote/util/look.rb +2 -6
  97. data/lib/ruote/util/lookup.rb +9 -7
  98. data/lib/ruote/util/misc.rb +40 -8
  99. data/lib/ruote/util/ometa.rb +1 -1
  100. data/lib/ruote/util/serializer.rb +4 -4
  101. data/lib/ruote/util/subprocess.rb +29 -9
  102. data/lib/ruote/util/time.rb +4 -4
  103. data/lib/ruote/util/tree.rb +3 -3
  104. data/lib/ruote/version.rb +2 -2
  105. data/lib/ruote/worker.rb +55 -32
  106. data/lib/ruote/workitem.rb +64 -11
  107. data/ruote.gemspec +31 -302
  108. data/test/bm/launch_bench.rb +37 -0
  109. data/test/functional/base.rb +60 -18
  110. data/test/functional/concurrent_base.rb +2 -2
  111. data/test/functional/ct_0_concurrence.rb +1 -1
  112. data/test/functional/ct_1_iterator.rb +1 -1
  113. data/test/functional/ct_2_cancel.rb +1 -1
  114. data/test/functional/eft_0_process_definition.rb +2 -2
  115. data/test/functional/eft_10_cancel_process.rb +1 -1
  116. data/test/functional/eft_11_wait.rb +19 -11
  117. data/test/functional/eft_12_listen.rb +79 -13
  118. data/test/functional/eft_13_iterator.rb +13 -10
  119. data/test/functional/eft_14_cursor.rb +98 -9
  120. data/test/functional/eft_15_loop.rb +6 -4
  121. data/test/functional/eft_16_if.rb +12 -0
  122. data/test/functional/eft_18_concurrent_iterator.rb +31 -32
  123. data/test/functional/eft_19_reserve.rb +4 -4
  124. data/test/functional/eft_1_echo.rb +9 -0
  125. data/test/functional/eft_20_save.rb +4 -4
  126. data/test/functional/{eft_28_when.rb → eft_28_once.rb} +33 -7
  127. data/test/functional/eft_30_ref.rb +17 -2
  128. data/test/functional/eft_31_registerp.rb +130 -0
  129. data/test/functional/eft_32_lose.rb +93 -0
  130. data/test/functional/eft_33_let.rb +31 -0
  131. data/test/functional/eft_34_given.rb +123 -0
  132. data/test/functional/eft_35_filter.rb +269 -0
  133. data/test/functional/eft_3_participant.rb +4 -6
  134. data/test/functional/eft_4_set.rb +16 -2
  135. data/test/functional/eft_5_subprocess.rb +2 -4
  136. data/test/functional/eft_6_concurrence.rb +29 -29
  137. data/test/functional/eft_8_undo.rb +39 -3
  138. data/test/functional/eft_9_redo.rb +94 -2
  139. data/test/functional/ft_10_dollar.rb +81 -2
  140. data/test/functional/ft_11_recursion.rb +13 -17
  141. data/test/functional/ft_12_launchitem.rb +9 -5
  142. data/test/functional/ft_13_variables.rb +7 -9
  143. data/test/functional/ft_14_re_apply.rb +6 -9
  144. data/test/functional/ft_15_timeout.rb +18 -18
  145. data/test/functional/ft_16_participant_params.rb +1 -3
  146. data/test/functional/ft_17_conditional.rb +25 -2
  147. data/test/functional/ft_18_kill.rb +65 -12
  148. data/test/functional/ft_1_process_status.rb +147 -71
  149. data/test/functional/ft_20_storage_participant.rb +0 -1
  150. data/test/functional/ft_21_forget.rb +82 -1
  151. data/test/functional/{ft_24_block_participants.rb → ft_24_block_participant.rb} +42 -11
  152. data/test/functional/ft_25_receiver.rb +47 -17
  153. data/test/functional/{ft_26_participant_timeout.rb → ft_26_participant_rtimeout.rb} +56 -19
  154. data/test/functional/ft_29_part_template.rb +6 -5
  155. data/test/functional/ft_2_errors.rb +21 -37
  156. data/test/functional/ft_30_smtp_participant.rb +1 -1
  157. data/test/functional/ft_31_part_blocking.rb +8 -6
  158. data/test/functional/ft_34_cursor_rewind.rb +13 -10
  159. data/test/functional/ft_35_add_service.rb +1 -1
  160. data/test/functional/ft_36_storage_history.rb +24 -1
  161. data/test/functional/ft_37_default_history.rb +109 -0
  162. data/test/functional/ft_38_participant_more.rb +10 -10
  163. data/test/functional/ft_39_wait_for.rb +12 -9
  164. data/test/functional/ft_3_participant_registration.rb +111 -32
  165. data/test/functional/ft_40_wait_logger.rb +2 -1
  166. data/test/functional/ft_41_participants.rb +30 -4
  167. data/test/functional/ft_43_participant_on_reply.rb +6 -23
  168. data/test/functional/ft_45_participant_accept.rb +4 -4
  169. data/test/functional/ft_46_launch_single.rb +36 -2
  170. data/test/functional/ft_47_wfid_generator.rb +54 -0
  171. data/test/functional/ft_48_lose.rb +112 -0
  172. data/test/functional/ft_49_engine_on_error.rb +201 -0
  173. data/test/functional/ft_4_cancel.rb +66 -6
  174. data/test/functional/ft_50_engine_config.rb +22 -0
  175. data/test/functional/ft_51_misc.rb +67 -0
  176. data/test/functional/ft_52_case.rb +134 -0
  177. data/test/functional/ft_53_engine_on_terminate.rb +95 -0
  178. data/test/functional/ft_54_patterns.rb +104 -0
  179. data/test/functional/{ft_37_engine_participant.rb → ft_55_engine_participant.rb} +4 -5
  180. data/test/functional/ft_56_filter_attribute.rb +259 -0
  181. data/test/functional/ft_5_on_error.rb +77 -30
  182. data/test/functional/ft_6_on_cancel.rb +66 -11
  183. data/test/functional/ft_7_tags.rb +94 -5
  184. data/test/functional/ft_8_participant_consumption.rb +36 -5
  185. data/test/functional/ft_9_subprocesses.rb +10 -10
  186. data/test/functional/rt_1_listen.rb +3 -3
  187. data/test/functional/{rt_3_when.rb → rt_3_once.rb} +4 -4
  188. data/test/functional/storage_helper.rb +15 -13
  189. data/test/functional/test.rb +1 -3
  190. data/test/test_helper.rb +0 -8
  191. data/test/unit/storage.rb +154 -10
  192. data/test/unit/{ut_0_ruby_parser.rb → ut_0_ruby_reader.rb} +61 -11
  193. data/test/unit/ut_11_lookup.rb +7 -0
  194. data/test/unit/ut_13_serializer.rb +1 -1
  195. data/test/unit/ut_15_util.rb +23 -0
  196. data/test/unit/{ut_16_parser.rb → ut_16_reader.rb} +11 -13
  197. data/test/unit/ut_1_fei.rb +57 -10
  198. data/test/unit/ut_20_composite_storage.rb +25 -11
  199. data/test/unit/ut_21_participant_list.rb +47 -0
  200. data/test/unit/ut_22_filter.rb +903 -0
  201. data/test/unit/ut_3_wait_logger.rb +2 -6
  202. data/test/unit/ut_6_condition.rb +164 -17
  203. data/test/unit/ut_7_workitem.rb +28 -0
  204. data/test/unit/ut_8_tree_to_dot.rb +1 -1
  205. data/test/unit/{ut_9_xml_parser.rb → ut_9_xml_reader.rb} +5 -5
  206. metadata +108 -84
  207. data/.gitignore +0 -4
  208. data/examples/barley.rb +0 -391
  209. data/examples/flickr_report.rb +0 -107
  210. data/examples/pong.rb +0 -37
  211. data/examples/ruote_quickstart.rb +0 -43
  212. data/examples/web_first_page.rb +0 -68
  213. data/lib/ruote/part/hash_participant.rb +0 -91
  214. data/test/README.rdoc +0 -15
  215. data/test/functional/crunner.sh +0 -19
  216. data/test/pdef.xml +0 -7
  217. data/test/unit/ut_2_wfidgen.rb +0 -21
@@ -40,6 +40,15 @@ class EftEchoTest < Test::Unit::TestCase
40
40
  assert_trace('a', pdef)
41
41
  end
42
42
 
43
+ def test_echo_text
44
+
45
+ pdef = Ruote.define do
46
+ echo :text => 'a'
47
+ end
48
+
49
+ assert_trace('a', pdef)
50
+ end
51
+
43
52
  #def test_print_escape
44
53
  # pdef = OpenWFE.process_definition :name => 'test' do
45
54
  # sequence do
@@ -7,7 +7,7 @@
7
7
 
8
8
  require File.join(File.dirname(__FILE__), 'base')
9
9
 
10
- require 'ruote/part/hash_participant'
10
+ require 'ruote/participant'
11
11
 
12
12
 
13
13
  class EftSaveTest < Test::Unit::TestCase
@@ -22,7 +22,7 @@ class EftSaveTest < Test::Unit::TestCase
22
22
 
23
23
  #noisy
24
24
 
25
- @engine.register_participant :alpha, Ruote::HashParticipant.new
25
+ @engine.register_participant :alpha, Ruote::StorageParticipant
26
26
 
27
27
  wfid = @engine.launch(pdef)
28
28
 
@@ -43,7 +43,7 @@ class EftSaveTest < Test::Unit::TestCase
43
43
 
44
44
  #noisy
45
45
 
46
- alpha = @engine.register_participant :alpha, Ruote::HashParticipant.new
46
+ alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
47
47
 
48
48
  wfid = @engine.launch(pdef)
49
49
 
@@ -63,7 +63,7 @@ class EftSaveTest < Test::Unit::TestCase
63
63
 
64
64
  #noisy
65
65
 
66
- alpha = @engine.register_participant :alpha, Ruote::HashParticipant.new
66
+ alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
67
67
 
68
68
  wfid = @engine.launch(pdef)
69
69
 
@@ -9,16 +9,18 @@
9
9
 
10
10
  require File.join(File.dirname(__FILE__), 'base')
11
11
 
12
+ require 'ruote/participant'
12
13
 
13
- class EftWhenTest < Test::Unit::TestCase
14
+
15
+ class EftOnceTest < Test::Unit::TestCase
14
16
  include FunctionalBase
15
17
 
16
- def test_when
18
+ def test_once
17
19
 
18
20
  pdef = Ruote.process_definition do
19
21
  echo 'in'
20
22
  concurrence do
21
- _when '${v:ok}', :freq => '1s' do
23
+ once '${v:ok}', :freq => '1s' do
22
24
  echo 'done.'
23
25
  end
24
26
  sequence do
@@ -36,13 +38,13 @@ class EftWhenTest < Test::Unit::TestCase
36
38
  assert_equal 0, @engine.storage.get_many('schedules').size
37
39
  end
38
40
 
39
- def test_when_blocking
41
+ def test_once_blocking
40
42
 
41
43
  pdef = Ruote.process_definition do
42
44
  echo 'in'
43
45
  concurrence do
44
46
  sequence do
45
- _when '${v:ok}', :freq => '1s'
47
+ once '${v:ok}', :freq => '1s'
46
48
  echo 'done.'
47
49
  end
48
50
  sequence do
@@ -63,7 +65,7 @@ class EftWhenTest < Test::Unit::TestCase
63
65
  def test_cancel
64
66
 
65
67
  pdef = Ruote.process_definition do
66
- _when '${v:ok}', :freq => '10d'
68
+ once '${v:ok}', :freq => '10d'
67
69
  echo 'done.'
68
70
  end
69
71
 
@@ -83,7 +85,31 @@ class EftWhenTest < Test::Unit::TestCase
83
85
  assert_equal 0, @engine.storage.get_many('schedules').size
84
86
  end
85
87
 
86
- def test_when_cron
88
+ def test_cancel_once_child_is_active
89
+
90
+ pdef = Ruote.process_definition do
91
+ as_soon_as 'true', :freq => '10d' do
92
+ alpha
93
+ end
94
+ end
95
+
96
+ @engine.register_participant :alpha, Ruote::StorageParticipant
97
+
98
+ #noisy
99
+
100
+ wfid = @engine.launch(pdef)
101
+
102
+ @engine.wait_for(:alpha)
103
+
104
+ @engine.cancel(wfid)
105
+
106
+ @engine.wait_for(wfid)
107
+
108
+ assert_equal 0, @engine.storage_participant.size
109
+ assert_equal 0, @engine.storage.get_many('schedules').size
110
+ end
111
+
112
+ def test_once_cron
87
113
 
88
114
  pdef = Ruote.process_definition do
89
115
  echo 'in'
@@ -16,7 +16,7 @@ class EftRefTest < Test::Unit::TestCase
16
16
  class AlphaParticipant
17
17
  include Ruote::LocalParticipant
18
18
 
19
- def consume (workitem)
19
+ def consume(workitem)
20
20
  @context.tracer << workitem.fei.expid
21
21
  @context.tracer << "\n"
22
22
  reply(workitem)
@@ -125,7 +125,7 @@ class EftRefTest < Test::Unit::TestCase
125
125
  define 'sub0' do
126
126
  alpha
127
127
  end
128
- sub0 :timeout => '2d'
128
+ ref 'sub0', :timeout => '2d'
129
129
  end
130
130
 
131
131
  wfid = @engine.launch(pdef)
@@ -136,5 +136,20 @@ class EftRefTest < Test::Unit::TestCase
136
136
  assert_equal 1, scheds.size
137
137
  assert_equal '0_1', scheds.first['target'].expid
138
138
  end
139
+
140
+ def test_missing_ref_and_undo
141
+
142
+ pdef = Ruote.process_definition do
143
+ ref 'nemo', :on_error => 'undo'
144
+ end
145
+
146
+ #noisy
147
+
148
+ wfid = @engine.launch(pdef)
149
+
150
+ @engine.wait_for(wfid)
151
+
152
+ assert_nil @engine.process(wfid)
153
+ end
139
154
  end
140
155
 
@@ -0,0 +1,130 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Wed Oct 13 21:22:41 JST 2010
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+ require 'ruote/participant'
11
+
12
+
13
+ class EftRegisterpTest < Test::Unit::TestCase
14
+ include FunctionalBase
15
+
16
+ def test_register_forbidden
17
+
18
+ pdef = Ruote.define do
19
+ registerp 'alpha', :class => 'C', :opt0 => 'val0'
20
+ end
21
+
22
+ wfid = @engine.launch(pdef)
23
+
24
+ @engine.wait_for(wfid)
25
+
26
+ err = @engine.errors.first
27
+
28
+ assert_equal(
29
+ "#<ArgumentError: 'registerp_allowed' is set to false, " +
30
+ "cannot [un]register participants from process definitions>",
31
+ err.message)
32
+ end
33
+
34
+ def test_register_from_attributes
35
+
36
+ #@engine.noisy = true
37
+
38
+ @engine.context['registerp_allowed'] = true
39
+
40
+ pdef = Ruote.define do
41
+ registerp 'alpha', :class => 'C', :opt0 => 'val_a'
42
+ registerp /bravo/, :class => 'C', :opt0 => 'val_b'
43
+ registerp :regex => /charly/, :class => 'C', :opt0 => 'val_c'
44
+ registerp :regex => 'delta', :class => 'C', :opt0 => 'val_d'
45
+ end
46
+
47
+ wfid = @engine.launch(pdef)
48
+ @engine.wait_for(wfid)
49
+
50
+ assert_equal(
51
+ [
52
+ [ '^alpha$', [ 'C', { 'opt0' => 'val_a' } ] ],
53
+ [ 'bravo', [ 'C', { 'opt0' => 'val_b' } ] ],
54
+ [ 'charly', [ 'C', { 'opt0' => 'val_c' } ] ],
55
+ [ 'delta', [ 'C', { 'opt0' => 'val_d' } ] ]
56
+ ],
57
+ @engine.participant_list.collect { |e| e.to_a })
58
+ end
59
+
60
+ def test_register_from_workitem
61
+
62
+ #@engine.noisy = true
63
+
64
+ @engine.context['registerp_allowed'] = true
65
+
66
+ pdef = Ruote.define do
67
+ registerp :participants => 'participants'
68
+ registerp :participant => 'participant'
69
+ end
70
+
71
+ wfid = @engine.launch(pdef,
72
+ 'participants' => [
73
+ [ 'alpha', 'C', { 'opt0' => 'val_a' } ],
74
+ [ '/bravo/', 'C', { 'opt0' => 'val_b' } ]
75
+ ],
76
+ 'participant' => [ '/charly/', 'C', { 'opt0' => 'val_c' } ])
77
+
78
+ @engine.wait_for(wfid)
79
+
80
+ assert_equal(
81
+ [
82
+ [ '^alpha$', [ 'C', { 'opt0' => 'val_a' } ] ],
83
+ [ 'bravo', [ 'C', { 'opt0' => 'val_b' } ] ],
84
+ [ 'charly', [ 'C', { 'opt0' => 'val_c' } ] ]
85
+ ],
86
+ @engine.participant_list.collect { |e| e.to_a })
87
+ end
88
+
89
+ def test_register_with_position
90
+
91
+ #@engine.noisy = true
92
+
93
+ @engine.context['registerp_allowed'] = true
94
+
95
+ pdef = Ruote.define do
96
+ registerp 'alpha', :class => 'C', :opt0 => 'val_a'
97
+ registerp /bravo/, :class => 'C', :opt0 => 'val_b', :position => 0
98
+ end
99
+
100
+ wfid = @engine.launch(pdef)
101
+ @engine.wait_for(wfid)
102
+
103
+ assert_equal(
104
+ [
105
+ [ 'bravo', [ 'C', { 'opt0' => 'val_b', 'position' => 0 } ] ],
106
+ [ '^alpha$', [ 'C', { 'opt0' => 'val_a' } ] ]
107
+ ],
108
+ @engine.participant_list.collect { |e| e.to_a })
109
+ end
110
+
111
+ def test_unregister
112
+
113
+ #@engine.noisy = true
114
+
115
+ @engine.context['registerp_allowed'] = true
116
+
117
+ pdef = Ruote.define do
118
+ registerp 'alpha', :class => 'C', :opt0 => 'val_a'
119
+ unregisterp 'alpha'
120
+ end
121
+
122
+ wfid = @engine.launch(pdef)
123
+ @engine.wait_for(wfid)
124
+
125
+ assert_equal(
126
+ [],
127
+ @engine.participant_list.collect { |e| e.to_a })
128
+ end
129
+ end
130
+
@@ -0,0 +1,93 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Thu Nov 25 10:05:28 JST 2010
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+ require 'ruote/participant'
11
+
12
+
13
+ class EftLoseTest < Test::Unit::TestCase
14
+ include FunctionalBase
15
+
16
+ def test_lose_alone
17
+
18
+ pdef = Ruote.process_definition do
19
+ lose
20
+ end
21
+
22
+ #@engine.noisy = true
23
+
24
+ wfid = @engine.launch(pdef)
25
+
26
+ @engine.wait_for(2)
27
+ # wait until the process reaches the 'lose' expression
28
+
29
+ sleep 0.500
30
+
31
+ ps = @engine.process(wfid)
32
+
33
+ assert_equal 0, ps.errors.size
34
+ assert_equal 2, ps.expressions.size
35
+
36
+ # the process is just stuck at the 'lose' expression
37
+ end
38
+
39
+ def test_losing_child
40
+
41
+ pdef = Ruote.process_definition do
42
+ lose do
43
+ alpha
44
+ end
45
+ charly
46
+ end
47
+
48
+ @engine.register_participant '.+' do |wi|
49
+ @tracer << wi.participant_name
50
+ end
51
+
52
+ #@engine.noisy = true
53
+
54
+ wfid = @engine.launch(pdef)
55
+
56
+ @engine.wait_for(7)
57
+ # wait until 'alpha' replies to its parent 'lose'
58
+
59
+ sleep 0.500
60
+
61
+ assert_equal 'alpha', @tracer.to_s
62
+ end
63
+
64
+ def test_cancelling_lose
65
+
66
+ pdef = Ruote.process_definition do
67
+ lose do
68
+ alpha
69
+ end
70
+ end
71
+
72
+ @engine.register_participant '.+', Ruote::StorageParticipant
73
+
74
+ #@engine.noisy = true
75
+
76
+ wfid = @engine.launch(pdef)
77
+
78
+ @engine.wait_for(6)
79
+ # wait until 'alpha' replies to its parent 'lose'
80
+
81
+ sleep 0.500
82
+
83
+ assert_equal 1, @engine.storage_participant.size
84
+
85
+ @engine.cancel_process(wfid)
86
+
87
+ sleep 0.500
88
+
89
+ assert_equal 0, @engine.storage_participant.size
90
+ assert_nil @engine.process(wfid)
91
+ end
92
+ end
93
+
@@ -0,0 +1,31 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Fri Dec 24 15:35:17 JST 2010
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+
11
+ class EftLetTest < Test::Unit::TestCase
12
+ include FunctionalBase
13
+
14
+ def test_let
15
+
16
+ pdef = Ruote.process_definition do
17
+ set 'v:var' => 'val'
18
+ echo "out:${v:var}"
19
+ let do
20
+ set 'v:var' => 'val1'
21
+ echo "in:${v:var}"
22
+ end
23
+ echo "out:${v:var}"
24
+ end
25
+
26
+ #noisy
27
+
28
+ assert_trace %w[ out:val in:val1 out:val ], pdef
29
+ end
30
+ end
31
+
@@ -0,0 +1,123 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Sat Dec 25 12:21:00 JST 2010
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+
11
+ class EftGivenTest < Test::Unit::TestCase
12
+ include FunctionalBase
13
+
14
+ def test_given_that
15
+
16
+ pdef = Ruote.process_definition do
17
+ given do
18
+ that "${state} == ready" do
19
+ echo "a"
20
+ end
21
+ that "${location} == nichoume" do
22
+ echo "b"
23
+ end
24
+ # anything that follows is "else"
25
+ echo "c"
26
+ echo "d"
27
+ end
28
+ end
29
+
30
+ #noisy
31
+
32
+ assert_trace %w[ c d ], pdef, :clear
33
+ assert_trace %w[ a ], { 'state' => 'ready' }, pdef, :clear
34
+ assert_trace %w[ b ], { 'location' => 'nichoume' }, pdef, :clear
35
+ assert_trace %w[ a ], { 'state' => 'ready', 'location' => 'nichoume' }, pdef, :clear
36
+ end
37
+
38
+ def test_given_x_of
39
+
40
+ pdef = Ruote.process_definition do
41
+ given "${status}" do
42
+ of "ready" do
43
+ echo "a"
44
+ end
45
+ of "dead" do
46
+ echo "b"
47
+ end
48
+ echo "c"
49
+ echo "d"
50
+ end
51
+ end
52
+
53
+ #noisy
54
+
55
+ assert_trace %w[ c d ], pdef, :clear
56
+ assert_trace %w[ a ], { 'status' => 'ready' }, pdef, :clear
57
+ assert_trace %w[ b ], { 'status' => 'dead' }, pdef, :clear
58
+ end
59
+
60
+ def test_given_x_of_and_that
61
+
62
+ pdef = Ruote.process_definition do
63
+ given "${status}" do
64
+ that "${location} == higashiyama" do
65
+ echo "a"
66
+ end
67
+ of "ready" do
68
+ echo "b"
69
+ end
70
+ of "dead" do
71
+ echo "c"
72
+ end
73
+ echo "d"
74
+ end
75
+ end
76
+
77
+ assert_trace %w[ d ], {}, pdef, :clear
78
+ assert_trace %w[ b ], { 'status' => 'ready' }, pdef, :clear
79
+ assert_trace %w[ a ], { 'status' => 'dead', 'location' => 'higashiyama' }, pdef, :clear
80
+ end
81
+
82
+ def test_attributes
83
+
84
+ pdef = Ruote.process_definition do
85
+ given :t => "${status}" do
86
+ that :t => "${location} == higashiyama" do
87
+ echo "a"
88
+ end
89
+ of :t => "ready" do
90
+ echo "b"
91
+ end
92
+ of "dead" do
93
+ echo "c"
94
+ end
95
+ echo "d"
96
+ end
97
+ end
98
+
99
+ assert_trace %w[ d ], {}, pdef, :clear
100
+ assert_trace %w[ b ], { 'status' => 'ready' }, pdef, :clear
101
+ assert_trace %w[ a ], { 'status' => 'dead', 'location' => 'higashiyama' }, pdef, :clear
102
+ end
103
+
104
+ def test_match
105
+
106
+ pdef = Ruote.define do
107
+ given "${status}" do
108
+ of "/^a/" do
109
+ echo 'a'
110
+ end
111
+ of /^b/ do
112
+ echo 'b'
113
+ end
114
+ echo 'z'
115
+ end
116
+ end
117
+
118
+ assert_trace %w[ z ], {}, pdef, :clear
119
+ assert_trace %w[ a ], { 'status' => 'alpha' }, pdef, :clear
120
+ assert_trace %w[ b ], { 'status' => 'bravo' }, pdef, :clear
121
+ end
122
+ end
123
+