rio 0.3.7 → 0.3.8

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.
Files changed (208) hide show
  1. data/ChangeLog +1273 -1482
  2. data/README +2 -2
  3. data/Rakefile +5 -5
  4. data/VERSION +1 -1
  5. data/{RUNME.1st.rb → build_doc.rb} +4 -10
  6. data/doc/ANNOUNCE +33 -80
  7. data/doc/RELEASE_NOTES +31 -1
  8. data/doc/generators/template/html/rio.rb +3 -3
  9. data/lib/rio/abstract_method.rb +2 -2
  10. data/lib/rio/argv.rb +2 -2
  11. data/lib/rio/arycopy.rb +2 -2
  12. data/lib/rio/assert.rb +2 -2
  13. data/lib/rio/base.rb +2 -2
  14. data/lib/rio/callstr.rb +47 -0
  15. data/lib/rio/const.rb +52 -0
  16. data/lib/rio/construct.rb +6 -24
  17. data/lib/rio/constructor.rb +12 -2
  18. data/lib/rio/context/autoclose.rb +73 -0
  19. data/lib/rio/context/copying.rb +2 -2
  20. data/lib/rio/context/cxx.rb +2 -2
  21. data/lib/rio/context/dir.rb +2 -2
  22. data/lib/rio/context/gzip.rb +2 -2
  23. data/lib/rio/context/methods.rb +6 -34
  24. data/lib/rio/context/skip.rb +2 -2
  25. data/lib/rio/context/stream.rb +2 -2
  26. data/lib/rio/context.rb +17 -2
  27. data/lib/rio/cp.rb +35 -9
  28. data/lib/rio/def.rb +54 -0
  29. data/lib/rio/dir.rb +19 -20
  30. data/lib/rio/doc/HOWTO.rb +23 -7
  31. data/lib/rio/doc/INTRO.rb +57 -23
  32. data/lib/rio/doc/MISC.rb +2 -2
  33. data/lib/rio/doc/OPTIONAL.rb +134 -0
  34. data/lib/rio/doc/SYNOPSIS.rb +11 -4
  35. data/lib/rio/doc.rb +2 -2
  36. data/lib/rio/entrysel.rb +25 -6
  37. data/lib/rio/exception/copy.rb +2 -2
  38. data/lib/rio/exception/notsupported.rb +47 -0
  39. data/lib/rio/exception/open.rb +2 -2
  40. data/lib/rio/exception/state.rb +2 -2
  41. data/lib/rio/exception.rb +2 -2
  42. data/lib/rio/ext/csv.rb +56 -11
  43. data/lib/rio/ext/yaml.rb +2 -2
  44. data/lib/rio/ext/zipfile.rb +91 -0
  45. data/lib/rio/ext.rb +38 -3
  46. data/lib/rio/factory.rb +17 -34
  47. data/lib/rio/file.rb +48 -8
  48. data/lib/rio/filter/closeoneof.rb +36 -16
  49. data/lib/rio/filter/gzip.rb +2 -2
  50. data/lib/rio/filter.rb +2 -2
  51. data/lib/rio/fs/base.rb +42 -0
  52. data/lib/rio/fs/impl.rb +123 -0
  53. data/lib/rio/fs/native.rb +76 -0
  54. data/lib/rio/{record.rb → fs/stream.rb} +21 -18
  55. data/lib/rio/fs/url.rb +64 -0
  56. data/lib/rio/ftp/{ioh.rb → conncache.rb} +38 -39
  57. data/lib/rio/ftp/dir.rb +95 -0
  58. data/lib/rio/ftp/fs.rb +173 -0
  59. data/lib/rio/ftp/ftpfile.rb +20 -0
  60. data/lib/rio/grande.rb +2 -2
  61. data/lib/rio/handle.rb +2 -2
  62. data/lib/rio/if/basic.rb +2 -2
  63. data/lib/rio/if/csv.rb +2 -2
  64. data/lib/rio/if/dir.rb +2 -2
  65. data/lib/rio/if/file.rb +26 -2
  66. data/lib/rio/if/fileordir.rb +44 -49
  67. data/lib/rio/if/grande.rb +32 -10
  68. data/lib/rio/if/grande_entry.rb +12 -2
  69. data/lib/rio/if/grande_stream.rb +17 -28
  70. data/lib/rio/if/internal.rb +2 -2
  71. data/lib/rio/if/path.rb +7 -6
  72. data/lib/rio/if/stream.rb +85 -29
  73. data/lib/rio/if/string.rb +2 -2
  74. data/lib/rio/if/temp.rb +2 -2
  75. data/lib/rio/if/test.rb +37 -4
  76. data/lib/rio/if/yaml.rb +2 -2
  77. data/lib/rio/if.rb +2 -2
  78. data/lib/rio/impl/path.rb +2 -2
  79. data/lib/rio/ioh.rb +17 -6
  80. data/lib/rio/iomode.rb +4 -3
  81. data/lib/rio/ios/fail.rb +107 -0
  82. data/lib/rio/ios/generic.rb +120 -0
  83. data/lib/rio/ios/mode.rb +61 -0
  84. data/lib/rio/ios/null.rb +120 -0
  85. data/lib/rio/iowrap.rb +129 -0
  86. data/lib/rio/kernel.rb +12 -3
  87. data/lib/rio/local.rb +2 -2
  88. data/lib/rio/match.rb +3 -3
  89. data/lib/rio/matchrecord.rb +2 -2
  90. data/lib/rio/no_warn.rb +50 -0
  91. data/lib/rio/{arrayio.rb → nullio.rb} +47 -86
  92. data/lib/rio/open3.rb +2 -2
  93. data/lib/rio/ops/construct.rb +20 -13
  94. data/lib/rio/ops/create.rb +10 -19
  95. data/lib/rio/ops/dir.rb +60 -54
  96. data/lib/rio/ops/either.rb +11 -9
  97. data/lib/rio/ops/file.rb +28 -24
  98. data/lib/rio/ops/path.rb +45 -43
  99. data/lib/rio/ops/stream/input.rb +12 -8
  100. data/lib/rio/ops/stream/output.rb +2 -2
  101. data/lib/rio/ops/stream/read.rb +35 -32
  102. data/lib/rio/ops/stream/write.rb +5 -5
  103. data/lib/rio/ops/stream.rb +7 -3
  104. data/lib/rio/ops/symlink.rb +12 -10
  105. data/lib/rio/path/reset.rb +5 -5
  106. data/lib/rio/path.rb +32 -24
  107. data/lib/rio/piper/cp.rb +2 -2
  108. data/lib/rio/piper.rb +2 -2
  109. data/lib/rio/prompt.rb +2 -2
  110. data/lib/rio/rectype.rb +9 -7
  111. data/lib/rio/rl/base.rb +5 -4
  112. data/lib/rio/rl/builder.rb +17 -5
  113. data/lib/rio/rl/ioi.rb +14 -4
  114. data/lib/rio/rl/path.rb +23 -15
  115. data/lib/rio/rl/pathmethods.rb +12 -2
  116. data/lib/rio/rl/uri.rb +13 -6
  117. data/lib/rio/scheme/aryio.rb +3 -3
  118. data/lib/rio/scheme/cmdio.rb +4 -3
  119. data/lib/rio/scheme/cmdpipe.rb +3 -35
  120. data/lib/rio/scheme/fd.rb +4 -3
  121. data/lib/rio/scheme/ftp.rb +36 -7
  122. data/lib/rio/scheme/http.rb +2 -2
  123. data/lib/rio/{context/closeoneof.rb → scheme/null.rb} +17 -11
  124. data/lib/rio/scheme/path.rb +28 -30
  125. data/lib/rio/scheme/stderr.rb +4 -4
  126. data/lib/rio/scheme/stdio.rb +6 -5
  127. data/lib/rio/scheme/strio.rb +10 -20
  128. data/lib/rio/scheme/sysio.rb +5 -2
  129. data/lib/rio/scheme/tcp.rb +4 -3
  130. data/lib/rio/scheme/temp.rb +14 -1
  131. data/lib/rio/state/error.rb +2 -2
  132. data/lib/rio/state.rb +80 -34
  133. data/lib/rio/stream/base.rb +7 -2
  134. data/lib/rio/stream/duplex.rb +13 -10
  135. data/lib/rio/stream/open.rb +74 -79
  136. data/lib/rio/stream.rb +15 -23
  137. data/lib/rio/symantics.rb +2 -2
  138. data/lib/rio/tempdir.rb +132 -132
  139. data/lib/rio/to_rio/all.rb +40 -0
  140. data/lib/rio/to_rio/array.rb +40 -0
  141. data/lib/rio/to_rio/io.rb +41 -0
  142. data/lib/rio/to_rio/object.rb +43 -0
  143. data/lib/rio/to_rio/string.rb +41 -0
  144. data/lib/rio/to_rio.rb +13 -2
  145. data/lib/rio/uri/file.rb +2 -2
  146. data/lib/rio/util.rb +2 -2
  147. data/lib/rio/version.rb +3 -3
  148. data/lib/rio.rb +16 -25
  149. data/test/bin/count_lines.rb +11 -0
  150. data/test/bin/find_lines.rb +13 -0
  151. data/test/bin/list_dir.rb +14 -0
  152. data/test/ftp/all.rb +9 -0
  153. data/test/ftp/anon_misc.rb +112 -0
  154. data/test/ftp/anon_read.rb +105 -0
  155. data/test/ftp/anon_special.rb +68 -0
  156. data/test/ftp/anon_write.rb +63 -0
  157. data/test/ftp/ftp2ftp.rb +51 -0
  158. data/test/ftp/initftpfiles.rb +14 -0
  159. data/test/ftp/testdef.rb +51 -0
  160. data/test/gem_runtests.rb +15 -15
  161. data/test/runalltests.rb +15 -0
  162. data/test/runftptests.rb +14 -0
  163. data/test/{1.rb → runhttptests.rb} +14 -14
  164. data/test/runtests.rb +14 -14
  165. data/test/tc/all.rb +36 -21
  166. data/test/tc/cmdpipe.rb +18 -15
  167. data/test/tc/copy-from-http.rb +89 -0
  168. data/test/tc/copy-from.rb +1 -52
  169. data/test/tc/copy.rb +19 -17
  170. data/test/tc/csv2.rb +6 -3
  171. data/test/tc/empty.rb +47 -0
  172. data/test/tc/emptyriodir.rb +129 -0
  173. data/test/tc/entsel.rb +110 -0
  174. data/test/tc/files_select.rb +92 -0
  175. data/test/tc/get.rb +7 -6
  176. data/test/tc/getrec.rb +2 -5
  177. data/test/tc/gzip.rb +82 -0
  178. data/test/tc/io_each_byte.rb +60 -0
  179. data/test/tc/io_read.rb +80 -0
  180. data/test/tc/iometh.rb +149 -0
  181. data/test/tc/likeio.rb +112 -0
  182. data/test/tc/methods.rb +10 -9
  183. data/test/tc/misc.rb +1 -37
  184. data/test/tc/null.rb +45 -0
  185. data/test/tc/pid.rb +31 -0
  186. data/test/tc/piper.rb +34 -37
  187. data/test/tc/programs_util.rb +24 -0
  188. data/test/tc/readline.rb +30 -0
  189. data/test/tc/rename.rb +12 -0
  190. data/test/tc/tempfile.rb +14 -0
  191. data/test/tc/testcase.rb +6 -0
  192. data/test/tc/tonl.rb +37 -0
  193. metadata +181 -144
  194. data/ex/colx.rb +0 -8
  195. data/ex/findinruby +0 -16
  196. data/ex/findruby +0 -15
  197. data/ex/passwd_report.rb +0 -8
  198. data/ex/prompt.rb +0 -25
  199. data/ex/rgb.txt.gz +0 -0
  200. data/ex/riocat +0 -35
  201. data/ex/riogunzip +0 -31
  202. data/ex/riogzip +0 -24
  203. data/ex/rioprompt.rb +0 -6
  204. data/ex/targz2zip +0 -17
  205. data/ex/tolf +0 -11
  206. data/lib/rio/ftp/conn.rb +0 -167
  207. data/lib/rio/ftp.rb +0 -275
  208. data/test/once.rb +0 -7
data/test/tc/entsel.rb ADDED
@@ -0,0 +1,110 @@
1
+ #!/usr/local/bin/ruby
2
+ if $0 == __FILE__
3
+ Dir.chdir File.dirname(__FILE__)+'/../'
4
+ $:.unshift File.expand_path('../lib/')
5
+ end
6
+
7
+ require 'rio'
8
+ require 'tc/testcase'
9
+
10
+ class TC_entsel < Test::RIO::TestCase
11
+ @@once = false
12
+ @@dirs = nil
13
+ DN = 'd'
14
+ OD = 'o'
15
+ def self.once
16
+ @@once = true
17
+ rio(DN).rmtree.mkpath.chdir {
18
+ mknd(3,3)
19
+ }
20
+ end
21
+ def setup
22
+ super
23
+ self.class.once unless @@once
24
+ @exp = rio(DN).all[]
25
+ @lev = []
26
+ @lev[1] = @exp.select{ |el| el.length == 3 }
27
+ @lev[2] = @exp.select{ |el| el.length == 5 }
28
+ @lev[3] = @exp.select{ |el| el.length == 7 }
29
+ @olev = []
30
+ @olev[1] = @lev[1].map{ |el| el.sub(/^d/,'o') }
31
+ @olev[2] = @lev[2].map{ |el| el.sub(/^d/,'o') }
32
+ @olev[3] = @lev[3].map{ |el| el.sub(/^d/,'o') }
33
+ end
34
+ include RIO_TestCase
35
+
36
+ def self.mknd(n,level)
37
+ return unless level > 0
38
+ dirs = (0...n).map{|i| rio(i.to_s).mkdir}
39
+ dirs.each{ |d|
40
+ d.chdir {
41
+ mknd(n,level-1)
42
+ }
43
+ }
44
+ end
45
+
46
+ def test_skipdirs_copy1
47
+ odir = rio(OD).delete!
48
+ rio(DN).skipdirs(1) > odir
49
+ assert_array_equal([],odir.all[])
50
+ end
51
+ def test_skipdirs_copy2
52
+ odir = rio(OD).delete!
53
+ rio(DN).skipdirs(2) > odir
54
+ assert_array_equal(@olev[1],odir.all[])
55
+ end
56
+ def test_skipdirs_copy3
57
+ odir = rio(OD).delete!
58
+ rio(DN).skipdirs(3) > odir
59
+ assert_array_equal(@olev[1]+@olev[2],odir.all[])
60
+ end
61
+ def test_dirs_copy1
62
+ odir = rio(OD).delete!
63
+ rio(DN).dirs(1) > odir
64
+ assert_array_equal(@olev[1],odir.all[])
65
+ end
66
+ def test_dirs_copy2
67
+ odir = rio(OD).delete!
68
+ rio(DN).dirs(0..2) > odir
69
+ assert_array_equal(@olev[1]+@olev[2],odir.all[])
70
+ end
71
+ def test_dirs_copy3
72
+ odir = rio(OD).delete!
73
+ rio(DN).dirs(2) > odir
74
+ assert_array_equal([],odir.all[])
75
+ end
76
+ def test_dirs_array
77
+ rios1 = rios2str(rio(DN).dirs(1).to_a)
78
+ assert_equal(@lev[1],rios1)
79
+ rios2 = rios2str(rio(DN).dirs(2).to_a)
80
+ assert_equal([],rios2)
81
+ rios3 = rios2str(rio(DN).dirs(3).to_a)
82
+ assert_equal([],rios3)
83
+ end
84
+ def test_skipdirs_array
85
+ rios1 = rios2str(rio(DN).skipdirs(1).to_a)
86
+ assert_array_equal([],rios1)
87
+ rios2 = rios2str(rio(DN).skipdirs(2).to_a)
88
+ assert_array_equal(@lev[1],rios2)
89
+ rios3 = rios2str(rio(DN).skipdirs(3).to_a)
90
+ assert_array_equal(@lev[1],rios3)
91
+ end
92
+ def test_all_skipdirs_array
93
+ rios1 = rios2str(rio(DN).all.skipdirs(1).to_a)
94
+ assert_array_equal(@lev[2]+@lev[3],rios1)
95
+ rios2 = rios2str(rio(DN).all.skipdirs(2).to_a)
96
+ assert_array_equal(@lev[1]+@lev[3],rios2)
97
+ rios3 = rios2str(rio(DN).all.skipdirs(3).to_a)
98
+ assert_array_equal(@lev[1]+@lev[2],rios3)
99
+ end
100
+ def test_all_dirs_array
101
+ rios1 = rios2str(rio(DN).all.dirs(1).to_a)
102
+ assert_equal(@lev[1],rios1)
103
+ rios2 = rios2str(rio(DN).all.dirs(2).to_a)
104
+ assert_equal(@lev[2],rios2)
105
+ rios3 = rios2str(rio(DN).all.dirs(3).to_a)
106
+ assert_equal(@lev[3],rios3)
107
+ end
108
+ def test_sel
109
+ end
110
+ end
@@ -0,0 +1,92 @@
1
+ #!/usr/local/bin/ruby
2
+ if $0 == __FILE__
3
+ Dir.chdir File.dirname(__FILE__)+'/../'
4
+ $:.unshift File.expand_path('../lib/')
5
+ end
6
+
7
+ require 'rio'
8
+ require 'tc/testcase'
9
+
10
+ class TC_files_select < Test::RIO::TestCase
11
+ @@once = false
12
+ def self.once
13
+ @@once = true
14
+ rio('d0').delete!.mkdir
15
+ rio('f0').delete!.puts!("f0:L0")
16
+ rio('f1').delete!.puts!("f1:L0")
17
+ rio('d0/f2').puts!("d0/f2:L0")
18
+ rio('d0/f3').puts!("d0/f3:L0")
19
+ end
20
+ def setup
21
+ super
22
+ self.class.once unless @@once
23
+ end
24
+
25
+ def test_files_method_with_dir_rio_each
26
+ #$trace_states = true
27
+ ans = []
28
+ rio('d0').files.each { |f|
29
+ ans << f
30
+ }
31
+ assert_equal(['d0/f2','d0/f3'],smap(ans))
32
+ end
33
+ def test_files_method_with_dir_rio_each_skip
34
+ #$trace_states = true
35
+ ans = []
36
+ rio('d0').skip('f*').files.each { |f|
37
+ ans << f
38
+ }
39
+ assert(ans.empty?)
40
+ end
41
+ def test_files_method_with_file_rio_each_skip
42
+ #$trace_states = true
43
+ ans = []
44
+ rio('f0').skip('f*').files.each { |f|
45
+ ans << f
46
+ }
47
+ assert(ans.empty?)
48
+ end
49
+ def test_files_method_with_file_rio_each
50
+ #$trace_states = true
51
+ ans = []
52
+ rio('f0').files.each { |f|
53
+ ans << f
54
+ }
55
+ assert_equal(['f0'],smap(ans))
56
+ end
57
+ def test_files_and_lines_with_file_rio_each
58
+ #$trace_states = true
59
+ ans = []
60
+ rio('f0').files.lines.each { |f|
61
+ ans << f
62
+ }
63
+ assert_equal(["f0:L0\n"],smap(ans))
64
+ end
65
+ def test_files_method_with_file_rio_to_a
66
+ #$trace_states = true
67
+ ans = rio('f0').files.to_a
68
+ assert_equal(['f0'],smap(ans))
69
+ end
70
+ def test_files_method_with_file_rio_ss
71
+ #$trace_states = true
72
+ ans = rio('f0').files[]
73
+ assert_equal(['f0'],smap(ans))
74
+ end
75
+ def test_files_method_with_file_rio_ss_skip
76
+ #$trace_states = true
77
+ ans = rio('f0').skip('f*').files[]
78
+ assert_equal([],smap(ans))
79
+ end
80
+ def test_files_method_with_file_rio_ss_args_select
81
+ #$trace_states = true
82
+ ans = rio('f0').files['f*']
83
+ assert_equal(['f0'],smap(ans))
84
+ end
85
+ def test_files_method_with_file_rio_ss_args_dontselect
86
+ #$trace_states = true
87
+ ans = rio('f0').files['g*']
88
+ assert_equal([],smap(ans))
89
+ end
90
+
91
+ end
92
+
data/test/tc/get.rb CHANGED
@@ -86,7 +86,7 @@ class TC_get < Test::RIO::TestCase
86
86
  assert_equal(expa+expa,ans)
87
87
  end
88
88
 
89
- # assure get returns nil once after iteration using #get (with auto close)
89
+ # assure get does not return nil once after iteration using #each (with auto close)
90
90
  begin
91
91
  f = rio('f.txt')
92
92
  ans = []
@@ -96,8 +96,8 @@ class TC_get < Test::RIO::TestCase
96
96
  end
97
97
  assert_equal(expa,ans)
98
98
 
99
- rec = f.get
100
- assert_nil(rec)
99
+ #rec = f.get
100
+ #assert_nil(rec)
101
101
 
102
102
  rec = f.get
103
103
  assert_equal(expa[0],rec)
@@ -114,7 +114,7 @@ class TC_get < Test::RIO::TestCase
114
114
  ans << rec
115
115
  end
116
116
  rec = f.get
117
- assert_nil(rec)
117
+ assert_equal(expa[0],rec)
118
118
  end
119
119
 
120
120
  begin
@@ -137,15 +137,16 @@ class TC_get < Test::RIO::TestCase
137
137
  begin
138
138
  f = rio('f.txt')
139
139
  ans = []
140
-
140
+ # read all the lines
141
141
  (0...n_lines).each do |n|
142
142
  rec = f.get
143
143
  assert_equal(expa[n],rec)
144
144
  end
145
+ assert(f.eof?)
145
146
  f.each do |rec|
146
147
  ans << rec
147
148
  end
148
- assert_equal(expa,ans)
149
+ assert_equal([],ans)
149
150
  end
150
151
  end
151
152
  end
data/test/tc/getrec.rb CHANGED
@@ -85,9 +85,6 @@ class TC_RIO_getrec < Test::Unit::TestCase
85
85
  end
86
86
  assert_equal(expa,ans)
87
87
 
88
- rec = f.getrec
89
- assert_nil(rec)
90
-
91
88
  rec = f.getrec
92
89
  assert_equal(expa[0],rec)
93
90
  end
@@ -103,7 +100,7 @@ class TC_RIO_getrec < Test::Unit::TestCase
103
100
  ans << rec
104
101
  end
105
102
  rec = f.getrec
106
- assert_nil(rec)
103
+ assert_equal(expa[0],rec)
107
104
  end
108
105
 
109
106
  begin
@@ -134,7 +131,7 @@ class TC_RIO_getrec < Test::Unit::TestCase
134
131
  f.each do |rec|
135
132
  ans << rec
136
133
  end
137
- assert_equal(expa,ans)
134
+ assert_equal([],ans)
138
135
  end
139
136
  end
140
137
  end
data/test/tc/gzip.rb ADDED
@@ -0,0 +1,82 @@
1
+ #!/usr/local/bin/ruby
2
+ if $0 == __FILE__
3
+ Dir.chdir File.dirname(__FILE__)+'/../'
4
+ $:.unshift File.expand_path('../lib/')
5
+ end
6
+
7
+ require 'rio'
8
+ require 'tc/testcase'
9
+
10
+ class TC_gzip < Test::RIO::TestCase
11
+ @@once = false
12
+ def self.once
13
+ @@once = true
14
+ end
15
+ def setup()
16
+ super
17
+ end
18
+
19
+ def test_string
20
+ plain_string = "Hello World\n"
21
+
22
+ gzip_string = ""
23
+ ans_string = ""
24
+ rio(?",plain_string) > rio(?",gzip_string).gzip
25
+ rio(?",gzip_string).gzip > rio(?",ans_string)
26
+ assert_equal(plain_string,ans_string)
27
+
28
+ gzip_string = ""
29
+ ans_string = ""
30
+ rio(?",gzip_string).gzip < rio(?",plain_string)
31
+ rio(?",ans_string) < rio(?",gzip_string).gzip
32
+ assert_equal(plain_string,ans_string)
33
+
34
+ end
35
+
36
+ def test_string2
37
+ str = "Hello World\n"
38
+ src = rio(?").print!(str)
39
+ ans = rio(?")
40
+
41
+ ans.string = ""
42
+ rio(?").gzip < src > ans
43
+ assert_equal(str,ans.string)
44
+
45
+ ans.string = ""
46
+ src | rio(?").gzip | ans
47
+ assert_equal(str,ans.string)
48
+
49
+ end
50
+
51
+ def test_file
52
+ str = "Hello World\n"
53
+ rio('src').print!(str)
54
+
55
+ rio('src.gz').delete!
56
+ rio('ans').delete!
57
+ rio('src') > rio('src.gz').gzip
58
+ rio('src.gz').gzip > rio('ans')
59
+ assert_equal(str,rio('ans').contents)
60
+
61
+ rio('src.gz').delete!
62
+ rio('ans').delete!
63
+ rio('src.gz').gzip < rio('src')
64
+ rio('ans') < rio('src.gz').gzip
65
+ assert_equal(str,rio('ans').contents)
66
+
67
+ end
68
+
69
+ def test_tempfile
70
+ str = "Hello World\n"
71
+ src = rio(?").print!(str)
72
+ ans = rio(?")
73
+
74
+ tmp = rio(??).gzip
75
+ tmp < src
76
+ assert_equal(str,tmp.rewind.contents)
77
+ tmp.rewind > ans
78
+ assert_equal(str,ans.contents)
79
+ end
80
+
81
+
82
+ end
@@ -0,0 +1,60 @@
1
+ #!/usr/local/bin/ruby
2
+ if $0 == __FILE__
3
+ Dir.chdir File.dirname(__FILE__)+'/../'
4
+ $:.unshift File.expand_path('../lib/')
5
+ end
6
+
7
+ require 'rio'
8
+ require 'tc/testcase'
9
+
10
+ class TC_io_each_byte < Test::RIO::TestCase
11
+ @@once = false
12
+ DATA = "012"
13
+ FN_RUBY = 'fruby.txt'
14
+ FN_RIO = 'frio.txt'
15
+ def self.once
16
+ @@once = true
17
+ rio(FN_RUBY) < DATA
18
+ rio(FN_RIO) < DATA
19
+ end
20
+ def setup
21
+ super
22
+ self.class.once unless @@once
23
+ end
24
+ def open_io(&block)
25
+ begin
26
+ fruby = ::File.open(FN_RUBY)
27
+ frio = rio(FN_RIO)
28
+ yield(fruby,frio)
29
+ ensure
30
+ fruby.close
31
+ frio.close
32
+ end
33
+ end
34
+
35
+ def check_method(fruby,frio,n,sym,*args)
36
+ n.times {
37
+ assert_equal(fruby.__send__(sym,*args),frio.__send__(sym,*args))
38
+ assert_equal(fruby.eof?,frio.eof?)
39
+ }
40
+ end
41
+ def check_calls(fruby,frio,n,*args)
42
+ check_method(fruby,frio,n,:read,*args)
43
+ end
44
+ def check_iter(fruby,frio,sym,*args)
45
+ ans_ruby = []
46
+ ans_rio = []
47
+ fruby.__send__(sym,*args) { |el|
48
+ ans_ruby << el
49
+ }
50
+ frio.__send__(sym,*args) { |el|
51
+ ans_rio << el
52
+ }
53
+ assert_equal(ans_ruby,ans_rio)
54
+ end
55
+ def test_basic
56
+ open_io { |fruby,frio|
57
+ check_iter(fruby,frio,:each_byte)
58
+ }
59
+ end
60
+ end
@@ -0,0 +1,80 @@
1
+ #!/usr/local/bin/ruby
2
+ if $0 == __FILE__
3
+ Dir.chdir File.dirname(__FILE__)+'/../'
4
+ $:.unshift File.expand_path('../lib/')
5
+ end
6
+
7
+ require 'rio'
8
+ require 'tc/testcase'
9
+
10
+ class TC_io_read < Test::RIO::TestCase
11
+ @@once = false
12
+ DATA = "012345"
13
+ FN_RUBY = 'fruby.txt'
14
+ FN_RIO = 'frio.txt'
15
+ def self.once
16
+ @@once = true
17
+ rio(FN_RUBY) < DATA
18
+ rio(FN_RIO) < DATA
19
+ end
20
+ def setup
21
+ super
22
+ self.class.once unless @@once
23
+ end
24
+ def open_io(&block)
25
+ begin
26
+ fruby = ::File.open(FN_RUBY)
27
+ frio = rio(FN_RIO)
28
+ yield(fruby,frio)
29
+ ensure
30
+ fruby.close
31
+ frio.close
32
+ end
33
+ end
34
+
35
+ def check_method(fruby,frio,n,sym,*args)
36
+ n.times {
37
+ assert_equal(fruby.__send__(sym,*args),frio.__send__(sym,*args))
38
+ assert_equal(fruby.eof?,frio.eof?)
39
+ }
40
+ end
41
+ def check_calls(fruby,frio,n,*args)
42
+ check_method(fruby,frio,n,:read,*args)
43
+ end
44
+ def test_positive_integer
45
+ open_io { |fruby,frio|
46
+ check_calls(fruby,frio,3,3)
47
+ }
48
+ open_io { |fruby,frio|
49
+ check_calls(fruby,frio,2,4)
50
+ }
51
+ open_io { |fruby,frio|
52
+ check_calls(fruby,frio,2,7)
53
+ }
54
+ end
55
+ def test_positive_integer_buffer
56
+ open_io { |fruby,frio|
57
+ buffer = ""
58
+ check_calls(fruby,frio,1,3,buffer)
59
+ assert_equal(DATA[0...3],buffer)
60
+ check_calls(fruby,frio,1,3,buffer)
61
+ assert_equal(DATA[3...6],buffer)
62
+ }
63
+ open_io { |fruby,frio|
64
+ check_calls(fruby,frio,2,4)
65
+ }
66
+ open_io { |fruby,frio|
67
+ check_calls(fruby,frio,2,7)
68
+ }
69
+ end
70
+ def test_nil
71
+ open_io { |fruby,frio|
72
+ check_calls(fruby,frio,2,nil)
73
+ }
74
+ end
75
+ def test_noarg
76
+ open_io { |fruby,frio|
77
+ check_calls(fruby,frio,2)
78
+ }
79
+ end
80
+ end
data/test/tc/iometh.rb ADDED
@@ -0,0 +1,149 @@
1
+ #!/usr/local/bin/ruby
2
+ if $0 == __FILE__
3
+ Dir.chdir File.dirname(__FILE__)+'/../'
4
+ $:.unshift File.expand_path('../lib/')
5
+ end
6
+
7
+ require 'rio'
8
+ require 'tc/testcase'
9
+
10
+ class TC_iometh < Test::RIO::TestCase
11
+ @@once = false
12
+ def self.once
13
+ @@once = true
14
+ end
15
+ def setup
16
+ super
17
+ self.class.once unless @@once
18
+ end
19
+ def test_file
20
+ (0..4).each do |n_lines|
21
+ get_each(n_lines)
22
+ end
23
+ end
24
+ def get_each(n_lines)
25
+ f = rio('f.txt')
26
+ expa = (0..n_lines-1).map { |a| "Line#{a}\n" }
27
+ f < expa
28
+
29
+ f = rio('f.txt')
30
+ assert_equal(expa,f[])
31
+ # $trace_states = true
32
+
33
+ # iterate twice using #get (no auto close)
34
+ begin
35
+ f = rio('f.txt').nocloseoneof
36
+ ans = []
37
+ while rec = f.get
38
+ ans << rec
39
+ end
40
+ assert_equal(expa,ans)
41
+ while rec = f.get
42
+ ans << rec
43
+ end
44
+ assert_equal(expa,ans)
45
+ end
46
+
47
+ # iterate using #get then using #each (no auto close)
48
+ begin
49
+ f = rio('f.txt').nocloseoneof
50
+ ans = []
51
+ while rec = f.get
52
+ ans << rec
53
+ end
54
+ assert_equal(expa,ans)
55
+ f.each do |rec|
56
+ ans << rec
57
+ end
58
+ assert_equal(expa,ans)
59
+ end
60
+
61
+ # iterate using #each then using #get (no auto close)
62
+ begin
63
+ f = rio('f.txt').nocloseoneof
64
+ ans = []
65
+ f.each do |rec|
66
+ ans << rec
67
+ end
68
+ assert_equal(expa,ans)
69
+ while rec = f.get
70
+ ans << rec
71
+ end
72
+ assert_equal(expa,ans)
73
+ end
74
+
75
+ # iterate twice using #get (with auto close)
76
+ begin
77
+ f = rio('f.txt')
78
+ ans = []
79
+ while rec = f.get
80
+ ans << rec
81
+ end
82
+ assert_equal(expa,ans)
83
+ while rec = f.get
84
+ ans << rec
85
+ end
86
+ assert_equal(expa+expa,ans)
87
+ end
88
+
89
+ # assure get returns nil once after iteration using #get (with auto close)
90
+ begin
91
+ f = rio('f.txt')
92
+ ans = []
93
+
94
+ f.each do |rec|
95
+ ans << rec
96
+ end
97
+ assert_equal(expa,ans)
98
+
99
+ rec = f.get
100
+ assert_equal(expa[0],rec)
101
+ end
102
+
103
+ begin
104
+ f = rio('f.txt')
105
+ ans = []
106
+
107
+ rec = f.get
108
+ assert_equal(expa[0],rec)
109
+ ans << rec unless rec.nil?
110
+ f.each do |rec|
111
+ ans << rec
112
+ end
113
+ rec = f.get
114
+ assert_equal(expa[0],rec)
115
+ end
116
+
117
+ begin
118
+ f = rio('f.txt')
119
+ ans = []
120
+
121
+ (0...n_lines).each do |n|
122
+ rec = f.get
123
+ assert_equal(expa[n],rec)
124
+ end
125
+ rec = f.get
126
+ assert_nil(rec)
127
+
128
+ f.each do |rec|
129
+ ans << rec
130
+ end
131
+ assert_equal(expa,ans)
132
+ end
133
+
134
+ begin
135
+ f = rio('f.txt')
136
+ ans = []
137
+
138
+ (0...n_lines).each do |n|
139
+ rec = f.get
140
+ assert_equal(expa[n],rec)
141
+ end
142
+ assert(f.eof?)
143
+ f.each do |rec|
144
+ ans << rec
145
+ end
146
+ assert_equal([],ans)
147
+ end
148
+ end
149
+ end