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_rake.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
|
2
|
-
require 'rbbt/util/rake'
|
3
|
-
|
4
|
-
class TestRake < Test::Unit::TestCase
|
5
|
-
def test_run
|
6
|
-
rakefile=<<-EOF
|
7
|
-
require 'rbbt/util/rake'
|
8
|
-
|
9
|
-
file "foo" do |t|
|
10
|
-
Open.write(t.name, 'bar')
|
11
|
-
end
|
12
|
-
EOF
|
13
|
-
|
14
|
-
TmpFile.with_file(rakefile) do |f|
|
15
|
-
RakeHelper.run f, :foo
|
16
|
-
|
17
|
-
assert File.exists? "foo"
|
18
|
-
FileUtils.rm "foo"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_run_default
|
23
|
-
rakefile=<<-EOF
|
24
|
-
require 'rbbt/util/rake'
|
25
|
-
|
26
|
-
file "foo" do |t|
|
27
|
-
Open.write(t.name, 'bar')
|
28
|
-
end
|
29
|
-
EOF
|
30
|
-
|
31
|
-
TmpFile.with_file(rakefile) do |f|
|
32
|
-
RakeHelper.run f
|
33
|
-
|
34
|
-
assert File.exists? "foo"
|
35
|
-
FileUtils.rm "foo"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
def test_files
|
41
|
-
rakefile=<<-EOF
|
42
|
-
require 'rbbt/util/rake'
|
43
|
-
|
44
|
-
file "foo" do |t|
|
45
|
-
Open.write(t.name, 'bar')
|
46
|
-
end
|
47
|
-
EOF
|
48
|
-
|
49
|
-
TmpFile.with_file(rakefile) do |f|
|
50
|
-
assert RakeHelper.files(f).include? "foo"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
|
2
|
-
require 'rbbt/util/resource'
|
3
|
-
|
4
|
-
|
5
|
-
module Rbbt
|
6
|
-
extend Resource
|
7
|
-
|
8
|
-
tmp.test_string.define_as_string "Test String"
|
9
|
-
tmp.url.define_as_url "http://www.ruby-lang.org/es/"
|
10
|
-
tmp.Rakefile.define_as_string <<-EOF
|
11
|
-
file 'foo' do |t|
|
12
|
-
Open.write(t.name, "Test String")
|
13
|
-
end
|
14
|
-
EOF
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
Open.cachedir = Rbbt.tmp.cache.find :user
|
19
|
-
|
20
|
-
module Phgx
|
21
|
-
extend Resource
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
class TestResource < Test::Unit::TestCase
|
26
|
-
def test_methods
|
27
|
-
assert Resource.methods.collect{|m| m.to_s}.include?("resources")
|
28
|
-
assert ! Resource.methods.collect{|m| m.to_s}.include?("pkgdir")
|
29
|
-
assert ! Phgx.methods.collect{|m| m.to_s}.include?("resources")
|
30
|
-
assert Phgx.methods.collect{|m| m.to_s}.include?("pkgdir")
|
31
|
-
|
32
|
-
end
|
33
|
-
def test_resolve
|
34
|
-
assert_equal File.join(ENV['HOME'], '.rbbt/etc/foo'), Resource.resolve('etc/foo', '', :user)
|
35
|
-
assert_equal File.join(ENV['HOME'], '.phgx/etc/foo'), Resource.resolve('etc/foo', 'phgx', :user)
|
36
|
-
|
37
|
-
assert_equal File.join('/', 'etc/foo'), Resource.resolve('etc/foo', '', :global)
|
38
|
-
assert_equal File.join('/', 'etc/phgx/foo'), Resource.resolve('etc/foo', 'phgx', :global)
|
39
|
-
|
40
|
-
assert_equal File.join('/usr/local', 'etc/foo'), Resource.resolve('etc/foo', '', :local)
|
41
|
-
assert_equal File.join('/usr/local', 'etc/phgx/foo'), Resource.resolve('etc/foo', 'phgx', :local)
|
42
|
-
|
43
|
-
assert_equal File.expand_path(File.join(File.dirname(File.expand_path(__FILE__)), '../../../', 'etc/foo')), Resource.resolve('etc/foo', '', :lib)
|
44
|
-
assert_equal File.expand_path(File.join(File.dirname(File.expand_path(__FILE__)), '../../../', 'etc/foo')), Resource.resolve('etc/foo', 'phgx', :lib)
|
45
|
-
|
46
|
-
assert_equal File.join(ENV['HOME'], '.rbbt/etc/foo'), Resource.resolve('etc/foo', '')
|
47
|
-
assert_equal File.join(ENV['HOME'], '.phgx/etc/foo'), Resource.resolve('etc/foo', 'phgx')
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_base
|
51
|
-
assert_equal Rbbt, Rbbt.base
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_path
|
55
|
-
assert_equal File.join(ENV['HOME'], '.rbbt/etc/foo'), Rbbt.etc.foo.find
|
56
|
-
assert_equal File.join(ENV['HOME'], '.rbbt/etc/foo'), Rbbt.etc.foo.find(:user)
|
57
|
-
assert_equal File.join(ENV['HOME'], '.phgx/etc/foo'), Phgx.etc.foo.find
|
58
|
-
assert_equal File.join(ENV['HOME'], '.phgx/etc/foo'), Phgx.etc.foo.find(:user)
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_libdir
|
62
|
-
assert File.exists? Rbbt.share.lib.R["util.R"].find :lib
|
63
|
-
assert File.exists? Rbbt.share.lib.R["util.R"].find
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_define
|
67
|
-
begin
|
68
|
-
assert_equal "Test String", Rbbt.tmp.test_string.read
|
69
|
-
assert_equal "Test String", Rbbt.tmp.work.foo.read
|
70
|
-
rescue
|
71
|
-
ensure
|
72
|
-
FileUtils.rm Rbbt.tmp.test_string.find if File.exists? Rbbt.tmp.test_string.find
|
73
|
-
FileUtils.rm Rbbt.tmp.url.find if File.exists? Rbbt.tmp.url.find
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
data/test/rbbt/util/test_task.rb
DELETED
@@ -1,133 +0,0 @@
|
|
1
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
|
2
|
-
require 'rbbt/util/task'
|
3
|
-
|
4
|
-
Task.basedir = Rbbt.tmp.test.taskjobs.find :user
|
5
|
-
|
6
|
-
class TestTask < Test::Unit::TestCase
|
7
|
-
def test_task
|
8
|
-
$true
|
9
|
-
task = Task.new(:test_task) do $true = true end
|
10
|
-
job = task.job(:job1)
|
11
|
-
job.start
|
12
|
-
|
13
|
-
assert $true
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_task_fork
|
17
|
-
TmpFile.with_file do |f|
|
18
|
-
task = Task.new(:test_task) do Open.write(f, "Test") end
|
19
|
-
job = task.job(:job1)
|
20
|
-
job.fork
|
21
|
-
job.join
|
22
|
-
|
23
|
-
assert File.exists? f
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_task_options
|
28
|
-
TmpFile.with_file do |f|
|
29
|
-
task = Task.new(:test_task, nil, :name) do |name| Open.write(f, name) end
|
30
|
-
job = task.job(:job1, "TestName")
|
31
|
-
assert_equal "job1" << "_" << Misc.hash2md5(:name => "TestName"), job.id
|
32
|
-
job.fork
|
33
|
-
job.join
|
34
|
-
|
35
|
-
assert File.exists? f
|
36
|
-
assert_equal "TestName", File.open(f).read
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_task_options_from_hash
|
41
|
-
TmpFile.with_file do |f|
|
42
|
-
task = Task.new(:test_task, nil, :name) do |name| Open.write(f, name) end
|
43
|
-
job = task.job(:job1, :name => "TestName")
|
44
|
-
assert_equal "job1" << "_" << Misc.hash2md5(:name => "TestName"), job.id
|
45
|
-
job.fork
|
46
|
-
job.join
|
47
|
-
|
48
|
-
assert File.exists? f
|
49
|
-
assert_equal "TestName", File.open(f).read
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
|
54
|
-
def test_task_result
|
55
|
-
task = Task.new(:test_task, nil, :name) do |name| name end
|
56
|
-
job = task.job(:job1, "TestName")
|
57
|
-
assert_equal "TestName", job.fork.join.load
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_task_info
|
61
|
-
task = Task.new(:test_task, nil, :name) do |name| name end
|
62
|
-
job = task.job(:job1, "TestName")
|
63
|
-
assert_equal "TestName", job.fork.join.info[:options][:name]
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_task_status
|
67
|
-
task = Task.new(:test_task, nil, :name) do |name|
|
68
|
-
step :one
|
69
|
-
name
|
70
|
-
end
|
71
|
-
job = task.job(:job1, "TestName")
|
72
|
-
assert_equal "TestName", job.fork.join.info[:options][:name]
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_task_reopen
|
76
|
-
task = Task.new(:test_task, nil, :name) do |name| name end
|
77
|
-
job = task.job(:job1, "TestName")
|
78
|
-
assert_equal "TestName", job.fork.join.info[:options][:name]
|
79
|
-
job = task.job(:job1, "TestName")
|
80
|
-
assert_equal "TestName", job.join.info[:options][:name]
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_marshal_persistence
|
84
|
-
task = Task.new(:test_task, :marshal) do
|
85
|
-
{:a => :b}
|
86
|
-
end
|
87
|
-
job = task.job(:job1).fork.join
|
88
|
-
assert Hash === job.load
|
89
|
-
assert_equal :b, job.load[:a]
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_yaml_persistence
|
93
|
-
task = Task.new(:test_task, :yaml) do
|
94
|
-
{:a => :b}
|
95
|
-
end
|
96
|
-
job = task.job(:job1).fork.join
|
97
|
-
assert Hash === job.load
|
98
|
-
assert_equal :b, job.load[:a]
|
99
|
-
assert_equal :b, YAML.load(job.open)[:a]
|
100
|
-
end
|
101
|
-
|
102
|
-
def test_tsv_persistence
|
103
|
-
task = Task.new(:test_task, :tsv) do
|
104
|
-
tsv = TSV.new({})
|
105
|
-
tsv.key_field = "A"
|
106
|
-
tsv.fields = ["B"]
|
107
|
-
tsv.type = :list
|
108
|
-
tsv["a"] = ["b"]
|
109
|
-
tsv
|
110
|
-
end
|
111
|
-
job = task.job(:job1).fork.join
|
112
|
-
assert TSV === job.load
|
113
|
-
assert_equal "b", job.load["a"]["B"]
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_clean
|
117
|
-
task = Task.new(:test_task, :tsv) do
|
118
|
-
tsv = TSV.new({})
|
119
|
-
tsv.key_field = "A"
|
120
|
-
tsv.fields = ["B"]
|
121
|
-
tsv.type = :list
|
122
|
-
tsv["a"] = ["b"]
|
123
|
-
tsv
|
124
|
-
end
|
125
|
-
job = task.job(:job1).fork.join
|
126
|
-
|
127
|
-
assert File.exists?(job.path)
|
128
|
-
job.clean
|
129
|
-
assert (not File.exists?(job.path))
|
130
|
-
end
|
131
|
-
|
132
|
-
end
|
133
|
-
|
@@ -1,144 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
|
2
|
-
require 'rbbt/util/tmpfile'
|
3
|
-
require 'rbbt/util/tc_hash'
|
4
|
-
|
5
|
-
class TestTCHash < Test::Unit::TestCase
|
6
|
-
def test_each
|
7
|
-
TmpFile.with_file do |f|
|
8
|
-
t = TCHash.new f
|
9
|
-
t["1"] = 2
|
10
|
-
t["2"] = 3
|
11
|
-
|
12
|
-
t.collect do |k,v|
|
13
|
-
["1", "2"].include? k
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_serializer
|
19
|
-
TmpFile.with_file do |f|
|
20
|
-
t = TCHash.new f, TCHash::StringSerializer
|
21
|
-
t["1"] = 2
|
22
|
-
t["2"] = 3
|
23
|
-
t.read
|
24
|
-
|
25
|
-
t.collect do |k,v|
|
26
|
-
["1", "2"].include? k
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_stringArraySerializer
|
32
|
-
TmpFile.with_file do |f|
|
33
|
-
t = TCHash.get f, true, TCHash::StringArraySerializer
|
34
|
-
t["1"] = [1,2]
|
35
|
-
t["2"] = [3,4]
|
36
|
-
|
37
|
-
t = TCHash.get f
|
38
|
-
t.collect do |k,v|
|
39
|
-
assert_equal ["1", "2"], t["1"]
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_stringDoubleArraySerializer
|
45
|
-
TmpFile.with_file do |f|
|
46
|
-
t = TCHash.get f, true, TCHash::StringDoubleArraySerializer
|
47
|
-
t["1"] = [[1],[2]]
|
48
|
-
t["2"] = [[3],[4,5]]
|
49
|
-
|
50
|
-
t = TCHash.get f
|
51
|
-
t.collect do |k,v|
|
52
|
-
assert_equal [["3"],["4","5"]], t["2"]
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_stringDoubleArraySerializer
|
58
|
-
TmpFile.with_file do |f|
|
59
|
-
t = TCHash.get f, true, TCHash::TSVSerializer
|
60
|
-
tsv = TSV.new({})
|
61
|
-
tsv["1"] = [[1],[2]]
|
62
|
-
tsv["2"] = [[3],[4,5]]
|
63
|
-
t["TSV"] = tsv
|
64
|
-
|
65
|
-
t = TCHash.get f
|
66
|
-
t.collect do |k,v|
|
67
|
-
assert_equal [["3"],["4","5"]], t["TSV"]["2"]
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
|
73
|
-
def test_serializer_alias
|
74
|
-
TmpFile.with_file do |f|
|
75
|
-
t = TCHash.get f, true, :double
|
76
|
-
t["1"] = [[1],[2]]
|
77
|
-
t["2"] = [[3],[4,5]]
|
78
|
-
|
79
|
-
t = TCHash.get f
|
80
|
-
assert_equal [["3"],["4","5"]], t["2"]
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_non_blocking
|
85
|
-
TmpFile.with_file do |f|
|
86
|
-
t = TCHash.get f, true, :double
|
87
|
-
t["1"] = [[1],[2]]
|
88
|
-
t["2"] = [[3],[4,5]]
|
89
|
-
t.close
|
90
|
-
|
91
|
-
pid = Process.fork do
|
92
|
-
t2 = TCHash.get f, false, :double
|
93
|
-
assert_equal [["3"],["4","5"]], t2["2"]
|
94
|
-
t2.read
|
95
|
-
exit
|
96
|
-
end
|
97
|
-
|
98
|
-
t2 = TCHash.get f, false, :double
|
99
|
-
assert_equal [["3"],["4","5"]], t2["2"]
|
100
|
-
t2.read
|
101
|
-
|
102
|
-
Process.wait pid
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_serializer_alias
|
107
|
-
TmpFile.with_file do |f|
|
108
|
-
t = TCHash.get f, true, :double
|
109
|
-
t["1"] = [[1],[2]]
|
110
|
-
t["2"] = [[3],[4,5]]
|
111
|
-
|
112
|
-
t = TCHash.get f
|
113
|
-
assert_equal [["3"],["4","5"]], t["2"]
|
114
|
-
|
115
|
-
t.close
|
116
|
-
TCHash::CONNECTIONS.clear
|
117
|
-
|
118
|
-
t = TCHash.get f
|
119
|
-
assert_equal [["3"],["4","5"]], t["2"]
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_serializer_reload
|
124
|
-
TmpFile.with_file do |f|
|
125
|
-
t = TCHash.get f, true, :double
|
126
|
-
t["1"] = [[1],[2]]
|
127
|
-
t["2"] = [[3],[4,5]]
|
128
|
-
|
129
|
-
t = TCHash.get f
|
130
|
-
assert_equal TCHash::StringDoubleArraySerializer, t.serializer
|
131
|
-
assert_equal [["3"],["4","5"]], t["2"]
|
132
|
-
|
133
|
-
t.close
|
134
|
-
TCHash::CONNECTIONS.clear
|
135
|
-
|
136
|
-
t = TCHash.get f
|
137
|
-
assert_equal [["3"],["4","5"]], t["2"]
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
end
|
144
|
-
|
data/test/rbbt/util/test_tsv.rb
DELETED
@@ -1,221 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
|
2
|
-
require 'rbbt/util/tsv'
|
3
|
-
require 'rbbt/util/tmpfile'
|
4
|
-
|
5
|
-
class TestTSV < Test::Unit::TestCase
|
6
|
-
|
7
|
-
def test_tsv
|
8
|
-
content =<<-EOF
|
9
|
-
#Id ValueA ValueB OtherID
|
10
|
-
row1 a|aa|aaa b Id1|Id2
|
11
|
-
row2 A B Id3
|
12
|
-
EOF
|
13
|
-
|
14
|
-
TmpFile.with_file(content) do |filename|
|
15
|
-
tsv = TSV.new(File.open(filename), :double, :sep => /\s+/, :key => "OtherID")
|
16
|
-
assert_equal :double, tsv.type
|
17
|
-
assert_equal "OtherID", tsv.key_field
|
18
|
-
assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
|
19
|
-
assert_equal ["a", "aa", "aaa"], tsv["Id1"][1]
|
20
|
-
assert_equal ["a", "aa", "aaa"], tsv["Id2"][1]
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_grep
|
25
|
-
content =<<-EOF
|
26
|
-
#Id ValueA ValueB OtherID
|
27
|
-
row1 a|aa|aaa b Id1|Id2
|
28
|
-
row2 A B Id3
|
29
|
-
EOF
|
30
|
-
|
31
|
-
TmpFile.with_file(content) do |filename|
|
32
|
-
tsv = TSV.new(File.open(filename), :sep => /\s+/, :grep => %w(row1))
|
33
|
-
assert tsv.keys.include? "row1"
|
34
|
-
assert( ! tsv.keys.include?("row2"))
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_open_stringoptions
|
39
|
-
content =<<-EOF
|
40
|
-
#Id ValueA ValueB OtherID
|
41
|
-
row1 a|aa|aaa b Id1|Id2
|
42
|
-
row2 A B Id3
|
43
|
-
row3 a C Id4
|
44
|
-
EOF
|
45
|
-
|
46
|
-
TmpFile.with_file(content) do |filename|
|
47
|
-
tsv = TSV.new(filename + '#:sep=/\s+/')
|
48
|
-
assert_equal ["A"], tsv["row2"]["ValueA"]
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_headers
|
53
|
-
content =<<-EOF
|
54
|
-
#ID ValueA ValueB Comment
|
55
|
-
row1 a b c
|
56
|
-
row2 A B C
|
57
|
-
EOF
|
58
|
-
|
59
|
-
TmpFile.with_file(content) do |filename|
|
60
|
-
assert_equal ['ID', 'ValueA', 'ValueB', 'Comment'], TSV.headers(filename, :sep => ' ')
|
61
|
-
assert_equal nil, TSV.headers(filename, :sep => ' ', :header_hash => "##")
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_headerless
|
66
|
-
content =<<-EOF
|
67
|
-
row1 a b c
|
68
|
-
row2 A B C
|
69
|
-
EOF
|
70
|
-
|
71
|
-
TmpFile.with_file(content) do |filename|
|
72
|
-
assert_equal 3, TSV.new(filename, :sep => ' ')['row1'].length
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_extra
|
77
|
-
content =<<-EOF
|
78
|
-
#Id ValueA ValueB OtherID
|
79
|
-
row1 a|aa|aaa b Id1|Id2
|
80
|
-
row2 A B Id3
|
81
|
-
EOF
|
82
|
-
|
83
|
-
TmpFile.with_file(content) do |filename|
|
84
|
-
tsv = TSV.new(File.open(filename), :sep => /\s+/, :key => "OtherID", :fields => 2)
|
85
|
-
assert_equal ["b"], tsv["Id2"][0]
|
86
|
-
tsv = TSV.new(File.open(filename), :sep => /\s+/, :key => "OtherID", :fields => 'ValueB')
|
87
|
-
assert_equal ["b"], tsv["Id2"][0]
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_case
|
92
|
-
content =<<-EOF
|
93
|
-
#Id ValueA ValueB OtherID
|
94
|
-
row1 a|aa|aaa b Id1|Id2
|
95
|
-
row2 A B Id3
|
96
|
-
EOF
|
97
|
-
|
98
|
-
TmpFile.with_file(content) do |filename|
|
99
|
-
tsv = TSV.new(File.open(filename), :sep => /\s+/, :key => "OtherID", :case_insensitive => true)
|
100
|
-
assert_equal "OtherID", tsv.key_field
|
101
|
-
assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
|
102
|
-
assert_equal ["a", "aa", "aaa"], tsv["id1"][1]
|
103
|
-
assert_equal ["a", "aa", "aaa"], tsv["Id2"][1]
|
104
|
-
|
105
|
-
tsv = TSV.new(File.open(filename), :sep => /\s+/, :key => "OtherID", :case_insensitive => false)
|
106
|
-
assert_equal "OtherID", tsv.key_field
|
107
|
-
assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
|
108
|
-
assert_nil tsv["id1"]
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_persistence
|
113
|
-
content =<<-EOF
|
114
|
-
#Id ValueA ValueB OtherID
|
115
|
-
row1 a|aa|aaa b Id1|Id2
|
116
|
-
row2 A B Id3
|
117
|
-
EOF
|
118
|
-
|
119
|
-
TmpFile.with_file(content) do |filename|
|
120
|
-
tsv = TSV.new(filename, :sep => /\s+/, :key => "OtherID", :persistence => true)
|
121
|
-
assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
|
122
|
-
|
123
|
-
tsv.write
|
124
|
-
tsv['Id4'] = [["row3"],["aA"],["bB","bbBB"]]
|
125
|
-
assert_equal ["aA"], tsv["Id4"][1]
|
126
|
-
tsv = TSV.new(File.open(filename), :sep => /\s+/, :key => "OtherID", :persistence => true)
|
127
|
-
assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
|
128
|
-
|
129
|
-
assert_equal ["aA"], tsv["Id4"][1]
|
130
|
-
assert_equal [["b"],["B"]], tsv.values_at("Id1", "Id3").collect{|values| values[2]}
|
131
|
-
tsv = TSV.new(File.open(filename), :flat, :sep => /\s+/, :key => "OtherID", :persistence => false)
|
132
|
-
assert(tsv["Id3"].include? "A")
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_named_array
|
137
|
-
content =<<-EOF
|
138
|
-
#Id ValueA ValueB OtherID
|
139
|
-
row1 a|aa|aaa b Id1|Id2
|
140
|
-
row2 A B Id3
|
141
|
-
EOF
|
142
|
-
|
143
|
-
TmpFile.with_file(content) do |filename|
|
144
|
-
tsv = TSV.new(File.open(filename), :sep => /\s+/, :key => "OtherID", :case_insensitive => true)
|
145
|
-
assert_equal "OtherID", tsv.key_field
|
146
|
-
assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
|
147
|
-
assert_equal ["a", "aa", "aaa"], tsv["id1"][1]
|
148
|
-
assert_equal ["a", "aa", "aaa"], tsv["Id2"]["ValueA"]
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def test_one_col
|
153
|
-
content =<<-EOF
|
154
|
-
#Id
|
155
|
-
row1
|
156
|
-
row2
|
157
|
-
EOF
|
158
|
-
|
159
|
-
TmpFile.with_file(content) do |filename|
|
160
|
-
tsv = TSV.new(File.open(filename), :sep => /\s+/)
|
161
|
-
assert_equal "Id", tsv.key_field
|
162
|
-
assert_equal [], tsv.fields
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
|
167
|
-
def test_case_insensitive
|
168
|
-
content1 =<<-EOF
|
169
|
-
#: :sep=/\\s+/#:case_insensitive=false
|
170
|
-
#Id ValueA ValueB
|
171
|
-
row1 a|aa|aaa b
|
172
|
-
row2 A B
|
173
|
-
EOF
|
174
|
-
|
175
|
-
tsv1 = tsv2 = identifiers = nil
|
176
|
-
TmpFile.with_file(content1) do |filename|
|
177
|
-
tsv1 = TSV.new(File.open(filename), :key => "ValueA")
|
178
|
-
assert !tsv1.case_insensitive
|
179
|
-
assert tsv1.include? "A"
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
def test_create_array
|
184
|
-
tsv = TSV.new(%w(a b c))
|
185
|
-
assert_equal %w(a b c).sort, tsv.keys.sort
|
186
|
-
assert_equal [[]] * tsv.keys.length, tsv.values
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_persistence_data
|
190
|
-
content1 =<<-EOF
|
191
|
-
#: :sep=/\\s+/#:case_insensitive=false
|
192
|
-
#Id ValueA ValueB
|
193
|
-
row1 a|aa|aaa b
|
194
|
-
row2 A B
|
195
|
-
EOF
|
196
|
-
|
197
|
-
tsv1 = tsv2 = identifiers = nil
|
198
|
-
TmpFile.with_file(content1) do |filename|
|
199
|
-
TmpFile.with_file do |tchashfile|
|
200
|
-
tchash = TCHash.get(tchashfile, true)
|
201
|
-
tsv1 = TSV.new(File.open(filename), :key => "ValueA", :persistence_data => tchash)
|
202
|
-
assert TCHash === tsv1.data
|
203
|
-
assert !tsv1.case_insensitive
|
204
|
-
assert tsv1.include? "A"
|
205
|
-
ddd tsv1.filename
|
206
|
-
|
207
|
-
tsv1 = TSV.new(tchash, :key => "ValueA")
|
208
|
-
assert TCHash === tsv1.data
|
209
|
-
assert !tsv1.case_insensitive
|
210
|
-
assert tsv1.include? "A"
|
211
|
-
ddd tsv1.filename
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
end
|
216
|
-
|
217
|
-
def test_with_hash
|
218
|
-
assert TSV === TSV.new {}, :list
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|