pione 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (270) hide show
  1. data/.gitignore +4 -3
  2. data/.simplecov +7 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +3 -0
  5. data/History.txt +13 -0
  6. data/README.md +2 -0
  7. data/Rakefile +16 -6
  8. data/bin/pione-val +5 -0
  9. data/example/AbstractRule/package.yml +1 -0
  10. data/example/HelloWorld/package.yml +2 -0
  11. data/example/HelloWorld/scenario/scenario.yml +2 -0
  12. data/example/LoopByTouch/LoopByTouch.pione +28 -0
  13. data/example/LoopByTouch/package.yml +1 -0
  14. data/example/MakePair/package.yml +2 -0
  15. data/example/MakePair/{data → scenario/input}/1.i +0 -0
  16. data/example/MakePair/{data → scenario/input}/2.i +0 -0
  17. data/example/MakePair/{data → scenario/input}/3.i +0 -0
  18. data/example/MakePair/{data → scenario/input}/4.i +0 -0
  19. data/example/MakePair/{data → scenario/input}/5.i +0 -0
  20. data/example/MakePair/scenario/scenario.yml +1 -0
  21. data/example/ScoreAggregation/ScoreAggregation.pione +122 -0
  22. data/example/ScoreAggregation/bin/apply-template.rb +10 -0
  23. data/example/ScoreAggregation/bin/histgram-graph.sh +18 -0
  24. data/example/ScoreAggregation/bin/mean-summary.rb +10 -0
  25. data/example/ScoreAggregation/bin/personal-bar-graph.sh +18 -0
  26. data/example/ScoreAggregation/bin/personal-pre-statistics.rb +37 -0
  27. data/example/ScoreAggregation/bin/total-mean.rb +10 -0
  28. data/example/ScoreAggregation/bin/total-statistics.rb +43 -0
  29. data/example/ScoreAggregation/generate-data.rb +63 -0
  30. data/example/ScoreAggregation/package.yml +1 -0
  31. data/example/ScoreAggregation/scenario/case1/input/A.score +15 -0
  32. data/example/ScoreAggregation/scenario/case1/input/B.score +15 -0
  33. data/example/ScoreAggregation/scenario/case1/input/C.score +15 -0
  34. data/example/ScoreAggregation/scenario/case1/input/D.score +15 -0
  35. data/example/ScoreAggregation/scenario/case1/input/E.score +15 -0
  36. data/example/ScoreAggregation/scenario/case1/input/F.score +15 -0
  37. data/example/ScoreAggregation/scenario/case1/input/G.score +15 -0
  38. data/example/ScoreAggregation/scenario/case1/input/H.score +15 -0
  39. data/example/ScoreAggregation/scenario/case1/input/I.score +15 -0
  40. data/example/ScoreAggregation/scenario/case1/input/J.score +15 -0
  41. data/example/ScoreAggregation/scenario/case1/input/K.score +15 -0
  42. data/example/ScoreAggregation/scenario/case1/input/L.score +15 -0
  43. data/example/ScoreAggregation/scenario/case1/input/M.score +15 -0
  44. data/example/ScoreAggregation/scenario/case1/input/N.score +15 -0
  45. data/example/ScoreAggregation/scenario/case1/input/O.score +15 -0
  46. data/example/ScoreAggregation/scenario/case1/input/P.score +15 -0
  47. data/example/ScoreAggregation/scenario/case1/input/Q.score +15 -0
  48. data/example/ScoreAggregation/scenario/case1/input/R.score +15 -0
  49. data/example/ScoreAggregation/scenario/case1/input/S.score +15 -0
  50. data/example/ScoreAggregation/scenario/case1/input/T.score +15 -0
  51. data/example/ScoreAggregation/scenario/case1/input/U.score +15 -0
  52. data/example/ScoreAggregation/scenario/case1/input/V.score +15 -0
  53. data/example/ScoreAggregation/scenario/case1/input/W.score +15 -0
  54. data/example/ScoreAggregation/scenario/case1/input/X.score +15 -0
  55. data/example/ScoreAggregation/scenario/case1/input/Y.score +15 -0
  56. data/example/ScoreAggregation/scenario/case1/input/Z.score +15 -0
  57. data/example/ScoreAggregation/scenario/case1/input/stat-template.erb +24 -0
  58. data/example/ScoreAggregation/scenario/case1/scenario.yml +3 -0
  59. data/example/{SequentialProcess/SequentialProcess.pione → SerialProcessing/SerialProcessing.pione} +0 -0
  60. data/example/SerialProcessing/package.yml +1 -0
  61. data/example/WorkflowPatterns/01_Sequence/Sequence.pione +21 -0
  62. data/example/WorkflowPatterns/02_PrallelSplit/ParallelSplit.pione +29 -0
  63. data/example/WorkflowPatterns/03_Synchronization/Synchronization.pione +30 -0
  64. data/example/WorkflowPatterns/04_ExclusiveChoice/ExclusiveChoice.pione +44 -0
  65. data/example/WorkflowPatterns/05_SimpleMerge/SimpleMerge.pione +44 -0
  66. data/example/WorkflowPatterns/06_MultiChoice/MultiChoice.pione +48 -0
  67. data/example/WorkflowPatterns/07_StructuredSynchronizingMerge/StructuredSynchronizingMerge.pione +71 -0
  68. data/example/WorkflowPatterns/08_MultiMerge/MultiMerge.pione +44 -0
  69. data/example/WorkflowPatterns/11_ImplicitTermination/ImplicitTermination.pione +29 -0
  70. data/example/WorkflowPatterns/12_MultipleInstancesWithoutSynchronization/MultipleInstancesWithoutSynchronization.pione +29 -0
  71. data/example/WorkflowPatterns/13_MultipleInstancesWithDesignTimeKnowledge/MultipleInstancesWithDesignTimeKnowledge.pione +28 -0
  72. data/example/WorkflowPatterns/14_MultipleInstancesWithRunTimeKnowledge/MultipleInstancesWithRunTimeKnowledge.pione +33 -0
  73. data/example/WorkflowPatterns/33_GeneralizedANDJoin/GeneralizedANDJoin.pione +21 -0
  74. data/example/WorkflowPatterns/37_LocalSynchronizingMerge/LocalSynchronizingMerge.pione +101 -0
  75. data/example/WorkflowPatterns/41_ThreadMerge/ThreadMerge.pione +43 -0
  76. data/example/WorkflowPatterns/42_ThreadSplit/ThreadSplit.pione +16 -0
  77. data/lib/pione.rb +23 -47
  78. data/lib/pione/agent/broker.rb +1 -1
  79. data/lib/pione/agent/input-generator.rb +1 -1
  80. data/lib/pione/agent/logger.rb +62 -49
  81. data/lib/pione/agent/messenger.rb +38 -0
  82. data/lib/pione/agent/rule-provider.rb +3 -3
  83. data/lib/pione/agent/task-worker.rb +14 -2
  84. data/lib/pione/agent/tuple-space-client.rb +1 -1
  85. data/lib/pione/agent/tuple-space-server-client-life-checker.rb +5 -3
  86. data/lib/pione/command.rb +2 -0
  87. data/lib/pione/command/basic-command.rb +1 -1
  88. data/lib/pione/command/pione-client.rb +57 -16
  89. data/lib/pione/command/pione-log.rb +5 -5
  90. data/lib/pione/command/pione-syntax-checker.rb +22 -7
  91. data/lib/pione/command/pione-task-worker.rb +36 -19
  92. data/lib/pione/command/pione-tuple-space-viewer.rb +3 -3
  93. data/lib/pione/command/pione-val.rb +40 -0
  94. data/lib/pione/component.rb +8 -0
  95. data/lib/pione/{system → component}/document.rb +13 -11
  96. data/lib/pione/component/package.rb +269 -0
  97. data/lib/pione/component/rule.rb +206 -0
  98. data/lib/pione/location/basic-location.rb +49 -7
  99. data/lib/pione/location/ftp-location.rb +19 -6
  100. data/lib/pione/location/local-location.rb +15 -6
  101. data/lib/pione/log.rb +4 -1
  102. data/lib/pione/log/{domain-info.rb → domain-log.rb} +23 -11
  103. data/lib/pione/{util/console-message.rb → log/message-log.rb} +16 -15
  104. data/lib/pione/log/process-log.rb +35 -86
  105. data/lib/pione/log/process-record.rb +24 -11
  106. data/lib/pione/log/system-log.rb +107 -0
  107. data/lib/pione/log/xes-log.rb +54 -48
  108. data/lib/pione/model.rb +1 -3
  109. data/lib/pione/model/assignment.rb +1 -0
  110. data/lib/pione/model/basic-model.rb +31 -15
  111. data/lib/pione/model/block.rb +1 -1
  112. data/lib/pione/model/boolean.rb +10 -23
  113. data/lib/pione/model/constraints.rb +12 -0
  114. data/lib/pione/model/data-expr.rb +31 -36
  115. data/lib/pione/model/feature-expr.rb +6 -23
  116. data/lib/pione/model/float.rb +29 -18
  117. data/lib/pione/model/integer.rb +44 -56
  118. data/lib/pione/model/keyed-sequence.rb +11 -4
  119. data/lib/pione/model/message.rb +4 -4
  120. data/lib/pione/model/ordinal-sequence.rb +12 -14
  121. data/lib/pione/model/package-expr.rb +53 -0
  122. data/lib/pione/model/parameters.rb +12 -11
  123. data/lib/pione/model/pione-method.rb +2 -2
  124. data/lib/pione/model/rule-expr.rb +30 -52
  125. data/lib/pione/model/sequence.rb +26 -26
  126. data/lib/pione/model/string.rb +13 -54
  127. data/lib/pione/model/ticket-expr.rb +12 -53
  128. data/lib/pione/model/type.rb +7 -1
  129. data/lib/pione/model/variable-table.rb +5 -4
  130. data/lib/pione/model/variable.rb +0 -5
  131. data/lib/pione/option/common-option.rb +2 -1
  132. data/lib/pione/option/task-worker-owner-option.rb +1 -1
  133. data/lib/pione/patch/drb-patch.rb +1 -1
  134. data/lib/pione/patch/em-ftpd-patch.rb +7 -0
  135. data/lib/pione/patch/rinda-patch.rb +53 -0
  136. data/lib/pione/patch/uri-patch.rb +5 -0
  137. data/lib/pione/relay/relay-socket.rb +2 -2
  138. data/lib/pione/rule-handler/action-handler.rb +71 -64
  139. data/lib/pione/rule-handler/basic-handler.rb +50 -32
  140. data/lib/pione/rule-handler/flow-handler.rb +51 -34
  141. data/lib/pione/rule-handler/update-criteria.rb +43 -20
  142. data/lib/pione/system.rb +13 -0
  143. data/lib/pione/system/domain-info.rb +34 -0
  144. data/lib/pione/system/global.rb +8 -1
  145. data/lib/pione/system/object.rb +1 -1
  146. data/lib/pione/transformer/expr-transformer.rb +3 -3
  147. data/lib/pione/transformer/literal-transformer.rb +3 -3
  148. data/lib/pione/transformer/rule-definition-transformer.rb +11 -9
  149. data/lib/pione/tuple-space/tuple-space-server-interface.rb +19 -1
  150. data/lib/pione/tuple-space/tuple-space-server.rb +9 -2
  151. data/lib/pione/tuple.rb +30 -0
  152. data/lib/pione/tuple/data-null-tuple.rb +14 -0
  153. data/lib/pione/tuple/message-tuple.rb +7 -0
  154. data/lib/pione/tuple/process-log-tuple.rb +13 -0
  155. data/lib/pione/tuple/touch-tuple.rb +14 -0
  156. data/lib/pione/uri-scheme/myftp-scheme.rb +45 -0
  157. data/lib/pione/util.rb +18 -0
  158. data/lib/pione/util/cpu.rb +20 -0
  159. data/lib/pione/util/error-report.rb +9 -1
  160. data/lib/pione/util/evaluatable.rb +47 -0
  161. data/lib/pione/util/ftp-server.rb +468 -0
  162. data/lib/pione/util/id.rb +39 -0
  163. data/lib/pione/util/indentation.rb +19 -0
  164. data/lib/pione/util/ip-address.rb +35 -0
  165. data/lib/pione/util/misc.rb +0 -47
  166. data/lib/pione/util/uuid.rb +28 -0
  167. data/lib/pione/util/variable-holdable.rb +38 -0
  168. data/lib/pione/version.rb +1 -1
  169. data/pione.gemspec +16 -14
  170. data/test/agent/spec_logger.rb +35 -44
  171. data/test/agent/spec_messenger.rb +25 -0
  172. data/test/agent/spec_rule-provider.rb +1 -1
  173. data/test/agent/spec_task-worker.rb +7 -13
  174. data/test/{system → component}/spec_document.rb +20 -20
  175. data/test/component/spec_package.rb +77 -0
  176. data/test/component/spec_package/TestPackage/Test.pione +14 -0
  177. data/test/component/spec_package/TestPackage/bin/count +3 -0
  178. data/test/component/spec_package/TestPackage/package.yml +7 -0
  179. data/test/component/spec_package/TestPackage/scenario/case1/input/1.txt +1 -0
  180. data/test/component/spec_package/TestPackage/scenario/case1/scenario.yml +1 -0
  181. data/test/component/spec_rule.rb +140 -0
  182. data/test/endurance-test/graph.plt +12 -0
  183. data/test/endurance-test/run.sh +65 -0
  184. data/test/location/location-behavior.rb +125 -0
  185. data/test/location/spec_ftp-location.rb +28 -90
  186. data/test/location/spec_local-location.rb +26 -76
  187. data/test/log/raw-process-log/pione-process.log +710 -0
  188. data/test/log/spec_domain-log.rb +57 -0
  189. data/test/log/spec_message-log.rb +44 -0
  190. data/test/log/spec_process-log.rb +88 -0
  191. data/test/log/spec_process-record.rb +148 -0
  192. data/test/log/spec_system-log.rb +142 -0
  193. data/test/log/spec_xes-log.rb +2 -2
  194. data/test/model/spec_assignment.rb +26 -25
  195. data/test/model/spec_block.rb +51 -97
  196. data/test/model/spec_boolean.rb +0 -5
  197. data/test/model/spec_call-rule.rb +6 -6
  198. data/test/model/spec_data-expr.rb +0 -7
  199. data/test/model/spec_data-expr.yml +8 -0
  200. data/test/model/spec_float.rb +1 -1
  201. data/test/model/spec_float.yml +13 -0
  202. data/test/model/spec_integer.rb +1 -1
  203. data/test/model/spec_integer.yml +12 -1
  204. data/test/model/spec_keyed-sequence.yml +5 -0
  205. data/test/model/spec_message.rb +2 -4
  206. data/test/model/spec_package-expr.rb +19 -0
  207. data/test/model/spec_parameters.rb +56 -88
  208. data/test/model/spec_pione-method.rb +15 -14
  209. data/test/model/spec_rule-expr.rb +4 -52
  210. data/test/model/spec_rule-expr.yml +11 -0
  211. data/test/model/spec_sequence.yml +6 -0
  212. data/test/model/spec_string.rb +21 -13
  213. data/test/model/spec_string.yml +10 -2
  214. data/test/model/spec_ticket-expr.rb +25 -3
  215. data/test/model/spec_variable.rb +8 -8
  216. data/test/rule-handler/spec_action-handler.pione +37 -0
  217. data/test/rule-handler/spec_action-handler.rb +41 -97
  218. data/test/rule-handler/spec_flow-handler.rb +24 -30
  219. data/test/rule-handler/spec_update-criteria.pione +16 -0
  220. data/test/rule-handler/spec_update-criteria.rb +7 -4
  221. data/test/rule-handler/spec_update-criteria.yml +191 -0
  222. data/test/system/spec_domain-info.rb +25 -0
  223. data/test/test-util.rb +38 -228
  224. data/test/transformer/spec_block-transformer.rb +1 -1
  225. data/test/transformer/spec_expr-transformer.rb +30 -39
  226. data/test/transformer/spec_flow-element-transformer.rb +17 -17
  227. data/test/transformer/spec_literal-transformer.rb +3 -3
  228. data/test/transformer/spec_rule-definition-transformer.rb +55 -76
  229. data/test/{spec_data-finder.rb → tuple-space/spec_data-finder.rb} +1 -1
  230. data/test/{spec_data-finder.yml → tuple-space/spec_data-finder.yml} +0 -0
  231. data/test/tuple/spec_data-tuple.rb +5 -76
  232. data/test/tuple/spec_finished-tuple.rb +5 -46
  233. data/test/tuple/spec_message-tuple.rb +10 -0
  234. data/test/tuple/spec_task-tuple.rb +4 -110
  235. data/test/tuple/spec_touch-tuple.rb +14 -0
  236. data/test/tuple/tuple-behavior.rb +14 -0
  237. data/test/uri-scheme/spec_local-scheme.rb +1 -1
  238. data/test/uri-scheme/spec_myftp-scheme.rb +73 -0
  239. data/test/uri-scheme/spec_myftp-scheme.yml +85 -0
  240. data/test/util/spec_cpu.rb +8 -0
  241. data/test/util/spec_error-report.rb +42 -0
  242. data/test/util/spec_evaluatable.rb +18 -0
  243. data/test/util/spec_ftp-server.rb +249 -0
  244. data/test/util/spec_id.pione +14 -0
  245. data/test/util/spec_id.rb +77 -0
  246. data/test/util/spec_indentation.rb +77 -0
  247. data/test/util/spec_ip-address.rb +15 -0
  248. data/test/util/spec_uuid.rb +11 -0
  249. data/test/util/spec_variable-holdable.rb +69 -0
  250. metadata +282 -83
  251. data/bin/pione-eval +0 -111
  252. data/demo/demo.rb +0 -311
  253. data/demo/public/base.css +0 -94
  254. data/demo/public/demo.js +0 -107
  255. data/demo/public/index.html +0 -91
  256. data/demo/public/jquery-1.8.3.min.js +0 -2
  257. data/lib/pione/model/binary-operator.rb +0 -90
  258. data/lib/pione/model/list.rb +0 -108
  259. data/lib/pione/model/package.rb +0 -56
  260. data/lib/pione/model/rule-io.rb +0 -178
  261. data/lib/pione/model/rule.rb +0 -295
  262. data/lib/pione/system/identifier.rb +0 -61
  263. data/lib/pione/tuple/log-tuple.rb +0 -14
  264. data/lib/pione/util/terminal.rb +0 -78
  265. data/test/log/data/sample.log +0 -1003
  266. data/test/model/spec_binary-operator.rb +0 -39
  267. data/test/model/spec_package.rb +0 -15
  268. data/test/model/spec_rule.rb +0 -158
  269. data/test/spec_identifier.rb +0 -29
  270. data/test/spec_log.rb +0 -52
@@ -0,0 +1,25 @@
1
+ require_relative "../test-util"
2
+
3
+ describe "Pione::System::DomainInfo" do
4
+ before do
5
+ @vtable = Model::VariableTable.new
6
+ @vtable.set(Variable.new("A"), Model::PioneInteger.new(1).to_seq)
7
+ @vtable.set(Variable.new("B"), Model::PioneFloat.new(1.23).to_seq)
8
+ @vtable.set(Variable.new("C"), Model::PioneString.new("A").to_seq)
9
+ @vtable.set(Variable.new("D"), Model::PioneBoolean.new(true).to_seq)
10
+ @location = Location[Temppath.create].tap do |location|
11
+ System::DomainInfo.new(@vtable).write(location)
12
+ end
13
+ end
14
+
15
+ it "should write a domain info file" do
16
+ location = Location[Temppath.create]
17
+ System::DomainInfo.new(@vtable).write(location)
18
+ location.should.exist
19
+ end
20
+
21
+ it "should read a domain info file" do
22
+ System::DomainInfo.read(@location).variable_table.should == @vtable
23
+ end
24
+ end
25
+
data/test/test-util.rb CHANGED
@@ -43,9 +43,9 @@ module TestUtil
43
43
 
44
44
  def create_tuple_space_server
45
45
  # make drb server and it's connection
46
- tuple_space_server = Pione::TupleSpace::TupleSpaceServer.new
46
+ tuple_space_server = Pione::TupleSpace::TupleSpaceServer.new({}, false)
47
47
  # base uri
48
- tuple_space_server.write(Tuple[:base_location].new("local:#{Dir.mktmpdir('pione-test')}/"))
48
+ tuple_space_server.write(Tuple[:base_location].new(Location[Temppath.create]))
49
49
  # set default tuple space server
50
50
  set_tuple_space_server tuple_space_server
51
51
  # return the connection
@@ -115,19 +115,26 @@ end
115
115
 
116
116
  module TestUtil::Transformer
117
117
  TestCase = Struct.new(:string, :expected)
118
+ TestCaseEq = Struct.new(:string, :expected)
118
119
 
119
120
  def spec(name, parser, context, &b)
120
121
  testcases = Array.new
122
+
121
123
  def testcases.tc(obj)
122
124
  case obj
123
125
  when Hash
124
126
  obj.each do |key, val|
125
- push(TestCase.new(key, val))
127
+ push(TestCaseEq.new(key, val))
126
128
  end
127
129
  else
128
- push(TestCase.new(obj, yield))
130
+ push(TestCaseEq.new(obj, yield))
129
131
  end
130
132
  end
133
+
134
+ def testcases.transform(obj, &b)
135
+ push(TestCase.new(obj, b))
136
+ end
137
+
131
138
  testcases.instance_eval(&b)
132
139
  context.describe name do
133
140
  testcases.each do |tc|
@@ -135,7 +142,12 @@ module TestUtil::Transformer
135
142
  res = DocumentTransformer.new.apply(
136
143
  DocumentParser.new.send(parser).parse(tc.string)
137
144
  )
138
- res.should == tc.expected
145
+ case tc
146
+ when TestCaseEq
147
+ res.should == tc.expected
148
+ when TestCase
149
+ tc.expected.call(res)
150
+ end
139
151
  end
140
152
  end
141
153
  end
@@ -151,12 +163,6 @@ class Hash
151
163
  hash[key.to_sym] = (val.kind_of?(Hash) ? val.symbolize_keys : val)
152
164
  end
153
165
  end
154
-
155
- def to_params
156
- Parameters.new(
157
- Hash[map{|key, val| [Pione::Model::Variable.new(key), val.to_pione]}]
158
- )
159
- end
160
166
  end
161
167
 
162
168
  # Bacon::Context extension.
@@ -170,10 +176,8 @@ class Bacon::Context
170
176
  end
171
177
 
172
178
  module TestUtil
179
+ # Test pione method.
173
180
  def test_pione_method(name)
174
- #
175
- # test cases
176
- #
177
181
  yamlname = 'spec_%s.yml' % name
178
182
  ymlpath = File.join(File.dirname(__FILE__), 'model', yamlname)
179
183
  testcases = YAML.load_file(ymlpath)
@@ -192,6 +196,26 @@ module TestUtil
192
196
  end
193
197
  end
194
198
  end
199
+
200
+ # Test uri scheme.
201
+ def test_uri_scheme(name)
202
+ yamlname = 'spec_%s.yml' % name
203
+ ymlpath = File.join(File.dirname(__FILE__), 'uri-scheme', yamlname)
204
+ testcases = YAML.load_file(ymlpath)
205
+
206
+ describe "uri scheme test cases" do
207
+ testcases.each do |testcase|
208
+ uri = testcase.keys.first
209
+ it uri do
210
+ testcase[uri].keys.each do |name|
211
+ expect = testcase[uri][name]
212
+ expect = nil if expect == "nil"
213
+ URI.parse(uri).__send__(name).should == expect
214
+ end
215
+ end
216
+ end
217
+ end
218
+ end
195
219
  end
196
220
 
197
221
  module Pione::TupleSpace
@@ -251,220 +275,6 @@ module Pione::Agent
251
275
  end
252
276
  end
253
277
 
254
- begin
255
- require 'em-ftpd'
256
- require 'pione/patch/em-ftpd-patch'
257
-
258
- module EM::FTPD::Files
259
- def puts(*args)
260
- # ignored
261
- end
262
- end
263
- rescue
264
-
265
- end
266
-
267
-
268
- module TestUtil
269
- class FTPServer
270
- class AuthInfo
271
- attr_reader :user
272
- attr_reader :password
273
-
274
- def initialize
275
- @user = Pione::Util.generate_uuid
276
- @password = Pione::Util.generate_uuid
277
- end
278
- end
279
-
280
- class OnMemoryFS
281
- attr_reader :directory
282
- attr_reader :file
283
- attr_reader :mtime
284
-
285
- def initialize
286
- @directory = {"/" => Set.new}
287
- @file = {}
288
- @mtime = {}
289
- end
290
-
291
- def clear
292
- @directory.clear
293
- @directory["/"] = Set.new
294
- @file.clear
295
- @mtime.clear
296
- end
297
- end
298
-
299
- PORT = 39123
300
- AUTH_INFO = AuthInfo.new
301
- FS = OnMemoryFS.new
302
-
303
- class << self
304
- def enabled?
305
- begin
306
- require 'em-ftpd'
307
- return true
308
- rescue
309
- return false
310
- end
311
- end
312
-
313
- # Start FTP server.
314
- def start
315
- FS.clear
316
- @thread = Thread.new do
317
- EventMachine.run do
318
- EventMachine.start_server("0.0.0.0", PORT, EM::FTPD::Server, self)
319
- end
320
- end
321
- end
322
-
323
- def stop
324
- FS.clear
325
- EventMachine.stop
326
- @thread.kill if @thread
327
- end
328
-
329
- def make_location(path)
330
- Location["ftp://%s:%s@localhost:%i%s" % [AUTH_INFO.user, AUTH_INFO.password, PORT, path]]
331
- end
332
- end
333
-
334
- def initialize
335
- @directory = FS.directory
336
- @file = FS.file
337
- @mtime = FS.mtime
338
- @user = AUTH_INFO.user
339
- @password = AUTH_INFO.password
340
- end
341
-
342
- def change_dir(path, &b)
343
- yield @directory.keys.include?(path)
344
- end
345
-
346
- def dir_contents(path, &b)
347
- if @directory.has_key?(path) and @directory[path]
348
- entries = @directory[path].map do |entry|
349
- entry_path = Pathname.new(File.join(path, entry)).cleanpath.to_s
350
- if @directory.has_key?(entry_path)
351
- dir_item(entry)
352
- else
353
- file_item(entry, @file[entry_path].size)
354
- end
355
- end
356
- yield entries
357
- else
358
- yield Set.new
359
- end
360
- end
361
-
362
- def authenticate(user, password, &b)
363
- # yield @user == user && @password == password
364
- yield true
365
- end
366
-
367
- def bytes(path, &b)
368
- path = Pathname.new(path).cleanpath.to_s
369
- if @file.has_key?(path)
370
- yield @file[path].size
371
- elsif @directory.has_key?(path)
372
- yield -1
373
- else
374
- yield false
375
- end
376
- end
377
-
378
- def get_file(path, &block)
379
- path = Pathname.new(path).cleanpath.to_s
380
- if @file.has_key?(path)
381
- yield @file[path]
382
- else
383
- yeild false
384
- end
385
- end
386
-
387
- def put_file(path, data, &b)
388
- path = Pathname.new(path).cleanpath
389
- dir = path.dirname.to_s
390
- filename = path.basename.to_s
391
- if @directory.has_key?(dir) and filename
392
- @directory[dir] << filename
393
- @file[path.to_s] = File.read(data)
394
- @mtime[path.to_s] = Time.now
395
- yield data.size
396
- else
397
- yield false
398
- end
399
- end
400
-
401
- def delete_file(path, &b)
402
- path = Pathname.new(path).cleanpath
403
- dir = path.dirname.to_s
404
- filename = path.basename.to_s
405
- if @directory.has_key?(dir) and @directory[dir].include?(filename)
406
- @directory[dir].delete(dir)
407
- @file.delete(path.to_s)
408
- @mtime.delete(path.to_s)
409
- yield true
410
- else
411
- yield false
412
- end
413
- end
414
-
415
- def rename_file(from, to, &b)
416
- from_path = Pathname.new(from).cleanpath
417
- from_dir = from_path.dirname.to_s
418
- from_filename = from_path.basename.to_s
419
- to_path = Pathname.new(to).cleanpath
420
- to_dir = to_path.dirname.to_s
421
- to_filename = to_path.basename.to_s
422
- if @file.has_key?(from_path.to_s) && @directory.has_key?(to_dir)
423
- data = @file[from_path.to_s]
424
- @file.delete(from_path.to_s)
425
- @directory[from_dir].delete(from_filename)
426
- @file[to_path.to_s] = data
427
- @directory[to_dir] << to_filename
428
- yield true
429
- else
430
- yield false
431
- end
432
- end
433
-
434
- def make_dir(path, &b)
435
- path = Pathname.new(path).cleanpath
436
- dir = path.dirname.to_s
437
- basename = path.basename.to_s
438
- if @directory.has_key?(path.to_s) or not(@directory.has_key?(dir))
439
- yield false
440
- else
441
- @directory[path.to_s] = Set.new
442
- @directory[dir] << basename
443
- yield true
444
- end
445
- end
446
-
447
- def mtime(path)
448
- path = Pathname.new(path).cleanpath.to_s
449
- if @file[path]
450
- yield @mtime[path]
451
- else
452
- yield false
453
- end
454
- end
455
-
456
- private
457
-
458
- def dir_item(name)
459
- EM::FTPD::DirectoryItem.new(:name => name, :directory => true, :size => 0)
460
- end
461
-
462
- def file_item(name, bytes)
463
- EM::FTPD::DirectoryItem.new(:name => name, :directory => false, :size => bytes)
464
- end
465
- end
466
- end
467
-
468
278
  def setup_for_test
469
279
  include Pione
470
280
  Thread.abort_on_exception = true
@@ -18,7 +18,7 @@ describe 'Pione::Transformer::BlockTransformer' do
18
18
  End
19
19
  STRING
20
20
  FlowBlock.new(
21
- CallRule.new(RuleExpr.new(Package.new("main"), "Test"))
21
+ CallRule.new(RuleExpr.new(PackageExpr.new("main"), "Test"))
22
22
  )
23
23
  end
24
24
  end
@@ -1,9 +1,18 @@
1
1
  require_relative '../test-util'
2
2
 
3
+ $a = PioneString.new("a")
4
+ $b = PioneString.new("b")
5
+ $c = PioneString.new("c")
6
+ $abc = PioneString.new("abc")
7
+ $var_x = Variable.new("X")
8
+ $var_y = Variable.new("Y")
9
+ $var_z = Variable.new("Z")
10
+
3
11
  describe 'Pione::Transformer::ExprTransformer' do
12
+
4
13
  transformer_spec("binary operator", :expr) do
5
14
  tc "1 + 2" do
6
- BinaryOperator.new(
15
+ Message.new(
7
16
  "+",
8
17
  IntegerSequence.new([1.to_pione]),
9
18
  IntegerSequence.new([2.to_pione])
@@ -11,41 +20,25 @@ describe 'Pione::Transformer::ExprTransformer' do
11
20
  end
12
21
 
13
22
  tc '"a" + "b"' do
14
- BinaryOperator.new(
15
- "+",
16
- StringSequence.new(["a".to_pione]),
17
- StringSequence.new(["b".to_pione])
18
- )
23
+ Message.new("+", StringSequence.new([$a]), StringSequence.new([$b]))
19
24
  end
20
25
 
21
26
  tc "false || true" do
22
- BinaryOperator.new(
27
+ Message.new(
23
28
  "||",
24
29
  BooleanSequence.new([PioneBoolean.false]),
25
30
  BooleanSequence.new([PioneBoolean.true])
26
31
  )
27
32
  end
28
33
 
29
- tc "$Var * 3" do
30
- BinaryOperator.new(
31
- "*",
32
- Variable.new("Var"),
33
- IntegerSequence.new([3.to_pione])
34
- )
34
+ tc "$X * 3" do
35
+ Message.new("*", $var_x, IntegerSequence.new([3.to_pione]))
35
36
  end
36
37
 
37
- tc "($Var1 == \"a\") && ($Var2 == \"b\")" do
38
- left = BinaryOperator.new(
39
- "==",
40
- Variable.new("Var1"),
41
- StringSequence.new(["a".to_pione])
42
- )
43
- right = BinaryOperator.new(
44
- "==",
45
- Variable.new("Var2"),
46
- StringSequence.new([PioneString.new("b")])
47
- )
48
- BinaryOperator.new("&&", left, right)
38
+ tc "($X == \"a\") && ($Y == \"b\")" do
39
+ left = Message.new("==", $var_x, StringSequence.new([$a]))
40
+ right = Message.new("==", $var_y, StringSequence.new([$b]))
41
+ Message.new("&&", left, right)
49
42
  end
50
43
  end
51
44
 
@@ -71,7 +64,7 @@ describe 'Pione::Transformer::ExprTransformer' do
71
64
  tc "\"abc\".index(1,1)" do
72
65
  Message.new(
73
66
  "index",
74
- StringSequence.new(["abc".to_pione]),
67
+ StringSequence.new([$abc]),
75
68
  IntegerSequence.new([1.to_pione]),
76
69
  IntegerSequence.new([1.to_pione])
77
70
  )
@@ -80,7 +73,7 @@ describe 'Pione::Transformer::ExprTransformer' do
80
73
  tc "(1 + 2).prev" do
81
74
  Message.new(
82
75
  "prev",
83
- BinaryOperator.new(
76
+ Message.new(
84
77
  "+",
85
78
  IntegerSequence.new([1.to_pione]),
86
79
  IntegerSequence.new([2.to_pione])
@@ -89,7 +82,7 @@ describe 'Pione::Transformer::ExprTransformer' do
89
82
  end
90
83
 
91
84
  tc "abc.sync" do
92
- rule = RuleExpr.new(Package.new("main"), "abc")
85
+ rule = RuleExpr.new(PackageExpr.new("main"), "abc")
93
86
  Message.new("sync", rule)
94
87
  end
95
88
 
@@ -111,24 +104,22 @@ describe 'Pione::Transformer::ExprTransformer' do
111
104
  Parameters.new({})
112
105
  end
113
106
 
114
- tc "{var1: 1}" do
115
- Parameters.new(
116
- {Variable.new("var1") => IntegerSequence.new([PioneInteger.new(1)])}
117
- )
107
+ tc "{X: 1}" do
108
+ Parameters.new({$var_x => IntegerSequence.new([PioneInteger.new(1)])})
118
109
  end
119
110
 
120
- tc "{var1: 1, var2: 2}" do
111
+ tc "{X: 1, Y: 2}" do
121
112
  Parameters.new(
122
- { Variable.new("var1") => IntegerSequence.new([PioneInteger.new(1)]),
123
- Variable.new("var2") => IntegerSequence.new([PioneInteger.new(2)]) }
113
+ { $var_x => IntegerSequence.new([PioneInteger.new(1)]),
114
+ $var_y => IntegerSequence.new([PioneInteger.new(2)]) }
124
115
  )
125
116
  end
126
117
 
127
- tc "{var1: \"a\", var2: \"b\", var3: \"c\"}" do
118
+ tc "{X: \"a\", Y: \"b\", Z: \"c\"}" do
128
119
  Parameters.new(
129
- { Variable.new("var1") => StringSequence.new([PioneString.new("a")]),
130
- Variable.new("var2") => StringSequence.new([PioneString.new("b")]),
131
- Variable.new("var3") => StringSequence.new([PioneString.new("c")]) }
120
+ { $var_x => StringSequence.new([$a]),
121
+ $var_y => StringSequence.new([$b]),
122
+ $var_z => StringSequence.new([$c]) }
132
123
  )
133
124
  end
134
125
  end