scout-essentials 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.vimproject +78 -0
  4. data/Gemfile +14 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +18 -0
  7. data/Rakefile +47 -0
  8. data/VERSION +1 -0
  9. data/lib/scout/cmd.rb +348 -0
  10. data/lib/scout/concurrent_stream.rb +284 -0
  11. data/lib/scout/config.rb +168 -0
  12. data/lib/scout/exceptions.rb +77 -0
  13. data/lib/scout/indiferent_hash/case_insensitive.rb +30 -0
  14. data/lib/scout/indiferent_hash/options.rb +115 -0
  15. data/lib/scout/indiferent_hash.rb +96 -0
  16. data/lib/scout/log/color.rb +224 -0
  17. data/lib/scout/log/color_class.rb +269 -0
  18. data/lib/scout/log/fingerprint.rb +69 -0
  19. data/lib/scout/log/progress/report.rb +244 -0
  20. data/lib/scout/log/progress/util.rb +173 -0
  21. data/lib/scout/log/progress.rb +106 -0
  22. data/lib/scout/log/trap.rb +107 -0
  23. data/lib/scout/log.rb +441 -0
  24. data/lib/scout/meta_extension.rb +100 -0
  25. data/lib/scout/misc/digest.rb +63 -0
  26. data/lib/scout/misc/filesystem.rb +25 -0
  27. data/lib/scout/misc/format.rb +255 -0
  28. data/lib/scout/misc/helper.rb +31 -0
  29. data/lib/scout/misc/insist.rb +56 -0
  30. data/lib/scout/misc/monitor.rb +66 -0
  31. data/lib/scout/misc/system.rb +73 -0
  32. data/lib/scout/misc.rb +10 -0
  33. data/lib/scout/named_array.rb +138 -0
  34. data/lib/scout/open/lock/lockfile.rb +587 -0
  35. data/lib/scout/open/lock.rb +68 -0
  36. data/lib/scout/open/remote.rb +135 -0
  37. data/lib/scout/open/stream.rb +491 -0
  38. data/lib/scout/open/util.rb +244 -0
  39. data/lib/scout/open.rb +170 -0
  40. data/lib/scout/path/find.rb +204 -0
  41. data/lib/scout/path/tmpfile.rb +8 -0
  42. data/lib/scout/path/util.rb +127 -0
  43. data/lib/scout/path.rb +51 -0
  44. data/lib/scout/persist/open.rb +17 -0
  45. data/lib/scout/persist/path.rb +15 -0
  46. data/lib/scout/persist/serialize.rb +157 -0
  47. data/lib/scout/persist.rb +104 -0
  48. data/lib/scout/resource/open.rb +8 -0
  49. data/lib/scout/resource/path.rb +80 -0
  50. data/lib/scout/resource/produce/rake.rb +69 -0
  51. data/lib/scout/resource/produce.rb +151 -0
  52. data/lib/scout/resource/scout.rb +3 -0
  53. data/lib/scout/resource/software.rb +178 -0
  54. data/lib/scout/resource/util.rb +59 -0
  55. data/lib/scout/resource.rb +40 -0
  56. data/lib/scout/simple_opt/accessor.rb +54 -0
  57. data/lib/scout/simple_opt/doc.rb +126 -0
  58. data/lib/scout/simple_opt/get.rb +57 -0
  59. data/lib/scout/simple_opt/parse.rb +67 -0
  60. data/lib/scout/simple_opt/setup.rb +26 -0
  61. data/lib/scout/simple_opt.rb +5 -0
  62. data/lib/scout/tmpfile.rb +129 -0
  63. data/lib/scout-essentials.rb +10 -0
  64. data/scout-essentials.gemspec +143 -0
  65. data/share/color/color_names +507 -0
  66. data/share/color/diverging_colors.hex +12 -0
  67. data/share/software/install_helpers +523 -0
  68. data/test/scout/indiferent_hash/test_case_insensitive.rb +16 -0
  69. data/test/scout/indiferent_hash/test_options.rb +46 -0
  70. data/test/scout/log/test_color.rb +0 -0
  71. data/test/scout/log/test_progress.rb +108 -0
  72. data/test/scout/misc/test_digest.rb +30 -0
  73. data/test/scout/misc/test_filesystem.rb +30 -0
  74. data/test/scout/misc/test_insist.rb +13 -0
  75. data/test/scout/misc/test_system.rb +21 -0
  76. data/test/scout/open/test_lock.rb +52 -0
  77. data/test/scout/open/test_remote.rb +25 -0
  78. data/test/scout/open/test_stream.rb +676 -0
  79. data/test/scout/open/test_util.rb +73 -0
  80. data/test/scout/path/test_find.rb +110 -0
  81. data/test/scout/path/test_util.rb +22 -0
  82. data/test/scout/persist/test_open.rb +37 -0
  83. data/test/scout/persist/test_path.rb +37 -0
  84. data/test/scout/persist/test_serialize.rb +114 -0
  85. data/test/scout/resource/test_path.rb +58 -0
  86. data/test/scout/resource/test_produce.rb +94 -0
  87. data/test/scout/resource/test_software.rb +24 -0
  88. data/test/scout/resource/test_util.rb +38 -0
  89. data/test/scout/simple_opt/test_doc.rb +16 -0
  90. data/test/scout/simple_opt/test_get.rb +11 -0
  91. data/test/scout/simple_opt/test_parse.rb +10 -0
  92. data/test/scout/simple_opt/test_setup.rb +77 -0
  93. data/test/scout/test_cmd.rb +85 -0
  94. data/test/scout/test_concurrent_stream.rb +29 -0
  95. data/test/scout/test_config.rb +66 -0
  96. data/test/scout/test_indiferent_hash.rb +26 -0
  97. data/test/scout/test_log.rb +32 -0
  98. data/test/scout/test_meta_extension.rb +80 -0
  99. data/test/scout/test_misc.rb +6 -0
  100. data/test/scout/test_named_array.rb +43 -0
  101. data/test/scout/test_open.rb +146 -0
  102. data/test/scout/test_path.rb +54 -0
  103. data/test/scout/test_persist.rb +186 -0
  104. data/test/scout/test_resource.rb +26 -0
  105. data/test/scout/test_tmpfile.rb +53 -0
  106. data/test/test_helper.rb +50 -0
  107. metadata +247 -0
@@ -0,0 +1,676 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ require 'scout/path'
5
+ require 'scout/open'
6
+
7
+ class TestOpenStream < Test::Unit::TestCase
8
+ def test_stream
9
+ content =<<-EOF
10
+ 1
11
+ 2
12
+ 3
13
+ 4
14
+ EOF
15
+ TmpFile.with_file(content) do |file|
16
+ TmpFile.with_file do |target|
17
+ f = File.open(file)
18
+ Open.consume_stream(f, false, target)
19
+ assert_equal content, File.open(target).read
20
+ end
21
+ end
22
+ end
23
+
24
+ def test_sensible_write
25
+ content =<<-EOF
26
+ 1
27
+ 2
28
+ 3
29
+ 4
30
+ EOF
31
+ TmpFile.with_file(content) do |file|
32
+ TmpFile.with_file do |target|
33
+ f = File.open(file)
34
+ Open.sensible_write(target, f)
35
+ assert_equal content, File.open(target).read
36
+ end
37
+ end
38
+ end
39
+
40
+ def test_open_pipe
41
+ sout = Open.open_pipe do |sin|
42
+ 10.times do |i|
43
+ sin.puts "line #{i}"
44
+ end
45
+ end
46
+
47
+ TmpFile.with_file do |tmp|
48
+ Open.consume_stream(sout, false, tmp)
49
+ assert_equal 10, Open.read(tmp).split("\n").length
50
+ end
51
+ end
52
+
53
+ def test_open_pipe_and_close
54
+
55
+ 10000.times do
56
+ sout = Open.open_pipe do |sin|
57
+ sin.puts "hola"
58
+ end
59
+ sout.read
60
+ sout.close
61
+ end
62
+ end
63
+
64
+
65
+ def test_open_pipe_error
66
+ sout = Open.open_pipe do |sin|
67
+ 10.times do |i|
68
+ sin.puts "line #{i}"
69
+ end
70
+ raise ScoutException
71
+ end
72
+
73
+ TmpFile.with_file do |tmp|
74
+ assert_raise ScoutException do
75
+ Open.consume_stream(sout, false, tmp)
76
+ end
77
+ end
78
+ end
79
+
80
+ def test_tee_stream
81
+ num = 2000
82
+ sout = Open.open_pipe do |sin|
83
+ num.times do |i|
84
+ sin.puts "line #{i} - #{rand(100000).to_s * 100}"
85
+ end
86
+ end
87
+
88
+ TmpFile.with_file do |tmp|
89
+ Path.setup tmp
90
+
91
+ s1, s2 = Open.tee_stream_thread sout
92
+
93
+ t1 = Open.consume_stream(s1, true, tmp.file1)
94
+ t2 = Open.consume_stream(s2, true, tmp.file2)
95
+ t1.join
96
+ t2.join
97
+ assert_equal num, Open.read(tmp.file1).split("\n").length
98
+ assert_equal num, Open.read(tmp.file2).split("\n").length
99
+ end
100
+ end
101
+
102
+ def test_tee_stream_multiple
103
+ num = 2000
104
+ sout = Open.open_pipe do |sin|
105
+ num.times do |i|
106
+ sin.puts "line #{i} - #{rand(100000).to_s * 100}"
107
+ end
108
+ end
109
+
110
+ TmpFile.with_file do |tmp|
111
+ Path.setup tmp
112
+
113
+ s1, s2, s3 = Open.tee_stream_thread_multiple sout, 3
114
+
115
+ t1 = Open.consume_stream(s1, true, tmp.file1)
116
+ t2 = Open.consume_stream(s2, true, tmp.file2)
117
+ t3 = Open.consume_stream(s3, true, tmp.file3)
118
+ t1.join
119
+ t2.join
120
+ t3.join
121
+ assert_equal num, Open.read(tmp.file1).split("\n").length
122
+ assert_equal num, Open.read(tmp.file2).split("\n").length
123
+ assert_equal num, Open.read(tmp.file3).split("\n").length
124
+ end
125
+ end
126
+
127
+
128
+ def test_tee_stream_source_error
129
+ 5.times do |i|
130
+ num = 2000
131
+ sout = Open.open_pipe do |sin|
132
+ num.times do |i|
133
+ sin.puts "line #{i} - #{rand(100000).to_s * 100}"
134
+ end
135
+ raise ScoutException
136
+ end
137
+
138
+ TmpFile.with_file do |tmp|
139
+ Path.setup tmp
140
+
141
+ s1, s2 = Open.tee_stream_thread sout
142
+
143
+ t1 = Open.consume_stream(s1, true, tmp.file1)
144
+ t2 = Open.consume_stream(s2, true, tmp.file2)
145
+ assert_raise ScoutException do
146
+ begin
147
+ t1.join
148
+ t2.join
149
+ rescue
150
+ raise
151
+ ensure
152
+ [t1, t2].each do |t|
153
+ begin
154
+ t.join if t.alive?
155
+ rescue ScoutException
156
+ end
157
+ end
158
+ end
159
+ end
160
+ refute Open.exist?(tmp.file1)
161
+ refute Open.exist?(tmp.file2)
162
+ end
163
+ end
164
+ end
165
+
166
+ def test_tee_stream_source_error_multiple
167
+ 5.times do |i|
168
+ num = 2000
169
+ sout = Open.open_pipe do |sin|
170
+ num.times do |i|
171
+ sin.puts "line #{i} - #{rand(100000).to_s * 100}"
172
+ end
173
+ raise ScoutException
174
+ end
175
+
176
+ TmpFile.with_file do |tmp|
177
+ Path.setup tmp
178
+
179
+ s1, s2, s3 = Open.tee_stream_thread_multiple sout, 3
180
+
181
+ t1 = Open.consume_stream(s1, true, tmp.file1)
182
+ t2 = Open.consume_stream(s2, true, tmp.file2)
183
+ t3 = Open.consume_stream(s3, true, tmp.file3)
184
+ assert_raise ScoutException do
185
+ begin
186
+ t1.join
187
+ t2.join
188
+ t3.join
189
+ rescue
190
+ raise
191
+ ensure
192
+ [t1, t2, t2].each do |t|
193
+ begin
194
+ t.join if t.alive?
195
+ rescue ScoutException
196
+ end
197
+ end
198
+ end
199
+ end
200
+ refute Open.exist?(tmp.file1)
201
+ refute Open.exist?(tmp.file2)
202
+ refute Open.exist?(tmp.file3)
203
+ end
204
+ end
205
+ end
206
+
207
+ def test_tee_stream_save_error
208
+ Log.with_severity 6 do
209
+ 50.times do |i|
210
+ TmpFile.with_file do |tmp|
211
+ Path.setup tmp
212
+ assert_raise ScoutException do
213
+ num = 2000
214
+ begin
215
+ sout = Open.open_pipe do |sin|
216
+ num.times do |i|
217
+ sin.puts "line #{i} - #{rand(100000).to_s * 100}"
218
+ end
219
+ end
220
+
221
+ begin
222
+ s1, s2 = Open.tee_stream_thread sout
223
+
224
+ s2.abort ScoutException.new
225
+ t = Open.consume_stream(s1, true, tmp.file)
226
+
227
+ t.join
228
+ ensure
229
+ s1.close if s1.respond_to?(:close) && ! s1.closed?
230
+ s1.join if s1.respond_to?(:join) && ! s1.joined?
231
+ s2.close if s2.respond_to?(:close) && ! s2.closed?
232
+ s2.join if s2.respond_to?(:join) && ! s2.joined?
233
+ end
234
+ ensure
235
+ sout.close if sout.respond_to?(:close) && ! sout.closed?
236
+ sout.join if sout.respond_to?(:join) && ! sout.joined?
237
+ end
238
+ end
239
+ refute Open.exist?(tmp.file)
240
+ end
241
+ end
242
+ end
243
+ end
244
+
245
+ def test_tee_stream_save_error_multiple
246
+ Log.with_severity 6 do
247
+ 50.times do |i|
248
+ TmpFile.with_file do |tmp|
249
+ Path.setup tmp
250
+ assert_raise ScoutException do
251
+ num = 2000
252
+ begin
253
+ sout = Open.open_pipe do |sin|
254
+ num.times do |i|
255
+ sin.puts "line #{i} - #{rand(100000).to_s * 100}"
256
+ end
257
+ end
258
+
259
+ begin
260
+ s1, s2, s3 = Open.tee_stream_thread_multiple sout, 3
261
+
262
+ s2.abort ScoutException.new
263
+ t1 = Open.consume_stream(s1, true, tmp.file1)
264
+ t2 = Open.consume_stream(s2, true, tmp.file2)
265
+
266
+ t1.join
267
+ t2.join
268
+ ensure
269
+ s1.close if s1.respond_to?(:close) && ! s1.closed?
270
+ s1.join if s1.respond_to?(:join) && ! s1.joined?
271
+ s2.close if s2.respond_to?(:close) && ! s2.closed?
272
+ s2.join if s2.respond_to?(:join) && ! s2.joined?
273
+ s3.close if s3.respond_to?(:close) && ! s3.closed?
274
+ s3.join if s3.respond_to?(:join) && ! s3.joined?
275
+ end
276
+ ensure
277
+ sout.close if sout.respond_to?(:close) && ! sout.closed?
278
+ sout.join if sout.respond_to?(:join) && ! sout.joined?
279
+ end
280
+ end
281
+ refute Open.exist?(tmp.file1)
282
+ refute Open.exist?(tmp.file2)
283
+ end
284
+ end
285
+ end
286
+ end
287
+
288
+ def test_sort_stream
289
+ text =<<-EOF
290
+ ##
291
+ ##
292
+ ##
293
+ #Row LabelA LabelB LabelC
294
+ row2 AA BB CC
295
+ row3 AAA BBB CCC
296
+ row1 A B C
297
+ EOF
298
+ s = StringIO.new text
299
+ sorted = Open.sort_stream(s)
300
+ assert_equal %w(## ## ## #Row row2 row3 row1), text.split("\n").collect{|l| l.split(" ").first}
301
+ assert_equal %w(## ## ## #Row row1 row2 row3), sorted.read.split("\n").collect{|l| l.split(" ").first}
302
+ end
303
+
304
+ def test_sort_long_stream
305
+ text =<<-EOF
306
+ ##
307
+ ##
308
+ ##
309
+ #Row LabelA LabelB LabelC
310
+ row2 AA BB CC
311
+ row3 AAA BBB CCC
312
+ row1 A B C
313
+ EOF
314
+
315
+ s = StringIO.new text + (text.split("\n")[-3..-1] * "\n" + "\n") * 10000
316
+ sorted = Open.sort_stream(s)
317
+ assert_equal %w(## ## ## #Row row2 row3 row1), text.split("\n").collect{|l| l.split(" ").first}
318
+ assert_equal %w(## ## ## #Row row1 row2 row3), sorted.read.split("\n").collect{|l| l.split(" ").first}
319
+ end
320
+
321
+ def test_sort_stream2
322
+ text =<<-EOF
323
+ ##
324
+ ##
325
+ ##
326
+ #Row LabelA LabelB LabelC
327
+ row2 AA BB CC
328
+ row3 AAA BBB CCC
329
+ row1 A B C
330
+ EOF
331
+ s = StringIO.new text
332
+ sorted = Open.sort_stream(Open.sort_stream(s))
333
+ assert_equal %w(## ## ## #Row row2 row3 row1), text.split("\n").collect{|l| l.split(" ").first}
334
+ assert_equal %w(## ## ## #Row row1 row2 row3), sorted.read.split("\n").collect{|l| l.split(" ").first}
335
+ end
336
+
337
+ def test_collapse_stream
338
+ text=<<-EOF
339
+ row1 A B C
340
+ row1 a b c
341
+ row2 AA BB CC
342
+ row2 aa bb cc
343
+ EOF
344
+
345
+ s = StringIO.new text
346
+ stream = Open.collapse_stream(s, sep: " ")
347
+ txt = stream.read
348
+ assert_include txt, "A|a"
349
+ assert_include txt, "B|b"
350
+ assert_include txt, "C|c"
351
+ end
352
+
353
+
354
+ def test_collapse_sum
355
+ text=<<-EOF
356
+ row1 12
357
+ row1 4
358
+ row2 10
359
+ row2 6
360
+ EOF
361
+
362
+ s = StringIO.new text
363
+ stream = Open.collapse_stream(s, sep: " ") do |parts|
364
+ next nil if parts.empty?
365
+ parts.first.split("|").collect{|p| p.to_f}.inject(0){|acc,e| acc += e}.to_s
366
+ end
367
+ assert_include stream.read, "row1 16"
368
+ end
369
+
370
+
371
+ def test_collapse_stream_gap
372
+ text=<<-EOF
373
+ row2 AA BB
374
+ row2 aa bb cc
375
+ EOF
376
+
377
+ s = StringIO.new text
378
+ assert Open.collapse_stream(s, sep: " ").read =~ /\|cc$/
379
+
380
+ text=<<-EOF
381
+ row2 aa bb cc
382
+ row2 AA BB
383
+ EOF
384
+
385
+ s = StringIO.new text
386
+ assert Open.collapse_stream(s, sep: " ").read =~ /cc\|$/
387
+
388
+ text=<<-EOF
389
+ row2 AA BB
390
+ row2 aa bb cc
391
+ EOF
392
+
393
+ s = StringIO.new text
394
+ assert Open.collapse_stream(s, sep: " ").read =~ /\|cc$/
395
+ end
396
+ #
397
+ #
398
+ # def test_paste_stream
399
+ # text1=<<-EOF
400
+ #row1 A B C
401
+ #row2 AA BB CC
402
+ #row3 AAA BBB CCC
403
+ # EOF
404
+ #
405
+ # text2=<<-EOF
406
+ #row1 a b
407
+ #row2 aa bb
408
+ # EOF
409
+ #
410
+ # text3=<<-EOF
411
+ #row1 c
412
+ #row2 cc
413
+ #row3 ccc
414
+ # EOF
415
+ #
416
+ # s1 = StringIO.new text1
417
+ # s2 = StringIO.new text2
418
+ # s3 = StringIO.new text3
419
+ # tsv = TSV.open Misc.paste_streams([s1,s2,s3], nil, " "), :sep => " ", :type => :list
420
+ # assert_equal ["A", "B", "C", "a", "b", "c"], tsv["row1"]
421
+ # assert_equal ["AA", "BB", "CC", "aa", "bb", "cc"], tsv["row2"]
422
+ # assert_equal ["AAA", "BBB", "CCC", "", "", "ccc"], tsv["row3"]
423
+ # end
424
+ #
425
+ # def test_sort_stream
426
+ # text =<<-EOF
427
+ ###
428
+ ###
429
+ ###
430
+ ##Row LabelA LabelB LabelC
431
+ #row2 AA BB CC
432
+ #row3 AAA BBB CCC
433
+ #row1 A B C
434
+ # EOF
435
+ # s = StringIO.new text
436
+ # sorted = Misc.sort_stream(s)
437
+ # assert_equal %w(## ## ## #Row row2 row3 row1), text.split("\n").collect{|l| l.split(" ").first}
438
+ # assert_equal %w(## ## ## #Row row1 row2 row3), sorted.read.split("\n").collect{|l| l.split(" ").first}
439
+ # end
440
+ #
441
+ # def test_sort_long_stream
442
+ # text =<<-EOF
443
+ ###
444
+ ###
445
+ ###
446
+ ##Row LabelA LabelB LabelC
447
+ #row2 AA BB CC
448
+ #row3 AAA BBB CCC
449
+ #row1 A B C
450
+ # EOF
451
+ #
452
+ # s = StringIO.new text + (text.split("\n")[-3..-1] * "\n" + "\n") * 10000
453
+ # sorted = Misc.sort_stream(s)
454
+ # assert_equal %w(## ## ## #Row row2 row3 row1), text.split("\n").collect{|l| l.split(" ").first}
455
+ # assert_equal %w(## ## ## #Row row1 row2 row3), sorted.read.split("\n").collect{|l| l.split(" ").first}
456
+ # end
457
+ #
458
+ # def test_sort_stream2
459
+ # text =<<-EOF
460
+ ###
461
+ ###
462
+ ###
463
+ ##Row LabelA LabelB LabelC
464
+ #row2 AA BB CC
465
+ #row3 AAA BBB CCC
466
+ #row1 A B C
467
+ # EOF
468
+ # s = StringIO.new text
469
+ # sorted = Misc.sort_stream(Misc.sort_stream(s))
470
+ # assert_equal %w(## ## ## #Row row2 row3 row1), text.split("\n").collect{|l| l.split(" ").first}
471
+ # assert_equal %w(## ## ## #Row row1 row2 row3), sorted.read.split("\n").collect{|l| l.split(" ").first}
472
+ # end
473
+ #
474
+ # def test_dup_stream
475
+ # text =<<-EOF
476
+ ##: :sep=" "
477
+ ##Row LabelA LabelB LabelC
478
+ #row2 AA BB CC
479
+ #row3 AAA BBB CCC
480
+ #row1 A B C
481
+ # EOF
482
+ #
483
+ # text = text * 10000
484
+ # TmpFile.with_file(text) do |tmp|
485
+ # io = Open.open(tmp)
486
+ # dup = Misc.dup_stream(io)
487
+ # new_text = StringIO.new ""
488
+ # Misc.consume_stream dup, true, new_text
489
+ # Misc.consume_stream io, false
490
+ # new_text.rewind
491
+ # assert_equal text, new_text.read
492
+ # end
493
+ #
494
+ #
495
+ # TmpFile.with_file(text) do |tmp|
496
+ # io = Open.open(tmp)
497
+ # dup = Misc.dup_stream(io)
498
+ # Misc.consume_stream dup, true
499
+ # assert_equal text, io.read
500
+ # end
501
+ # end
502
+ #
503
+ # def test_dup_stream_multiple
504
+ # text =<<-EOF
505
+ #row2 AA BB CC
506
+ #row3 AAA BBB CCC
507
+ #row1 A B C
508
+ # EOF
509
+ #
510
+ # text = text * 10000
511
+ # num = 5
512
+ # str_io = StringIO.new
513
+ # strs = []
514
+ # num.times{ strs << StringIO.new }
515
+ # TmpFile.with_file(text) do |tmp|
516
+ # io = Open.open(tmp)
517
+ # copies = Misc.dup_stream_multiple(io, num)
518
+ #
519
+ #
520
+ # copies.each_with_index do |cio,i|
521
+ # cio.add_callback do
522
+ # str = strs[i]
523
+ # str.rewind
524
+ # assert_equal text, str.read
525
+ # end
526
+ # Misc.consume_stream cio, true, strs[i], false
527
+ # end
528
+ #
529
+ #
530
+ # Misc.consume_stream io, false, str_io, false
531
+ # str_io.rewind
532
+ # assert_equal text, str_io.read
533
+ #
534
+ # end
535
+ # end
536
+ #
537
+ # def test_remove_lines
538
+ # text1 =<<-EOF
539
+ #line1
540
+ #line2
541
+ #line3
542
+ #line4
543
+ # EOF
544
+ # text2 =<<-EOF
545
+ #line3
546
+ #line1
547
+ # EOF
548
+ #
549
+ # TmpFile.with_file(text1) do |file1|
550
+ # TmpFile.with_file(text2) do |file2|
551
+ # assert ! Misc.remove_lines(file1, file2, true).read.split("\n").include?("line1")
552
+ # assert Misc.remove_lines(file1, file2, true).read.split("\n").include?("line2")
553
+ # end
554
+ # end
555
+ # end
556
+ #
557
+ #
558
+ #
559
+ # def test_select_lines
560
+ # text1 =<<-EOF
561
+ #line1
562
+ #line2
563
+ #line3
564
+ #line4
565
+ # EOF
566
+ # text2 =<<-EOF
567
+ #line3
568
+ #line1
569
+ #line5
570
+ # EOF
571
+ #
572
+ # TmpFile.with_file(text1) do |file1|
573
+ # TmpFile.with_file(text2) do |file2|
574
+ # assert Misc.select_lines(file1, file2, true).read.split("\n").include?("line1")
575
+ # assert ! Misc.select_lines(file1, file2, true).read.split("\n").include?("line2")
576
+ # end
577
+ # end
578
+ # end
579
+ #
580
+ # def test_consume_into_string_io
581
+ # text =<<-EOF
582
+ #line1
583
+ #line2
584
+ #line3
585
+ #line4
586
+ # EOF
587
+ #
588
+ # TmpFile.with_file(text) do |file|
589
+ # out = StringIO.new
590
+ # io = Open.open(file)
591
+ # Misc.consume_stream(io, false, out, false)
592
+ # out.rewind
593
+ # assert_equal text, out.read
594
+ # end
595
+ # end
596
+ #
597
+ # def test_monitor
598
+ # text =<<-EOF
599
+ #line1
600
+ #line2
601
+ #line3
602
+ #line4
603
+ # EOF
604
+ #
605
+ # TmpFile.with_file(text) do |file|
606
+ # io = Open.open(file)
607
+ # lines = Set.new
608
+ # io2 = Misc.line_monitor_stream io do |line|
609
+ # lines << line
610
+ # end
611
+ # Misc.consume_stream(io2, false)
612
+ # assert_equal text, lines.to_a * ""
613
+ # end
614
+ # end
615
+ #
616
+ # def test_sort
617
+ # assert_raise RbbtException do
618
+ # io = Misc.open_pipe do |sin|
619
+ # sin.puts "#START"
620
+ # 20.times do
621
+ # sin.puts rand(1000).to_s
622
+ # sleep 0.1
623
+ # end
624
+ # raise RbbtException
625
+ # end
626
+ #
627
+ # sio = Misc.sort_stream(io)
628
+ # begin
629
+ # Misc.consume_stream(sio, false, STDOUT)
630
+ # rescue
631
+ # raise $!
632
+ # end
633
+ # end
634
+ # end
635
+ #
636
+ # def test_gz_pipe
637
+ # text =<<-EOF
638
+ #line1
639
+ #line2
640
+ #line3
641
+ #line4
642
+ # EOF
643
+ #
644
+ # TmpFile.with_file nil, :extension => 'txt.gz' do |file|
645
+ # sout = Misc.open_gz_pipe do |sin|
646
+ # text.split("\n").each do |line|
647
+ # sin.puts line
648
+ # end
649
+ # end
650
+ #
651
+ # Open.mkdir File.basename(file)
652
+ # thr1 = Misc.consume_stream(sout, true, file)
653
+ # thr1.join
654
+ # assert Open.gzip?(file)
655
+ # assert_equal text, Open.read(file)
656
+ # end
657
+ # end
658
+ #
659
+ # def test_open_pipe_error
660
+ # sout = Misc.open_pipe do |sin|
661
+ # 10.times do |i|
662
+ # sin.puts "line #{i}"
663
+ # end
664
+ # raise
665
+ # end
666
+ #
667
+ # TmpFile.with_file do |tmp|
668
+ # #Misc.consume_stream(sout, false, tmp)
669
+ # assert_raise do
670
+ # Open.write(tmp, sout)
671
+ # end
672
+ # end
673
+ # end
674
+ #end
675
+ end
676
+