pione 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -3
- data/.simplecov +7 -0
- data/.travis.yml +8 -0
- data/Gemfile +3 -0
- data/History.txt +13 -0
- data/README.md +2 -0
- data/Rakefile +16 -6
- data/bin/pione-val +5 -0
- data/example/AbstractRule/package.yml +1 -0
- data/example/HelloWorld/package.yml +2 -0
- data/example/HelloWorld/scenario/scenario.yml +2 -0
- data/example/LoopByTouch/LoopByTouch.pione +28 -0
- data/example/LoopByTouch/package.yml +1 -0
- data/example/MakePair/package.yml +2 -0
- data/example/MakePair/{data → scenario/input}/1.i +0 -0
- data/example/MakePair/{data → scenario/input}/2.i +0 -0
- data/example/MakePair/{data → scenario/input}/3.i +0 -0
- data/example/MakePair/{data → scenario/input}/4.i +0 -0
- data/example/MakePair/{data → scenario/input}/5.i +0 -0
- data/example/MakePair/scenario/scenario.yml +1 -0
- data/example/ScoreAggregation/ScoreAggregation.pione +122 -0
- data/example/ScoreAggregation/bin/apply-template.rb +10 -0
- data/example/ScoreAggregation/bin/histgram-graph.sh +18 -0
- data/example/ScoreAggregation/bin/mean-summary.rb +10 -0
- data/example/ScoreAggregation/bin/personal-bar-graph.sh +18 -0
- data/example/ScoreAggregation/bin/personal-pre-statistics.rb +37 -0
- data/example/ScoreAggregation/bin/total-mean.rb +10 -0
- data/example/ScoreAggregation/bin/total-statistics.rb +43 -0
- data/example/ScoreAggregation/generate-data.rb +63 -0
- data/example/ScoreAggregation/package.yml +1 -0
- data/example/ScoreAggregation/scenario/case1/input/A.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/B.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/C.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/D.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/E.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/F.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/G.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/H.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/I.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/J.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/K.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/L.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/M.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/N.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/O.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/P.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/Q.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/R.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/S.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/T.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/U.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/V.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/W.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/X.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/Y.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/Z.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/stat-template.erb +24 -0
- data/example/ScoreAggregation/scenario/case1/scenario.yml +3 -0
- data/example/{SequentialProcess/SequentialProcess.pione → SerialProcessing/SerialProcessing.pione} +0 -0
- data/example/SerialProcessing/package.yml +1 -0
- data/example/WorkflowPatterns/01_Sequence/Sequence.pione +21 -0
- data/example/WorkflowPatterns/02_PrallelSplit/ParallelSplit.pione +29 -0
- data/example/WorkflowPatterns/03_Synchronization/Synchronization.pione +30 -0
- data/example/WorkflowPatterns/04_ExclusiveChoice/ExclusiveChoice.pione +44 -0
- data/example/WorkflowPatterns/05_SimpleMerge/SimpleMerge.pione +44 -0
- data/example/WorkflowPatterns/06_MultiChoice/MultiChoice.pione +48 -0
- data/example/WorkflowPatterns/07_StructuredSynchronizingMerge/StructuredSynchronizingMerge.pione +71 -0
- data/example/WorkflowPatterns/08_MultiMerge/MultiMerge.pione +44 -0
- data/example/WorkflowPatterns/11_ImplicitTermination/ImplicitTermination.pione +29 -0
- data/example/WorkflowPatterns/12_MultipleInstancesWithoutSynchronization/MultipleInstancesWithoutSynchronization.pione +29 -0
- data/example/WorkflowPatterns/13_MultipleInstancesWithDesignTimeKnowledge/MultipleInstancesWithDesignTimeKnowledge.pione +28 -0
- data/example/WorkflowPatterns/14_MultipleInstancesWithRunTimeKnowledge/MultipleInstancesWithRunTimeKnowledge.pione +33 -0
- data/example/WorkflowPatterns/33_GeneralizedANDJoin/GeneralizedANDJoin.pione +21 -0
- data/example/WorkflowPatterns/37_LocalSynchronizingMerge/LocalSynchronizingMerge.pione +101 -0
- data/example/WorkflowPatterns/41_ThreadMerge/ThreadMerge.pione +43 -0
- data/example/WorkflowPatterns/42_ThreadSplit/ThreadSplit.pione +16 -0
- data/lib/pione.rb +23 -47
- data/lib/pione/agent/broker.rb +1 -1
- data/lib/pione/agent/input-generator.rb +1 -1
- data/lib/pione/agent/logger.rb +62 -49
- data/lib/pione/agent/messenger.rb +38 -0
- data/lib/pione/agent/rule-provider.rb +3 -3
- data/lib/pione/agent/task-worker.rb +14 -2
- data/lib/pione/agent/tuple-space-client.rb +1 -1
- data/lib/pione/agent/tuple-space-server-client-life-checker.rb +5 -3
- data/lib/pione/command.rb +2 -0
- data/lib/pione/command/basic-command.rb +1 -1
- data/lib/pione/command/pione-client.rb +57 -16
- data/lib/pione/command/pione-log.rb +5 -5
- data/lib/pione/command/pione-syntax-checker.rb +22 -7
- data/lib/pione/command/pione-task-worker.rb +36 -19
- data/lib/pione/command/pione-tuple-space-viewer.rb +3 -3
- data/lib/pione/command/pione-val.rb +40 -0
- data/lib/pione/component.rb +8 -0
- data/lib/pione/{system → component}/document.rb +13 -11
- data/lib/pione/component/package.rb +269 -0
- data/lib/pione/component/rule.rb +206 -0
- data/lib/pione/location/basic-location.rb +49 -7
- data/lib/pione/location/ftp-location.rb +19 -6
- data/lib/pione/location/local-location.rb +15 -6
- data/lib/pione/log.rb +4 -1
- data/lib/pione/log/{domain-info.rb → domain-log.rb} +23 -11
- data/lib/pione/{util/console-message.rb → log/message-log.rb} +16 -15
- data/lib/pione/log/process-log.rb +35 -86
- data/lib/pione/log/process-record.rb +24 -11
- data/lib/pione/log/system-log.rb +107 -0
- data/lib/pione/log/xes-log.rb +54 -48
- data/lib/pione/model.rb +1 -3
- data/lib/pione/model/assignment.rb +1 -0
- data/lib/pione/model/basic-model.rb +31 -15
- data/lib/pione/model/block.rb +1 -1
- data/lib/pione/model/boolean.rb +10 -23
- data/lib/pione/model/constraints.rb +12 -0
- data/lib/pione/model/data-expr.rb +31 -36
- data/lib/pione/model/feature-expr.rb +6 -23
- data/lib/pione/model/float.rb +29 -18
- data/lib/pione/model/integer.rb +44 -56
- data/lib/pione/model/keyed-sequence.rb +11 -4
- data/lib/pione/model/message.rb +4 -4
- data/lib/pione/model/ordinal-sequence.rb +12 -14
- data/lib/pione/model/package-expr.rb +53 -0
- data/lib/pione/model/parameters.rb +12 -11
- data/lib/pione/model/pione-method.rb +2 -2
- data/lib/pione/model/rule-expr.rb +30 -52
- data/lib/pione/model/sequence.rb +26 -26
- data/lib/pione/model/string.rb +13 -54
- data/lib/pione/model/ticket-expr.rb +12 -53
- data/lib/pione/model/type.rb +7 -1
- data/lib/pione/model/variable-table.rb +5 -4
- data/lib/pione/model/variable.rb +0 -5
- data/lib/pione/option/common-option.rb +2 -1
- data/lib/pione/option/task-worker-owner-option.rb +1 -1
- data/lib/pione/patch/drb-patch.rb +1 -1
- data/lib/pione/patch/em-ftpd-patch.rb +7 -0
- data/lib/pione/patch/rinda-patch.rb +53 -0
- data/lib/pione/patch/uri-patch.rb +5 -0
- data/lib/pione/relay/relay-socket.rb +2 -2
- data/lib/pione/rule-handler/action-handler.rb +71 -64
- data/lib/pione/rule-handler/basic-handler.rb +50 -32
- data/lib/pione/rule-handler/flow-handler.rb +51 -34
- data/lib/pione/rule-handler/update-criteria.rb +43 -20
- data/lib/pione/system.rb +13 -0
- data/lib/pione/system/domain-info.rb +34 -0
- data/lib/pione/system/global.rb +8 -1
- data/lib/pione/system/object.rb +1 -1
- data/lib/pione/transformer/expr-transformer.rb +3 -3
- data/lib/pione/transformer/literal-transformer.rb +3 -3
- data/lib/pione/transformer/rule-definition-transformer.rb +11 -9
- data/lib/pione/tuple-space/tuple-space-server-interface.rb +19 -1
- data/lib/pione/tuple-space/tuple-space-server.rb +9 -2
- data/lib/pione/tuple.rb +30 -0
- data/lib/pione/tuple/data-null-tuple.rb +14 -0
- data/lib/pione/tuple/message-tuple.rb +7 -0
- data/lib/pione/tuple/process-log-tuple.rb +13 -0
- data/lib/pione/tuple/touch-tuple.rb +14 -0
- data/lib/pione/uri-scheme/myftp-scheme.rb +45 -0
- data/lib/pione/util.rb +18 -0
- data/lib/pione/util/cpu.rb +20 -0
- data/lib/pione/util/error-report.rb +9 -1
- data/lib/pione/util/evaluatable.rb +47 -0
- data/lib/pione/util/ftp-server.rb +468 -0
- data/lib/pione/util/id.rb +39 -0
- data/lib/pione/util/indentation.rb +19 -0
- data/lib/pione/util/ip-address.rb +35 -0
- data/lib/pione/util/misc.rb +0 -47
- data/lib/pione/util/uuid.rb +28 -0
- data/lib/pione/util/variable-holdable.rb +38 -0
- data/lib/pione/version.rb +1 -1
- data/pione.gemspec +16 -14
- data/test/agent/spec_logger.rb +35 -44
- data/test/agent/spec_messenger.rb +25 -0
- data/test/agent/spec_rule-provider.rb +1 -1
- data/test/agent/spec_task-worker.rb +7 -13
- data/test/{system → component}/spec_document.rb +20 -20
- data/test/component/spec_package.rb +77 -0
- data/test/component/spec_package/TestPackage/Test.pione +14 -0
- data/test/component/spec_package/TestPackage/bin/count +3 -0
- data/test/component/spec_package/TestPackage/package.yml +7 -0
- data/test/component/spec_package/TestPackage/scenario/case1/input/1.txt +1 -0
- data/test/component/spec_package/TestPackage/scenario/case1/scenario.yml +1 -0
- data/test/component/spec_rule.rb +140 -0
- data/test/endurance-test/graph.plt +12 -0
- data/test/endurance-test/run.sh +65 -0
- data/test/location/location-behavior.rb +125 -0
- data/test/location/spec_ftp-location.rb +28 -90
- data/test/location/spec_local-location.rb +26 -76
- data/test/log/raw-process-log/pione-process.log +710 -0
- data/test/log/spec_domain-log.rb +57 -0
- data/test/log/spec_message-log.rb +44 -0
- data/test/log/spec_process-log.rb +88 -0
- data/test/log/spec_process-record.rb +148 -0
- data/test/log/spec_system-log.rb +142 -0
- data/test/log/spec_xes-log.rb +2 -2
- data/test/model/spec_assignment.rb +26 -25
- data/test/model/spec_block.rb +51 -97
- data/test/model/spec_boolean.rb +0 -5
- data/test/model/spec_call-rule.rb +6 -6
- data/test/model/spec_data-expr.rb +0 -7
- data/test/model/spec_data-expr.yml +8 -0
- data/test/model/spec_float.rb +1 -1
- data/test/model/spec_float.yml +13 -0
- data/test/model/spec_integer.rb +1 -1
- data/test/model/spec_integer.yml +12 -1
- data/test/model/spec_keyed-sequence.yml +5 -0
- data/test/model/spec_message.rb +2 -4
- data/test/model/spec_package-expr.rb +19 -0
- data/test/model/spec_parameters.rb +56 -88
- data/test/model/spec_pione-method.rb +15 -14
- data/test/model/spec_rule-expr.rb +4 -52
- data/test/model/spec_rule-expr.yml +11 -0
- data/test/model/spec_sequence.yml +6 -0
- data/test/model/spec_string.rb +21 -13
- data/test/model/spec_string.yml +10 -2
- data/test/model/spec_ticket-expr.rb +25 -3
- data/test/model/spec_variable.rb +8 -8
- data/test/rule-handler/spec_action-handler.pione +37 -0
- data/test/rule-handler/spec_action-handler.rb +41 -97
- data/test/rule-handler/spec_flow-handler.rb +24 -30
- data/test/rule-handler/spec_update-criteria.pione +16 -0
- data/test/rule-handler/spec_update-criteria.rb +7 -4
- data/test/rule-handler/spec_update-criteria.yml +191 -0
- data/test/system/spec_domain-info.rb +25 -0
- data/test/test-util.rb +38 -228
- data/test/transformer/spec_block-transformer.rb +1 -1
- data/test/transformer/spec_expr-transformer.rb +30 -39
- data/test/transformer/spec_flow-element-transformer.rb +17 -17
- data/test/transformer/spec_literal-transformer.rb +3 -3
- data/test/transformer/spec_rule-definition-transformer.rb +55 -76
- data/test/{spec_data-finder.rb → tuple-space/spec_data-finder.rb} +1 -1
- data/test/{spec_data-finder.yml → tuple-space/spec_data-finder.yml} +0 -0
- data/test/tuple/spec_data-tuple.rb +5 -76
- data/test/tuple/spec_finished-tuple.rb +5 -46
- data/test/tuple/spec_message-tuple.rb +10 -0
- data/test/tuple/spec_task-tuple.rb +4 -110
- data/test/tuple/spec_touch-tuple.rb +14 -0
- data/test/tuple/tuple-behavior.rb +14 -0
- data/test/uri-scheme/spec_local-scheme.rb +1 -1
- data/test/uri-scheme/spec_myftp-scheme.rb +73 -0
- data/test/uri-scheme/spec_myftp-scheme.yml +85 -0
- data/test/util/spec_cpu.rb +8 -0
- data/test/util/spec_error-report.rb +42 -0
- data/test/util/spec_evaluatable.rb +18 -0
- data/test/util/spec_ftp-server.rb +249 -0
- data/test/util/spec_id.pione +14 -0
- data/test/util/spec_id.rb +77 -0
- data/test/util/spec_indentation.rb +77 -0
- data/test/util/spec_ip-address.rb +15 -0
- data/test/util/spec_uuid.rb +11 -0
- data/test/util/spec_variable-holdable.rb +69 -0
- metadata +282 -83
- data/bin/pione-eval +0 -111
- data/demo/demo.rb +0 -311
- data/demo/public/base.css +0 -94
- data/demo/public/demo.js +0 -107
- data/demo/public/index.html +0 -91
- data/demo/public/jquery-1.8.3.min.js +0 -2
- data/lib/pione/model/binary-operator.rb +0 -90
- data/lib/pione/model/list.rb +0 -108
- data/lib/pione/model/package.rb +0 -56
- data/lib/pione/model/rule-io.rb +0 -178
- data/lib/pione/model/rule.rb +0 -295
- data/lib/pione/system/identifier.rb +0 -61
- data/lib/pione/tuple/log-tuple.rb +0 -14
- data/lib/pione/util/terminal.rb +0 -78
- data/test/log/data/sample.log +0 -1003
- data/test/model/spec_binary-operator.rb +0 -39
- data/test/model/spec_package.rb +0 -15
- data/test/model/spec_rule.rb +0 -158
- data/test/spec_identifier.rb +0 -29
- 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(
|
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(
|
127
|
+
push(TestCaseEq.new(key, val))
|
126
128
|
end
|
127
129
|
else
|
128
|
-
push(
|
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
|
-
|
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
|
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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 "$
|
30
|
-
|
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 "($
|
38
|
-
left =
|
39
|
-
|
40
|
-
|
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([
|
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
|
-
|
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(
|
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 "{
|
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 "{
|
111
|
+
tc "{X: 1, Y: 2}" do
|
121
112
|
Parameters.new(
|
122
|
-
{
|
123
|
-
|
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 "{
|
118
|
+
tc "{X: \"a\", Y: \"b\", Z: \"c\"}" do
|
128
119
|
Parameters.new(
|
129
|
-
{
|
130
|
-
|
131
|
-
|
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
|