rbbt-util 3.2.1 → 4.0.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.
- data/README.rdoc +65 -0
- data/bin/run_workflow.rb +142 -69
- data/lib/rbbt-util.rb +3 -3
- data/lib/rbbt.rb +12 -3
- data/lib/rbbt/annotations.rb +215 -0
- data/lib/rbbt/{util/fix_width_table.rb → fix_width_table.rb} +17 -13
- data/lib/rbbt/persist.rb +164 -0
- data/lib/rbbt/persist/tsv.rb +135 -0
- data/lib/rbbt/resource.rb +100 -0
- data/lib/rbbt/resource/path.rb +180 -0
- data/lib/rbbt/resource/rake.rb +48 -0
- data/lib/rbbt/resource/util.rb +111 -0
- data/lib/rbbt/resource/with_key.rb +28 -0
- data/lib/rbbt/tsv.rb +134 -0
- data/lib/rbbt/tsv/accessor.rb +345 -0
- data/lib/rbbt/tsv/attach.rb +183 -0
- data/lib/rbbt/tsv/attach/util.rb +277 -0
- data/lib/rbbt/{util/tsv/filters.rb → tsv/filter.rb} +76 -37
- data/lib/rbbt/tsv/index.rb +453 -0
- data/lib/rbbt/tsv/manipulate.rb +361 -0
- data/lib/rbbt/tsv/parser.rb +231 -0
- data/lib/rbbt/tsv/serializers.rb +79 -0
- data/lib/rbbt/tsv/util.rb +67 -0
- data/lib/rbbt/util/R.rb +3 -3
- data/lib/rbbt/util/chain_methods.rb +64 -0
- data/lib/rbbt/util/cmd.rb +17 -13
- data/lib/rbbt/util/excel2tsv.rb +4 -3
- data/lib/rbbt/util/log.rb +1 -0
- data/lib/rbbt/util/misc.rb +296 -285
- data/lib/rbbt/util/open.rb +9 -2
- data/lib/rbbt/util/persistence.rb +1 -1
- data/lib/rbbt/util/task/job.rb +3 -1
- data/lib/rbbt/workflow.rb +193 -0
- data/lib/rbbt/workflow/accessor.rb +249 -0
- data/lib/rbbt/workflow/annotate.rb +60 -0
- data/lib/rbbt/workflow/soap.rb +100 -0
- data/lib/rbbt/workflow/step.rb +102 -0
- data/lib/rbbt/workflow/task.rb +76 -0
- data/test/rbbt/resource/test_path.rb +12 -0
- data/test/rbbt/test_annotations.rb +106 -0
- data/test/rbbt/{util/test_fix_width_table.rb → test_fix_width_table.rb} +8 -9
- data/test/rbbt/test_resource.rb +66 -0
- data/test/rbbt/test_tsv.rb +332 -0
- data/test/rbbt/test_workflow.rb +102 -0
- data/test/rbbt/tsv/test_accessor.rb +163 -0
- data/test/rbbt/{util/tsv → tsv}/test_attach.rb +86 -43
- data/test/rbbt/{util/tsv/test_filters.rb → tsv/test_filter.rb} +31 -13
- data/test/rbbt/tsv/test_index.rb +284 -0
- data/test/rbbt/{util/tsv → tsv}/test_manipulate.rb +35 -105
- data/test/rbbt/util/test_R.rb +1 -1
- data/test/rbbt/util/test_chain_methods.rb +22 -0
- data/test/rbbt/util/test_filecache.rb +0 -1
- data/test/rbbt/util/test_misc.rb +97 -79
- data/test/rbbt/util/test_open.rb +1 -0
- data/test/rbbt/util/test_tmpfile.rb +1 -1
- data/test/rbbt/workflow/test_soap.rb +103 -0
- data/test/rbbt/workflow/test_step.rb +142 -0
- data/test/rbbt/workflow/test_task.rb +84 -0
- data/test/test_helper.rb +7 -7
- metadata +80 -54
- data/lib/rbbt/util/rake.rb +0 -176
- data/lib/rbbt/util/resource.rb +0 -355
- data/lib/rbbt/util/task.rb +0 -183
- data/lib/rbbt/util/tc_hash.rb +0 -324
- data/lib/rbbt/util/tsv.rb +0 -236
- data/lib/rbbt/util/tsv/accessor.rb +0 -312
- data/lib/rbbt/util/tsv/attach.rb +0 -416
- data/lib/rbbt/util/tsv/index.rb +0 -419
- data/lib/rbbt/util/tsv/manipulate.rb +0 -300
- data/lib/rbbt/util/tsv/misc.rb +0 -41
- data/lib/rbbt/util/tsv/parse.rb +0 -324
- data/lib/rbbt/util/tsv/resource.rb +0 -88
- data/lib/rbbt/util/workflow.rb +0 -135
- data/lib/rbbt/util/workflow/soap.rb +0 -116
- data/test/rbbt/util/test_persistence.rb +0 -201
- data/test/rbbt/util/test_rake.rb +0 -54
- data/test/rbbt/util/test_resource.rb +0 -77
- data/test/rbbt/util/test_task.rb +0 -133
- data/test/rbbt/util/test_tc_hash.rb +0 -144
- data/test/rbbt/util/test_tsv.rb +0 -221
- data/test/rbbt/util/test_workflow.rb +0 -135
- data/test/rbbt/util/tsv/test_accessor.rb +0 -150
- data/test/rbbt/util/tsv/test_index.rb +0 -241
- data/test/rbbt/util/tsv/test_parse.rb +0 -87
- data/test/rbbt/util/tsv/test_resource.rb +0 -9
data/test/rbbt/util/test_R.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
|
2
|
+
require 'rbbt/util/chain_methods'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
module TestChainedModule
|
6
|
+
extend ChainMethods
|
7
|
+
|
8
|
+
def test_chain_get_brackets(value)
|
9
|
+
self.test_chain_clean_get_brackets(value).reverse
|
10
|
+
end
|
11
|
+
|
12
|
+
self.chain_prefix = :test_chain
|
13
|
+
end
|
14
|
+
|
15
|
+
class TestChaimMethods < Test::Unit::TestCase
|
16
|
+
def test_chained_reverse_get
|
17
|
+
a = ["test", "TEST"]
|
18
|
+
TestChainedModule.setup_chain(a)
|
19
|
+
assert_equal "test".reverse, a[0]
|
20
|
+
assert_equal "TEST".reverse, a[1]
|
21
|
+
end
|
22
|
+
end
|
data/test/rbbt/util/test_misc.rb
CHANGED
@@ -4,53 +4,72 @@ require 'test/unit'
|
|
4
4
|
|
5
5
|
class TestMisc < Test::Unit::TestCase
|
6
6
|
|
7
|
-
def
|
8
|
-
|
7
|
+
def test_id_filename?
|
8
|
+
TmpFile.with_file("") do |file|
|
9
|
+
assert Misc.is_filename?(file)
|
10
|
+
assert ! Misc.is_filename?("TEST STRING")
|
11
|
+
end
|
9
12
|
end
|
10
13
|
|
11
|
-
def
|
12
|
-
|
14
|
+
def test_merge_sorted_arrays
|
15
|
+
assert_equal [1,2,3,4], Misc.merge_sorted_arrays([1,3], [2,4])
|
13
16
|
end
|
14
17
|
|
15
|
-
def
|
16
|
-
|
18
|
+
def test_intersect_sorted_arrays
|
19
|
+
assert_equal [2,4], Misc.intersect_sorted_arrays([1,2,3,4], [2,4])
|
17
20
|
end
|
21
|
+
def test_process_to_hash
|
22
|
+
list = [1,2,3,4]
|
23
|
+
assert_equal 4, Misc.process_to_hash(list){|l| l.collect{|e| e * 2}}[2]
|
24
|
+
end
|
25
|
+
|
26
|
+
# def test_pdf2text_example
|
27
|
+
# assert PDF2Text.pdf2text(datafile_test('example.pdf')).read =~ /An Example Paper/i
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# def test_pdf2text_EPAR
|
31
|
+
# assert PDF2Text.pdf2text("http://www.ema.europa.eu/docs/en_GB/document_library/EPAR_-_Scientific_Discussion/human/000402/WC500033103.pdf").read =~ /Tamiflu/i
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# def test_pdf2text_wrong
|
35
|
+
# assert_raise CMD::CMDError do PDF2Text.pdf2text("http://www.ema.europa.eu/docs/en_GB#").read end
|
36
|
+
# end
|
18
37
|
|
19
38
|
def test_string2hash
|
20
39
|
assert(Misc.string2hash("--user-agent=firefox").include? "--user-agent")
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
40
|
+
assert_equal(true, Misc.string2hash(":true")[:true])
|
41
|
+
assert_equal(true, Misc.string2hash("true")["true"])
|
42
|
+
assert_equal(1, Misc.string2hash("a=1")["a"])
|
43
|
+
assert_equal('b', Misc.string2hash("a=b")["a"])
|
44
|
+
assert_equal('d', Misc.string2hash("a=b#c=d#:h=j")["c"])
|
45
|
+
assert_equal('j', Misc.string2hash("a=b#c=d#:h=j")[:h])
|
46
|
+
assert_equal(:j, Misc.string2hash("a=b#c=d#:h=:j")[:h])
|
28
47
|
end
|
29
48
|
|
30
49
|
def test_named_array
|
31
|
-
a = NamedArray.
|
50
|
+
a = NamedArray.setup([1,2,3,4], %w(a b c d))
|
32
51
|
assert_equal(1, a['a'])
|
33
52
|
end
|
34
53
|
|
35
|
-
def test_path_relative_to
|
36
|
-
assert_equal "test/foo", Misc.path_relative_to('test/test/foo', 'test')
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_chunk
|
40
|
-
test =<<-EOF
|
41
|
-
This is an example file. Entries are separated by Entry
|
42
|
-
|
43
|
-
1
|
44
|
-
2
|
45
|
-
3
|
46
|
-
|
47
|
-
4
|
48
|
-
5
|
49
|
-
6
|
50
|
-
EOF
|
51
|
-
|
52
|
-
assert_equal "1\n2\n3", Misc.chunk(test, /^-- Entry/).first.strip
|
53
|
-
end
|
54
|
+
# def test_path_relative_to
|
55
|
+
# assert_equal "test/foo", Misc.path_relative_to('test/test/foo', 'test')
|
56
|
+
# end
|
57
|
+
|
58
|
+
# def test_chunk
|
59
|
+
# test =<<-EOF
|
60
|
+
#This is an example file. Entries are separated by Entry
|
61
|
+
#-- Entry
|
62
|
+
#1
|
63
|
+
#2
|
64
|
+
#3
|
65
|
+
#-- Entry
|
66
|
+
#4
|
67
|
+
#5
|
68
|
+
#6
|
69
|
+
# EOF
|
70
|
+
#
|
71
|
+
# assert_equal "1\n2\n3", Misc.chunk(test, /^-- Entry/).first.strip
|
72
|
+
# end
|
54
73
|
|
55
74
|
def test_hash2string
|
56
75
|
hash = {}
|
@@ -71,11 +90,11 @@ This is an example file. Entries are separated by Entry
|
|
71
90
|
hash = {:a => /test/}
|
72
91
|
assert_equal({}, Misc.string2hash(Misc.hash2string(hash)))
|
73
92
|
|
74
|
-
|
93
|
+
end
|
75
94
|
|
76
95
|
def test_merge
|
77
96
|
a = [[1],[2]]
|
78
|
-
a = NamedArray.
|
97
|
+
a = NamedArray.setup a, %w(1 2)
|
79
98
|
a.merge [3,4]
|
80
99
|
assert_equal [1,3], a[0]
|
81
100
|
end
|
@@ -112,51 +131,50 @@ This is an example file. Entries are separated by Entry
|
|
112
131
|
end
|
113
132
|
pids.each do |pid| Process.waitpid pid; assert $?.success? end
|
114
133
|
end
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_divide
|
119
|
-
assert_equal 2, Misc.divide(%w(1 2 3 4 5 6 7 8 9),2).length
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_process_to_hash
|
123
|
-
list = [1,2,3,4]
|
124
|
-
assert_equal 4, Misc.process_to_hash(list){|l| l.collect{|e| e * 2}}[2]
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_add_method
|
128
|
-
a = "Test"
|
129
|
-
Misc.add_method a, :invert do self.reverse end
|
130
|
-
assert_equal "Test".reverse, a.invert
|
131
134
|
end
|
132
135
|
|
133
|
-
def
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
136
|
+
# def test_divide
|
137
|
+
# assert_equal 2, Misc.divide(%w(1 2 3 4 5 6 7 8 9),2).length
|
138
|
+
# end
|
139
|
+
#
|
140
|
+
# def test_process_to_hash
|
141
|
+
# list = [1,2,3,4]
|
142
|
+
# assert_equal 4, Misc.process_to_hash(list){|l| l.collect{|e| e * 2}}[2]
|
143
|
+
# end
|
144
|
+
|
145
|
+
# def test_add_method
|
146
|
+
# a = "Test"
|
147
|
+
# Misc.add_method a, :invert do self.reverse end
|
148
|
+
# assert_equal "Test".reverse, a.invert
|
149
|
+
# end
|
150
|
+
#
|
151
|
+
# def test_redefine_method
|
152
|
+
# a = "Test"
|
153
|
+
# worked = false
|
154
|
+
# Misc.redefine_method a, :reverse, :old_reverse do worked = true; self.old_reverse end
|
155
|
+
# assert_equal "Test".reverse, a.reverse
|
156
|
+
# assert worked
|
157
|
+
# end
|
158
|
+
#
|
159
|
+
# def test_merge_sorted_arrays
|
160
|
+
# assert_equal [1,2,3,4], Misc.merge_sorted_arrays([1,3], [2,4])
|
161
|
+
# end
|
162
|
+
#
|
163
|
+
# def test_intersect_sorted_arrays
|
164
|
+
# assert_equal [2,4], Misc.intersect_sorted_arrays([1,2,3,4], [2,4])
|
165
|
+
# end
|
166
|
+
#
|
167
|
+
#
|
168
|
+
# def test_in_dir
|
169
|
+
# TmpFile.with_file do |dir|
|
170
|
+
# FileUtils.mkdir_p dir
|
171
|
+
# Open.write(File.join(dir, 'test_file_in_dir'), 'test_file_in_dir')
|
172
|
+
# Misc.in_dir(dir) do
|
173
|
+
# assert Dir.glob("*").include? 'test_file_in_dir'
|
174
|
+
# end
|
175
|
+
# assert Dir.glob(File.join(dir, "*")).include?(File.join(dir, 'test_file_in_dir'))
|
176
|
+
# assert(! Dir.glob("*").include?('test_file_in_dir'))
|
177
|
+
# end
|
178
|
+
# end
|
161
179
|
|
162
180
|
end
|
data/test/rbbt/util/test_open.rb
CHANGED
@@ -8,7 +8,7 @@ class TestTmpFile < Test::Unit::TestCase
|
|
8
8
|
assert(TmpFile.tmp_file("test") =~ /tmp\/test\d+$/)
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def test_do_tmp_file
|
12
12
|
content = "Hello World!"
|
13
13
|
TmpFile.with_file(content) do |file|
|
14
14
|
assert_equal content, File.open(file).read
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
|
2
|
+
require 'rbbt/workflow'
|
3
|
+
require 'rbbt/workflow/soap'
|
4
|
+
require 'rbbt/util/tmpfile'
|
5
|
+
require 'test/unit'
|
6
|
+
|
7
|
+
module TestSOAPWF
|
8
|
+
extend Workflow
|
9
|
+
|
10
|
+
str = "TEST"
|
11
|
+
task :str => :string do
|
12
|
+
str
|
13
|
+
end
|
14
|
+
|
15
|
+
dep :str
|
16
|
+
task :reverse => :string do
|
17
|
+
step(:str).load.reverse
|
18
|
+
end
|
19
|
+
|
20
|
+
dep :str
|
21
|
+
task :downcase => :string do
|
22
|
+
step(:str).load.downcase
|
23
|
+
end
|
24
|
+
|
25
|
+
dep :str
|
26
|
+
input :times, :integer, "Times to repeat"
|
27
|
+
task :repeat => :string do |times|
|
28
|
+
[step(:str).load] * times * "\n"
|
29
|
+
end
|
30
|
+
|
31
|
+
input :number, :float, "Number to doble"
|
32
|
+
def self.double(number)
|
33
|
+
2 * number
|
34
|
+
end
|
35
|
+
task :double => :float
|
36
|
+
|
37
|
+
desc <<-EOT
|
38
|
+
Returns numer * 2 lines containing TEST
|
39
|
+
EOT
|
40
|
+
dep :str
|
41
|
+
dep :double
|
42
|
+
task :repeat2 => :string do
|
43
|
+
[step(:str).load] * step(:double).load * "\n"
|
44
|
+
end
|
45
|
+
|
46
|
+
export_synchronous :double
|
47
|
+
export_asynchronous :repeat2
|
48
|
+
end
|
49
|
+
|
50
|
+
TestSOAPWF.workdir = Rbbt.tmp.test.workflow
|
51
|
+
|
52
|
+
class TestSOAP < Test::Unit::TestCase
|
53
|
+
|
54
|
+
def setup
|
55
|
+
port= 77177
|
56
|
+
$server = WorkflowSOAP.new TestSOAPWF, "Test WF", 'localhost', port
|
57
|
+
Thread.new do
|
58
|
+
$server.start
|
59
|
+
end
|
60
|
+
Open.write(Rbbt.tmp.test.wsdl.TestWS.find(:user), $server.wsdl)
|
61
|
+
|
62
|
+
$driver = SimpleWS.get_driver('http://localhost:' + port.to_s, "TestSOAPWF")
|
63
|
+
end
|
64
|
+
|
65
|
+
def teardown
|
66
|
+
$server.shutdown
|
67
|
+
FileUtils.rm_rf(Rbbt.tmp.test.wsdl.TestWS.find(:user))
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_wsdl
|
71
|
+
assert $server.wsdl =~ /jobid/
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_check_status
|
75
|
+
str = "TEST"
|
76
|
+
job = TestSOAPWF.job(:repeat2, nil, :number => 3)
|
77
|
+
id = TestSOAPWF.id_for job.path
|
78
|
+
job.run
|
79
|
+
assert $driver.done id
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_launch_job
|
83
|
+
str = "TEST"
|
84
|
+
id = $driver.repeat2("Default", 3)
|
85
|
+
while not $driver.done id
|
86
|
+
sleep 1
|
87
|
+
end
|
88
|
+
assert $driver.status(id) == "done"
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_load_job
|
92
|
+
str = "TEST"
|
93
|
+
id = $driver.repeat2("Default", 3)
|
94
|
+
while not $driver.done id
|
95
|
+
sleep 1
|
96
|
+
end
|
97
|
+
assert_equal ["TEST"] * 6 * "\n", $driver.load_string(id)
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_synchronous
|
101
|
+
assert_equal 6, $driver.double(3)
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
|
2
|
+
require 'rbbt/workflow/task'
|
3
|
+
require 'rbbt/workflow/step'
|
4
|
+
require 'rbbt'
|
5
|
+
|
6
|
+
class TestStrp < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def test_step
|
9
|
+
task = Task.setup do "TEST" end
|
10
|
+
task2 = Task.setup do raise "Persistence ignored" end
|
11
|
+
TmpFile.with_file do |tmp|
|
12
|
+
step = Step.new tmp, task
|
13
|
+
assert_equal "TEST", step.run
|
14
|
+
assert File.exists? tmp
|
15
|
+
step = Step.new tmp, task2
|
16
|
+
assert_equal "TEST", step.run
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_dependency
|
21
|
+
str = "TEST"
|
22
|
+
str2 = "TEST2"
|
23
|
+
TmpFile.with_file do |tmpfile|
|
24
|
+
|
25
|
+
task1 = Task.setup :result_type => nil do
|
26
|
+
Open.write(tmpfile, str);
|
27
|
+
end
|
28
|
+
step1 = Step.new tmpfile + 'step1', task1
|
29
|
+
|
30
|
+
task2 = Task.setup :result_type => :string do
|
31
|
+
Open.read(tmpfile)
|
32
|
+
end
|
33
|
+
step2 = Step.new tmpfile + 'step2', task2, [], [step1]
|
34
|
+
|
35
|
+
step2.run
|
36
|
+
assert_equal "TEST", Open.read(tmpfile + 'step2')
|
37
|
+
|
38
|
+
task2 = Task.setup :result_type => :string do
|
39
|
+
str2
|
40
|
+
end
|
41
|
+
step2 = Step.new tmpfile + 'step2', task2, [], step1
|
42
|
+
|
43
|
+
step1.clean
|
44
|
+
sleep 1
|
45
|
+
step2.run
|
46
|
+
assert_equal "TEST2", Open.read(tmpfile + 'step2')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_exec
|
51
|
+
TmpFile.with_file do |lock|
|
52
|
+
task = Task.setup do "TEST" end
|
53
|
+
TmpFile.with_file do |tmp|
|
54
|
+
step = Step.new tmp, task
|
55
|
+
assert_equal "TEST", step.exec
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
def test_fork
|
62
|
+
TmpFile.with_file do |lock|
|
63
|
+
task = Task.setup do while not File.exists?(lock) do sleep 1; end; "TEST" end
|
64
|
+
TmpFile.with_file do |tmp|
|
65
|
+
step = Step.new tmp, task
|
66
|
+
job = step.fork
|
67
|
+
assert !job.done?
|
68
|
+
assert_raise RuntimeError do step.fork end
|
69
|
+
sleep 1
|
70
|
+
Open.write(lock, "open")
|
71
|
+
assert_equal "TEST", job.join.load
|
72
|
+
assert job.done?
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_abort
|
78
|
+
TmpFile.with_file do |lock|
|
79
|
+
task = Task.setup do while not File.exists?(lock) do sleep 1; end; "TEST" end
|
80
|
+
TmpFile.with_file do |tmp|
|
81
|
+
step = Step.new tmp, task
|
82
|
+
job = step.fork
|
83
|
+
assert !job.done?
|
84
|
+
assert_raise RuntimeError do step.fork end
|
85
|
+
sleep 1
|
86
|
+
while not job.abort do sleep 1 end
|
87
|
+
Open.write(lock, "open")
|
88
|
+
job.join
|
89
|
+
assert job.error?
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_files
|
95
|
+
TmpFile.with_file do |lock|
|
96
|
+
task = Task.setup do
|
97
|
+
Open.write(file("test"),"TEST")
|
98
|
+
end
|
99
|
+
TmpFile.with_file do |tmp|
|
100
|
+
step = Step.new tmp, task
|
101
|
+
job = step.fork
|
102
|
+
while not job.done? do sleep 1 end
|
103
|
+
assert_equal "TEST", Open.read(job.file("test"))
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_messages
|
109
|
+
TmpFile.with_file do |lock|
|
110
|
+
task = Task.setup do
|
111
|
+
message "WRITE"
|
112
|
+
Open.write(file("test"),"TEST")
|
113
|
+
end
|
114
|
+
TmpFile.with_file do |tmp|
|
115
|
+
step = Step.new tmp, task
|
116
|
+
job = step.fork
|
117
|
+
while not job.done? do sleep 1 end
|
118
|
+
assert_equal "TEST", Open.read(job.file("test"))
|
119
|
+
assert_equal "WRITE", job.messages.last
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_subdir
|
125
|
+
TmpFile.with_file do |lock|
|
126
|
+
task = Task.setup do
|
127
|
+
message "WRITE"
|
128
|
+
Open.write(file("test"),"TEST")
|
129
|
+
end
|
130
|
+
|
131
|
+
TmpFile.with_file do |tmp|
|
132
|
+
step = Step.new File.join(tmp, 'subdir1', 'subdir2'), task
|
133
|
+
job = step.fork
|
134
|
+
while not job.done? do sleep 1 end
|
135
|
+
assert_equal "TEST", Open.read(job.file("test"))
|
136
|
+
assert_equal "WRITE", job.messages.last
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
|
142
|
+
end
|