rbbt-util 1.0.1

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.
@@ -0,0 +1,652 @@
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
+ def test_keep_empty
7
+ content =<<-EOF
8
+ #Id ValueA ValueB Comment
9
+ row1 a|aa|aaa b c
10
+ row2 A B
11
+ EOF
12
+
13
+ TmpFile.with_file(content) do |filename|
14
+ data = {}
15
+ key_field, fields = TSV.parse(data, File.open(filename), :sep => /\s+/, :keep_empty => true)
16
+ assert_equal ["ValueA", "ValueB", "Comment"], fields
17
+ assert_equal ["c"], data["row1"][2]
18
+ assert_equal [""], data["row2"][2]
19
+ end
20
+ end
21
+
22
+ def test_slice
23
+ content =<<-EOF
24
+ #ID ValueA ValueB Comment
25
+ row1 a b c
26
+ row2 A B C
27
+ EOF
28
+
29
+ TmpFile.with_file(content) do |filename|
30
+ tsv = TSV.new(File.open(filename), :sep => /\s/)
31
+ assert_equal [["a"],["c"]], tsv.reorder(:main, ["ValueA", "Comment"])["row1"]
32
+ end
33
+ end
34
+
35
+ def test_headers
36
+ content =<<-EOF
37
+ #ID ValueA ValueB Comment
38
+ row1 a b c
39
+ row2 A B C
40
+ EOF
41
+
42
+ TmpFile.with_file(content) do |filename|
43
+ assert_equal ['ID', 'ValueA', 'ValueB', 'Comment'], TSV.headers(filename, :sep => ' ')
44
+ end
45
+ end
46
+
47
+ def test_headerless
48
+ content =<<-EOF
49
+ row1 a b c
50
+ row2 A B C
51
+ EOF
52
+
53
+ TmpFile.with_file(content) do |filename|
54
+ assert_equal 3, TSV.new(filename, :sep => ' ')['row1'].length
55
+ end
56
+ end
57
+
58
+ def test_hash
59
+ content =<<-EOF
60
+ #Id ValueA ValueB
61
+ row1 a|aa|aaa b
62
+ row2 A B
63
+ EOF
64
+
65
+ TmpFile.with_file(content) do |filename|
66
+ data = {}
67
+ key_field, fields = TSV.parse(data, File.open(filename), :sep => /\s+/)
68
+ assert_equal "Id", key_field
69
+ assert_equal ["ValueA", "ValueB"], fields
70
+ assert_equal ["a", "aa", "aaa"], data["row1"][0]
71
+ end
72
+ end
73
+
74
+ def test_large
75
+ content =<<-EOF
76
+ #Id ValueA ValueB OtherID
77
+ row1 a|aa|aaa b Id1|Id2
78
+ row2 A B Id3
79
+ EOF
80
+
81
+ TmpFile.with_file(content) do |filename|
82
+ tsv = TSV.new(File.open(filename), :sep => /\s+/, :native => "OtherID", :large => true)
83
+ assert_equal "OtherID", tsv.key_field
84
+ assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
85
+ assert_equal ["a", "aa", "aaa"], tsv["Id2"][1]
86
+ end
87
+ end
88
+
89
+ def test_tsv
90
+ content =<<-EOF
91
+ #Id ValueA ValueB OtherID
92
+ row1 a|aa|aaa b Id1|Id2
93
+ row2 A B Id3
94
+ EOF
95
+
96
+ TmpFile.with_file(content) do |filename|
97
+ tsv = TSV.new(File.open(filename), :sep => /\s+/, :native => "OtherID")
98
+ assert_equal "OtherID", tsv.key_field
99
+ assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
100
+ assert_equal ["a", "aa", "aaa"], tsv["Id1"][1]
101
+ assert_equal ["a", "aa", "aaa"], tsv["Id2"][1]
102
+ end
103
+ end
104
+
105
+ def test_open_file
106
+ content =<<-EOF
107
+ #Id ValueA ValueB OtherID
108
+ row1 a|aa|aaa b Id1|Id2
109
+ row2 A B Id3
110
+ row3 a C Id4
111
+ EOF
112
+
113
+ TmpFile.with_file(content) do |filename|
114
+ tsv = TSV.open_file(filename + '#:sep=/\s+/#:native=OtherID')
115
+ assert_equal "OtherID", tsv.key_field
116
+ assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
117
+ assert_equal ["a", "aa", "aaa"], tsv["Id1"][1]
118
+ assert_equal ["a", "aa", "aaa"], tsv["Id2"][1]
119
+ end
120
+ end
121
+
122
+
123
+
124
+ def test_extra
125
+ content =<<-EOF
126
+ #Id ValueA ValueB OtherID
127
+ row1 a|aa|aaa b Id1|Id2
128
+ row2 A B Id3
129
+ EOF
130
+
131
+ TmpFile.with_file(content) do |filename|
132
+ tsv = TSV.new(File.open(filename), :sep => /\s+/, :native => "OtherID", :extra => 2)
133
+ assert_equal ["b"], tsv["Id2"][0]
134
+ tsv = TSV.new(File.open(filename), :sep => /\s+/, :native => "OtherID", :extra => 'ValueB')
135
+ assert_equal ["b"], tsv["Id2"][0]
136
+ end
137
+ end
138
+
139
+ def test_case
140
+ content =<<-EOF
141
+ #Id ValueA ValueB OtherID
142
+ row1 a|aa|aaa b Id1|Id2
143
+ row2 A B Id3
144
+ EOF
145
+
146
+ TmpFile.with_file(content) do |filename|
147
+ tsv = TSV.new(File.open(filename), :sep => /\s+/, :native => "OtherID", :case_insensitive => true)
148
+ assert_equal "OtherID", tsv.key_field
149
+ assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
150
+ assert_equal ["a", "aa", "aaa"], tsv["id1"][1]
151
+ assert_equal ["a", "aa", "aaa"], tsv["Id2"][1]
152
+ end
153
+ end
154
+
155
+ def test_persistence
156
+ content =<<-EOF
157
+ #Id ValueA ValueB OtherID
158
+ row1 a|aa|aaa b Id1|Id2
159
+ row2 A B Id3
160
+ EOF
161
+
162
+ TmpFile.with_file(content) do |filename|
163
+ tsv = TSV.new(filename, :sep => /\s+/, :native => "OtherID", :persistence => true)
164
+ assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
165
+ tsv['Id4'] = [["row3"],["aA"],["bB","bbBB"]]
166
+ assert_equal ["aA"], tsv["Id4"][1]
167
+ tsv = TSV.new(File.open(filename), :sep => /\s+/, :native => "OtherID", :persistence => true)
168
+ assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
169
+ assert_equal ["aA"], tsv["Id4"][1]
170
+ assert_equal [["b"],["B"]], tsv.values_at("Id1", "Id3").collect{|values| values[2]}
171
+ tsv = TSV.new(File.open(filename), :sep => /\s+/, :native => "OtherID", :persistence => true, :flatten => true)
172
+ assert(tsv["Id3"].include? "A")
173
+ end
174
+ end
175
+
176
+ def test_index_headerless
177
+ content =<<-EOF
178
+ row1 a|aa|aaa b Id1|Id2
179
+ row2 A B Id3
180
+ EOF
181
+
182
+ TmpFile.with_file(content) do |filename|
183
+ tsv = TSV.new(File.open(filename), :sep => /\s+/)
184
+ index = tsv.index(:case_insensitive => true, :field => 2)
185
+ assert index["row1"].include? "Id1"
186
+ end
187
+ end
188
+
189
+
190
+ def test_index
191
+ content =<<-EOF
192
+ #Id ValueA ValueB OtherID
193
+ row1 a|aa|aaa b Id1|Id2
194
+ row2 A B Id3
195
+ EOF
196
+
197
+ TmpFile.with_file(content) do |filename|
198
+ tsv = TSV.new(File.open(filename), :sep => /\s+/, :native => "OtherID", :persistence => false)
199
+ index = tsv.index(:case_insensitive => true)
200
+ assert index["row1"].include? "Id1"
201
+ assert_equal "OtherID", index.key_field
202
+ end
203
+
204
+ TmpFile.with_file(content) do |filename|
205
+ tsv = TSV.new(File.open(filename), :sep => /\s+/, :native => "OtherID")
206
+ index = tsv.index(:case_insensitive => true)
207
+ assert index["row1"].include? "Id1"
208
+ assert_equal "OtherID", index.key_field
209
+ end
210
+ end
211
+
212
+ def test_best_index
213
+ content =<<-EOF
214
+ #Id ValueA ValueB OtherID
215
+ row1 a|aa|aaa b|A Id1
216
+ row2 A a|B Id3
217
+ EOF
218
+
219
+ TmpFile.with_file(content) do |filename|
220
+ tsv = TSV.new(File.open(filename), :sep => /\s+/, :native => "OtherID", :persistence => true)
221
+ index = tsv.index(:case_insensitive => false, :order => true)
222
+ assert_equal "Id1", index['a'].first
223
+ assert_equal "Id3", index['A'].first
224
+ assert_equal "OtherID", index.key_field
225
+ end
226
+
227
+ TmpFile.with_file(content) do |filename|
228
+ tsv = TSV.new(File.open(filename), :sep => /\s+/, :native => "OtherID")
229
+ index = tsv.index(:case_insensitive => true)
230
+ assert index["row1"].include? "Id1"
231
+ assert_equal "OtherID", index.key_field
232
+ end
233
+ end
234
+
235
+ def test_values_at
236
+ content =<<-EOF
237
+ #Id ValueA ValueB OtherID
238
+ row1 a|aa|aaa b Id1|Id2
239
+ row2 A B Id3
240
+ EOF
241
+
242
+ TmpFile.with_file(content) do |filename|
243
+ tsv = TSV.new(File.open(filename), :sep => /\s+/, :native => "OtherID", :persistence => true)
244
+ index = tsv.index(:case_insensitive => true)
245
+ assert index.values_at(*["row1"]).first.include? "Id1"
246
+ end
247
+ end
248
+
249
+ def test_named_array
250
+ content =<<-EOF
251
+ #Id ValueA ValueB OtherID
252
+ row1 a|aa|aaa b Id1|Id2
253
+ row2 A B Id3
254
+ EOF
255
+
256
+ TmpFile.with_file(content) do |filename|
257
+ tsv = TSV.new(File.open(filename), :sep => /\s+/, :native => "OtherID", :case_insensitive => true)
258
+ assert_equal "OtherID", tsv.key_field
259
+ assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
260
+ assert_equal ["a", "aa", "aaa"], tsv["id1"][1]
261
+ assert_equal ["a", "aa", "aaa"], tsv["Id2"]["ValueA"]
262
+
263
+ tsv_sliced = tsv.reorder(:main, ["ValueA", "ValueB"])
264
+
265
+ assert_equal ["ValueA", "ValueB"], tsv_sliced.fields
266
+ assert_equal ["a", "aa", "aaa"], tsv_sliced["id1"][0]
267
+ assert_equal ["a", "aa", "aaa"], tsv_sliced["Id2"]["ValueA"]
268
+ end
269
+ end
270
+
271
+ def test_helpers
272
+ begin
273
+ require 'rbbt/sources/organism'
274
+ filename = File.join(Organism.datadir('Sce'), 'identifiers')
275
+ missing = true
276
+ index = TSV.index(filename, :persistence => true, :native => "Associated Gene Name")
277
+ assert index['1020'].include? 'CDK5'
278
+ index = TSV.index(filename, :persistence => true, :native => "Associated Gene Name")
279
+ assert index[[nil,'1020']].include? 'CDK5'
280
+ index = TSV.index(filename, :persistence => true, :native => "Associated Gene Name")
281
+ assert index[['MISSING','1020']].include? 'CDK5'
282
+ rescue Exception
283
+ end
284
+ end
285
+
286
+
287
+ def test_sort
288
+ content =<<-EOF
289
+ #Id ValueA ValueB OtherID
290
+ row1 a|aa|aaa b Id1|Id2
291
+ row2 A B Id3
292
+ EOF
293
+
294
+ TmpFile.with_file(content) do |filename|
295
+ tsv = TSV.new(File.open(filename), :sep => /\s+/)
296
+ assert_equal "row2", tsv.sort{|a,b| a[1]["ValueB"] <=> b[1]["ValueA"] }.first[0]
297
+ assert_equal "B", tsv.sort{|a,b| a[1]["ValueB"] <=> b[1]["ValueA"] }.first[1]["ValueB"].first
298
+ end
299
+
300
+ TmpFile.with_file(content) do |filename|
301
+ tsv = TSV.new(File.open(filename), :sep => /\s+/)
302
+ assert_equal "row2", tsv.sort_by{|k,v| v["ValueB"]}.first[0]
303
+ assert_equal "B", tsv.sort_by{|k,v| v["ValueB"]}.first[1]["ValueB"].first
304
+ end
305
+ end
306
+
307
+ def test_to_s
308
+ content =<<-EOF
309
+ #Id ValueA ValueB OtherID
310
+ row1 a|aa|aaa b Id1|Id2
311
+ row2 A B Id3
312
+ EOF
313
+ TmpFile.with_file(content) do |filename|
314
+ tsv = TSV.new(File.open(filename), :sep => /\s+/)
315
+ assert_equal content, tsv.to_s
316
+ end
317
+ end
318
+
319
+
320
+ def test_smart_merge_single
321
+ content1 =<<-EOF
322
+ #Id ValueA ValueB
323
+ row1 a|aa|aaa b
324
+ row2 A B
325
+ EOF
326
+
327
+ content2 =<<-EOF
328
+ #ValueC ValueB OtherID
329
+ c|cc|ccc b Id1|Id2
330
+ C B Id3
331
+ EOF
332
+
333
+ tsv1 = tsv2 = nil
334
+ TmpFile.with_file(content1) do |filename|
335
+ tsv1 = TSV.new(File.open(filename), :sep => /\s+/, :unique => true)
336
+ end
337
+
338
+ TmpFile.with_file(content2) do |filename|
339
+ tsv2 = TSV.new(File.open(filename), :sep => /\s+/, :unique => true)
340
+ end
341
+
342
+ tsv1.smart_merge tsv2, "ValueB"
343
+
344
+ assert_equal "C", tsv1["row2"]["ValueC"]
345
+ assert %w(c cc ccc).include? tsv1["row1"]["ValueC"]
346
+ assert_equal "Id1", tsv1["row1"]["OtherID"]
347
+ end
348
+
349
+ def test_smart_merge
350
+ content1 =<<-EOF
351
+ #Id ValueA ValueB
352
+ row1 a|aa|aaa b
353
+ row2 A B
354
+ EOF
355
+
356
+ content2 =<<-EOF
357
+ #ValueC ValueB OtherID
358
+ c|cc|ccc b Id1|Id2
359
+ C B Id3
360
+ EOF
361
+
362
+ tsv1 = tsv2 = nil
363
+ TmpFile.with_file(content1) do |filename|
364
+ tsv1 = TSV.new(File.open(filename), :sep => /\s+/)
365
+ end
366
+
367
+ TmpFile.with_file(content2) do |filename|
368
+ tsv2 = TSV.new(File.open(filename), :sep => /\s+/)
369
+ end
370
+
371
+ tsv1.smart_merge tsv2, "ValueB"
372
+
373
+ assert_equal %w(C), tsv1["row2"]["ValueC"]
374
+ assert_equal %w(Id1 Id2), tsv1["row1"]["OtherID"]
375
+ end
376
+
377
+ def test_smart_merge_through_index_find_headers
378
+ content1 =<<-EOF
379
+ #Id ValueA ValueBB
380
+ row1 a|aa|aaa bb
381
+ row2 A BB
382
+ EOF
383
+
384
+ content2 =<<-EOF
385
+ #ValueC ValueB OtherID ValueA
386
+ c|cc|ccc b Id1|Id2 aaaa
387
+ C B Id3 AA
388
+ EOF
389
+
390
+ index =<<-EOF
391
+ #ValueB ValueBB
392
+ b bb
393
+ B BB
394
+ EOF
395
+
396
+ tsv1 = tsv2 = nil
397
+ TmpFile.with_file(content1) do |filename|
398
+ tsv1 = TSV.new(File.open(filename), :sep => /\s+/)
399
+ end
400
+
401
+ TmpFile.with_file(content2) do |filename|
402
+ tsv2 = TSV.new(File.open(filename), :sep => /\s+/)
403
+ end
404
+
405
+ TmpFile.with_file(index) do |filename|
406
+ index = TSV.index(filename, :sep => /\s+/)
407
+ end
408
+
409
+ tsv1.smart_merge tsv2, index
410
+
411
+ assert_equal %w(Id1 Id2), tsv1["row1"]["OtherID"]
412
+ assert_equal %w(C), tsv1["row2"]["ValueC"]
413
+
414
+ assert_equal %w(a aa aaa aaaa), tsv1["row1"]["ValueA"]
415
+ end
416
+
417
+
418
+ def test_smart_merge_through_string_find_headers
419
+ content1 =<<-EOF
420
+ #Id ValueA ValueBB
421
+ row1 a|aa|aaa bb
422
+ row2 A BB
423
+ EOF
424
+
425
+ content2 =<<-EOF
426
+ #ValueC ValueB OtherID ValueA
427
+ c|cc|ccc b Id1|Id2 aaaa
428
+ C B Id3 AA
429
+ EOF
430
+
431
+ index =<<-EOF
432
+ #ValueB ValueBB
433
+ b bb
434
+ B BB
435
+ EOF
436
+
437
+ tsv1 = tsv2 = nil
438
+ TmpFile.with_file(content1) do |filename|
439
+ tsv1 = TSV.new(File.open(filename), :sep => /\s+/)
440
+ end
441
+
442
+ TmpFile.with_file(content2) do |filename|
443
+ tsv2 = TSV.new(File.open(filename), :sep => /\s+/)
444
+ end
445
+
446
+ TmpFile.with_file(index) do |filename|
447
+ tsv1.smart_merge tsv2, "through:#{filename}#:sep=/\\s+/"
448
+ end
449
+
450
+ assert_equal %w(Id1 Id2), tsv1["row1"]["OtherID"]
451
+ assert_equal %w(C), tsv1["row2"]["ValueC"]
452
+
453
+ assert_equal %w(a aa aaa aaaa), tsv1["row1"]["ValueA"]
454
+ end
455
+
456
+ def test_smart_merge_through_string
457
+ content1 =<<-EOF
458
+ #Id ValueA ValueBB
459
+ row1 a|aa|aaa bb
460
+ row2 A BB
461
+ EOF
462
+
463
+ content2 =<<-EOF
464
+ #ValueC ValueB OtherID ValueA
465
+ c|cc|ccc b Id1|Id2 aaaa
466
+ C B Id3 AA
467
+ EOF
468
+
469
+ index =<<-EOF
470
+ #ValueB ValueBB
471
+ b bb
472
+ B BB
473
+ EOF
474
+
475
+ tsv1 = tsv2 = nil
476
+ TmpFile.with_file(content1) do |filename|
477
+ tsv1 = TSV.new(File.open(filename), :sep => /\s+/)
478
+ end
479
+
480
+ TmpFile.with_file(content2) do |filename|
481
+ tsv2 = TSV.new(File.open(filename), :sep => /\s+/)
482
+ end
483
+
484
+ TmpFile.with_file(index) do |filename|
485
+ tsv1.smart_merge tsv2, "through:#{filename}#:sep=/\\s+/#using:ValueBB"
486
+ end
487
+
488
+ assert_equal %w(Id1 Id2), tsv1["row1"]["OtherID"]
489
+ assert_equal %w(C), tsv1["row2"]["ValueC"]
490
+
491
+ assert_equal %w(a aa aaa aaaa), tsv1["row1"]["ValueA"]
492
+ end
493
+ def test_smart_merge_common_fields
494
+ content1 =<<-EOF
495
+ #Id ValueA ValueB
496
+ row1 a|aa|aaa b
497
+ row2 A B
498
+ EOF
499
+
500
+ content2 =<<-EOF
501
+ #ValueC ValueB OtherID ValueA
502
+ c|cc|ccc b Id1|Id2 aaaa
503
+ C B Id3 AA
504
+ EOF
505
+
506
+ tsv1 = tsv2 = nil
507
+ TmpFile.with_file(content1) do |filename|
508
+ tsv1 = TSV.new(File.open(filename), :sep => /\s+/)
509
+ end
510
+
511
+ TmpFile.with_file(content2) do |filename|
512
+ tsv2 = TSV.new(File.open(filename), :sep => /\s+/)
513
+ end
514
+
515
+ tsv1.smart_merge tsv2, "ValueB"
516
+
517
+ assert_equal %w(Id1 Id2), tsv1["row1"]["OtherID"]
518
+ assert_equal %w(C), tsv1["row2"]["ValueC"]
519
+
520
+ assert_equal %w(a aa aaa aaaa), tsv1["row1"]["ValueA"]
521
+ end
522
+
523
+ def test_smart_merge_headerless
524
+ content1 =<<-EOF
525
+ row1 a|aa|aaa b
526
+ row2 A B
527
+ EOF
528
+
529
+ content2 =<<-EOF
530
+ c|cc|ccc b Id1|Id2
531
+ C B Id3
532
+ EOF
533
+
534
+ tsv1 = tsv2 = nil
535
+ TmpFile.with_file(content1) do |filename|
536
+ tsv1 = TSV.new(File.open(filename), :sep => /\s+/)
537
+ end
538
+
539
+ TmpFile.with_file(content2) do |filename|
540
+ tsv2 = TSV.new(File.open(filename), :sep => /\s+/)
541
+ end
542
+
543
+ tsv1.smart_merge tsv2, 1
544
+
545
+ assert_equal %w(C), tsv1["row2"][2]
546
+ assert_equal %w(Id1 Id2), tsv1["row1"][3]
547
+ end
548
+
549
+
550
+ def test_reorder_simple
551
+ content =<<-EOF
552
+ #Id ValueA ValueB OtherID
553
+ row1 a|aa|aaa b Id1|Id2
554
+ row2 A B Id3
555
+ row3 a C Id4
556
+ EOF
557
+
558
+ TmpFile.with_file(content) do |filename|
559
+ tsv = TSV.new(File.open(filename), :sep => /\s+/)
560
+
561
+ tsv1 = tsv.reorder("ValueA")
562
+
563
+ assert_equal "ValueA", tsv1.key_field
564
+ assert_equal %w(Id ValueB OtherID), tsv1.fields
565
+ assert_equal ["B"], tsv1["A"]["ValueB"]
566
+ assert_equal ["b","C"], tsv1["a"]["ValueB"]
567
+ assert_equal ["b"], tsv1["aa"]["ValueB"]
568
+
569
+ end
570
+ end
571
+
572
+ def test_reorder_simple_headerless
573
+ content =<<-EOF
574
+ row1 a|aa|aaa b Id1|Id2
575
+ row2 A B Id3
576
+ row3 a C Id4
577
+ EOF
578
+
579
+ TmpFile.with_file(content) do |filename|
580
+ tsv = TSV.new(File.open(filename), :sep => /\s+/)
581
+
582
+ tsv1 = tsv.reorder(0)
583
+
584
+ assert_nil tsv1.key_field
585
+ assert_equal ["B"], tsv1["A"][1]
586
+ assert_equal ["b","C"], tsv1["a"][1]
587
+ assert_equal ["b"], tsv1["aa"][1]
588
+ assert_equal ["row1"], tsv1["aa"][0]
589
+ assert_equal ["row1","row3"], tsv1["a"][0]
590
+ end
591
+ end
592
+
593
+
594
+ def test_reorder_remove_field
595
+ content =<<-EOF
596
+ #Id ValueA ValueB OtherID
597
+ row1 a|aa|aaa b Id1|Id2
598
+ row2 A B Id3
599
+ row3 a C Id4
600
+ EOF
601
+
602
+ TmpFile.with_file(content) do |filename|
603
+ tsv = TSV.new(File.open(filename), :sep => /\s+/)
604
+
605
+ tsv1 = tsv.reorder("ValueA", ["ValueB", "Id"])
606
+
607
+ assert_equal "ValueA", tsv1.key_field
608
+ assert_equal %w(ValueB Id), tsv1.fields
609
+ assert_equal ["B"], tsv1["A"]["ValueB"]
610
+ assert_equal ["b","C"], tsv1["a"]["ValueB"]
611
+ assert_equal ["row1"], tsv1["aa"]["Id"]
612
+ assert_equal ["row1","row3"], tsv1["a"]["Id"]
613
+ end
614
+ end
615
+
616
+ def test_through
617
+ content =<<-EOF
618
+ #Id ValueA ValueB OtherID
619
+ row1 a|aa|aaa b Id1|Id2
620
+ row2 A B Id3
621
+ row3 a C Id4
622
+ EOF
623
+
624
+ TmpFile.with_file(content) do |filename|
625
+ tsv = TSV.new(File.open(filename), :sep => /\s+/)
626
+
627
+ tsv.through "ValueA" do |key, values|
628
+ assert(tsv.keys.include? values["Id"].first)
629
+ end
630
+ end
631
+ end
632
+
633
+ def test_process
634
+ content =<<-EOF
635
+ #Id ValueA ValueB OtherID
636
+ row1 a|aa|aaa b Id1|Id2
637
+ row2 A B Id3
638
+ row3 a C Id4
639
+ EOF
640
+
641
+ TmpFile.with_file(content) do |filename|
642
+ tsv = TSV.new(File.open(filename), :sep => /\s+/)
643
+
644
+ tsv.process "ValueA" do |field_values,key,values|
645
+ field_values.collect{|v| "Pref:#{v}"}
646
+ end
647
+
648
+ assert_equal ["Pref:A"], tsv["row2"]["ValueA"]
649
+ end
650
+ end
651
+ end
652
+
@@ -0,0 +1,9 @@
1
+ require 'test/unit'
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+
5
+ class Test::Unit::TestCase
6
+ def test_datafile(file)
7
+ File.join(File.dirname(__FILE__), 'data', file)
8
+ end
9
+ end
data/test/test_pkg.rb ADDED
@@ -0,0 +1,38 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/test_helper')
2
+ require 'rbbt'
3
+ require 'rbbt/util/pkg_data'
4
+ require 'rbbt/util/pkg_config'
5
+ require 'rbbt/util/data_module'
6
+ require 'yaml'
7
+
8
+ module A
9
+ extend PKGConfig
10
+ extend PKGData
11
+
12
+ self.load_cfg(%w(datadir), {"datadir" => "/tmp/A"}.to_yaml)
13
+ end
14
+
15
+ module B
16
+ extend PKGConfig
17
+ extend PKGData
18
+
19
+ self.load_cfg(%w(datadir), {"datadir" => "/tmp/B"}.to_yaml)
20
+ end
21
+
22
+ module DA
23
+ PKG=A
24
+ extend DataModule
25
+ end
26
+
27
+ module DB
28
+ PKG=B
29
+ extend DataModule
30
+ end
31
+
32
+ class TestPKG < Test::Unit::TestCase
33
+ def test_datadir
34
+ assert_equal "/tmp/A", A.datadir
35
+ assert_equal "/tmp/B", B.datadir
36
+ end
37
+
38
+ end