wishdev-rio 0.4.3.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.
Files changed (296) hide show
  1. data/COPYING +341 -0
  2. data/README +81 -0
  3. data/Rakefile +281 -0
  4. data/build_doc.rb +94 -0
  5. data/doc/ANNOUNCE +159 -0
  6. data/doc/RELEASE_NOTES +308 -0
  7. data/doc/RIOIS +215 -0
  8. data/doc/generators/template/html/rio.css +428 -0
  9. data/doc/generators/template/html/rio.rb +523 -0
  10. data/doc/generators/template/html/ugly.rb +132 -0
  11. data/doc/pkg_def.rb +60 -0
  12. data/doc/rfc1738.txt +1403 -0
  13. data/doc/rfc959.txt +3933 -0
  14. data/ex/catcsv.rb +64 -0
  15. data/ex/colx.rb +8 -0
  16. data/ex/findinruby +15 -0
  17. data/ex/findruby +14 -0
  18. data/ex/passwd_report.rb +8 -0
  19. data/ex/prompt.rb +25 -0
  20. data/ex/rgb.txt.gz +0 -0
  21. data/ex/riocat +42 -0
  22. data/ex/riogunzip +31 -0
  23. data/ex/riogzip +24 -0
  24. data/ex/rioprompt.rb +10 -0
  25. data/ex/targz2zip +17 -0
  26. data/ex/tonl +10 -0
  27. data/lib/rio/abstract_method.rb +56 -0
  28. data/lib/rio/argv.rb +56 -0
  29. data/lib/rio/arycopy.rb +43 -0
  30. data/lib/rio/assert.rb +114 -0
  31. data/lib/rio/base.rb +56 -0
  32. data/lib/rio/callstr.rb +46 -0
  33. data/lib/rio/const.rb +51 -0
  34. data/lib/rio/construct.rb +50 -0
  35. data/lib/rio/constructor.rb +258 -0
  36. data/lib/rio/context/autoclose.rb +72 -0
  37. data/lib/rio/context/copying.rb +55 -0
  38. data/lib/rio/context/cxx.rb +66 -0
  39. data/lib/rio/context/dir.rb +120 -0
  40. data/lib/rio/context/gzip.rb +50 -0
  41. data/lib/rio/context/methods.rb +182 -0
  42. data/lib/rio/context/skip.rb +66 -0
  43. data/lib/rio/context/stream.rb +229 -0
  44. data/lib/rio/context.rb +117 -0
  45. data/lib/rio/cp.rb +370 -0
  46. data/lib/rio/def.rb +53 -0
  47. data/lib/rio/dir.rb +144 -0
  48. data/lib/rio/doc/EXAMPLES.rb +299 -0
  49. data/lib/rio/doc/HOWTO.rb +737 -0
  50. data/lib/rio/doc/INDEX.rb +311 -0
  51. data/lib/rio/doc/INTRO.rb +1068 -0
  52. data/lib/rio/doc/OPTIONAL.rb +130 -0
  53. data/lib/rio/doc/SYNOPSIS.rb +183 -0
  54. data/lib/rio/doc.rb +45 -0
  55. data/lib/rio/entrysel.rb +246 -0
  56. data/lib/rio/exception/copy.rb +97 -0
  57. data/lib/rio/exception/notimplemented.rb +57 -0
  58. data/lib/rio/exception/notsupported.rb +46 -0
  59. data/lib/rio/exception/open.rb +61 -0
  60. data/lib/rio/exception/state.rb +73 -0
  61. data/lib/rio/exception.rb +41 -0
  62. data/lib/rio/ext/csv.rb +351 -0
  63. data/lib/rio/ext/if.rb +45 -0
  64. data/lib/rio/ext/mp3info.rb +80 -0
  65. data/lib/rio/ext/splitlines.rb +253 -0
  66. data/lib/rio/ext/yaml/doc.rb +133 -0
  67. data/lib/rio/ext/yaml/tie.rb +149 -0
  68. data/lib/rio/ext/yaml.rb +164 -0
  69. data/lib/rio/ext/zipfile/fs.rb +116 -0
  70. data/lib/rio/ext/zipfile/rl.rb +251 -0
  71. data/lib/rio/ext/zipfile/rootdir.rb +117 -0
  72. data/lib/rio/ext/zipfile/state.rb +161 -0
  73. data/lib/rio/ext/zipfile/wrap.rb +204 -0
  74. data/lib/rio/ext/zipfile.rb +110 -0
  75. data/lib/rio/ext.rb +138 -0
  76. data/lib/rio/factory.rb +436 -0
  77. data/lib/rio/file.rb +118 -0
  78. data/lib/rio/filter/closeoneof.rb +103 -0
  79. data/lib/rio/filter/gzip.rb +70 -0
  80. data/lib/rio/filter.rb +94 -0
  81. data/lib/rio/fs/base.rb +41 -0
  82. data/lib/rio/fs/impl.rb +122 -0
  83. data/lib/rio/fs/native.rb +75 -0
  84. data/lib/rio/fs/stream.rb +61 -0
  85. data/lib/rio/fs/url.rb +63 -0
  86. data/lib/rio/ftp/conncache.rb +101 -0
  87. data/lib/rio/ftp/dir.rb +94 -0
  88. data/lib/rio/ftp/fs.rb +180 -0
  89. data/lib/rio/ftp/ftpfile.rb +20 -0
  90. data/lib/rio/grande.rb +97 -0
  91. data/lib/rio/handle.rb +100 -0
  92. data/lib/rio/if/basic.rb +64 -0
  93. data/lib/rio/if/csv.rb +76 -0
  94. data/lib/rio/if/dir.rb +157 -0
  95. data/lib/rio/if/file.rb +89 -0
  96. data/lib/rio/if/fileordir.rb +268 -0
  97. data/lib/rio/if/grande.rb +729 -0
  98. data/lib/rio/if/grande_entry.rb +379 -0
  99. data/lib/rio/if/grande_stream.rb +693 -0
  100. data/lib/rio/if/internal.rb +125 -0
  101. data/lib/rio/if/path.rb +462 -0
  102. data/lib/rio/if/rubyio.rb +681 -0
  103. data/lib/rio/if/string.rb +83 -0
  104. data/lib/rio/if/temp.rb +45 -0
  105. data/lib/rio/if/test.rb +282 -0
  106. data/lib/rio/if/yaml.rb +206 -0
  107. data/lib/rio/if.rb +64 -0
  108. data/lib/rio/ioh.rb +162 -0
  109. data/lib/rio/iomode.rb +109 -0
  110. data/lib/rio/ios/fail.rb +106 -0
  111. data/lib/rio/ios/generic.rb +119 -0
  112. data/lib/rio/ios/mode.rb +60 -0
  113. data/lib/rio/ios/null.rb +119 -0
  114. data/lib/rio/iowrap.rb +128 -0
  115. data/lib/rio/kernel.rb +54 -0
  116. data/lib/rio/local.rb +62 -0
  117. data/lib/rio/match.rb +53 -0
  118. data/lib/rio/matchrecord.rb +283 -0
  119. data/lib/rio/no_warn.rb +49 -0
  120. data/lib/rio/nullio.rb +159 -0
  121. data/lib/rio/open3.rb +68 -0
  122. data/lib/rio/ops/construct.rb +61 -0
  123. data/lib/rio/ops/create.rb +77 -0
  124. data/lib/rio/ops/dir.rb +346 -0
  125. data/lib/rio/ops/either.rb +134 -0
  126. data/lib/rio/ops/file.rb +102 -0
  127. data/lib/rio/ops/path.rb +296 -0
  128. data/lib/rio/ops/stream/input.rb +267 -0
  129. data/lib/rio/ops/stream/output.rb +100 -0
  130. data/lib/rio/ops/stream/read.rb +86 -0
  131. data/lib/rio/ops/stream/write.rb +57 -0
  132. data/lib/rio/ops/stream.rb +87 -0
  133. data/lib/rio/ops/symlink.rb +80 -0
  134. data/lib/rio/path/reset.rb +69 -0
  135. data/lib/rio/path.rb +129 -0
  136. data/lib/rio/piper/cp.rb +80 -0
  137. data/lib/rio/piper.rb +122 -0
  138. data/lib/rio/prompt.rb +66 -0
  139. data/lib/rio/rectype.rb +88 -0
  140. data/lib/rio/rl/base.rb +118 -0
  141. data/lib/rio/rl/builder.rb +117 -0
  142. data/lib/rio/rl/chmap.rb +66 -0
  143. data/lib/rio/rl/fs2url.rb +82 -0
  144. data/lib/rio/rl/ioi.rb +78 -0
  145. data/lib/rio/rl/path.rb +110 -0
  146. data/lib/rio/rl/pathmethods.rb +116 -0
  147. data/lib/rio/rl/uri.rb +200 -0
  148. data/lib/rio/rl/withpath.rb +296 -0
  149. data/lib/rio/scheme/aryio.rb +88 -0
  150. data/lib/rio/scheme/cmdio.rb +80 -0
  151. data/lib/rio/scheme/cmdpipe.rb +118 -0
  152. data/lib/rio/scheme/fd.rb +65 -0
  153. data/lib/rio/scheme/ftp.rb +141 -0
  154. data/lib/rio/scheme/http.rb +78 -0
  155. data/lib/rio/scheme/null.rb +55 -0
  156. data/lib/rio/scheme/path.rb +98 -0
  157. data/lib/rio/scheme/stderr.rb +55 -0
  158. data/lib/rio/scheme/stdio.rb +71 -0
  159. data/lib/rio/scheme/strio.rb +87 -0
  160. data/lib/rio/scheme/sysio.rb +63 -0
  161. data/lib/rio/scheme/tcp.rb +75 -0
  162. data/lib/rio/scheme/temp.rb +200 -0
  163. data/lib/rio/state/error.rb +72 -0
  164. data/lib/rio/state.rb +242 -0
  165. data/lib/rio/stream/base.rb +54 -0
  166. data/lib/rio/stream/duplex.rb +79 -0
  167. data/lib/rio/stream/open.rb +202 -0
  168. data/lib/rio/stream.rb +181 -0
  169. data/lib/rio/symantics.rb +45 -0
  170. data/lib/rio/tempdir.rb +132 -0
  171. data/lib/rio/to_rio/all.rb +39 -0
  172. data/lib/rio/to_rio/array.rb +39 -0
  173. data/lib/rio/to_rio/io.rb +40 -0
  174. data/lib/rio/to_rio/object.rb +42 -0
  175. data/lib/rio/to_rio/string.rb +40 -0
  176. data/lib/rio/to_rio.rb +67 -0
  177. data/lib/rio/uri/file.rb +198 -0
  178. data/lib/rio/util.rb +48 -0
  179. data/lib/rio/version.rb +51 -0
  180. data/lib/rio.rb +162 -0
  181. data/setup.rb +1360 -0
  182. data/test/bin/count_lines.rb +11 -0
  183. data/test/bin/find_lines.rb +13 -0
  184. data/test/bin/list_dir.rb +14 -0
  185. data/test/ftp/all.rb +9 -0
  186. data/test/ftp/anon_copy_data.rb +36 -0
  187. data/test/ftp/anon_misc.rb +124 -0
  188. data/test/ftp/anon_read.rb +105 -0
  189. data/test/ftp/anon_special.rb +68 -0
  190. data/test/ftp/anon_write.rb +70 -0
  191. data/test/ftp/ftp2ftp.rb +51 -0
  192. data/test/ftp/initftpfiles.rb +14 -0
  193. data/test/ftp/testdef.rb +55 -0
  194. data/test/gem_runtests.rb +15 -0
  195. data/test/http/all.rb +4 -0
  196. data/test/http/copy-from-http.rb +141 -0
  197. data/test/http/uri-meta.rb +72 -0
  198. data/test/lib/temp_server.rb +46 -0
  199. data/test/runalltests.rb +17 -0
  200. data/test/runftptests.rb +14 -0
  201. data/test/runhttp.rb +11 -0
  202. data/test/runhttptests.rb +14 -0
  203. data/test/runtests.rb +52 -0
  204. data/test/tc/abs.rb +355 -0
  205. data/test/tc/all.rb +80 -0
  206. data/test/tc/base.rb +31 -0
  207. data/test/tc/base2.rb +87 -0
  208. data/test/tc/cd1.rb +113 -0
  209. data/test/tc/clearsel.rb +68 -0
  210. data/test/tc/clone.rb +208 -0
  211. data/test/tc/closeoncopy.rb +102 -0
  212. data/test/tc/closeoneof.rb +194 -0
  213. data/test/tc/cmdpipe.rb +149 -0
  214. data/test/tc/copy-dir-samevar.rb +91 -0
  215. data/test/tc/copy-from.rb +129 -0
  216. data/test/tc/copy-to.rb +91 -0
  217. data/test/tc/copy.rb +74 -0
  218. data/test/tc/copyarray.rb +188 -0
  219. data/test/tc/copydest.rb +50 -0
  220. data/test/tc/copydir.rb +166 -0
  221. data/test/tc/copydirlines.rb +121 -0
  222. data/test/tc/copylines.rb +46 -0
  223. data/test/tc/copynonex.rb +118 -0
  224. data/test/tc/copysymlink.rb +39 -0
  225. data/test/tc/create.rb +114 -0
  226. data/test/tc/csv.rb +226 -0
  227. data/test/tc/csv2.rb +138 -0
  228. data/test/tc/csv_columns.rb +37 -0
  229. data/test/tc/csvutil.rb +56 -0
  230. data/test/tc/dir.rb +76 -0
  231. data/test/tc/dir_iter.rb +383 -0
  232. data/test/tc/dirautoclose.rb +67 -0
  233. data/test/tc/dirent.rb +178 -0
  234. data/test/tc/dirss.rb +81 -0
  235. data/test/tc/each.rb +111 -0
  236. data/test/tc/each_break.rb +243 -0
  237. data/test/tc/edf.rb +81 -0
  238. data/test/tc/empty.rb +51 -0
  239. data/test/tc/emptyriodir.rb +129 -0
  240. data/test/tc/entary.rb +227 -0
  241. data/test/tc/entsel.rb +110 -0
  242. data/test/tc/eq.rb +101 -0
  243. data/test/tc/expand_path.rb +69 -0
  244. data/test/tc/ext.rb +136 -0
  245. data/test/tc/fileno.rb +94 -0
  246. data/test/tc/files_select.rb +92 -0
  247. data/test/tc/get.rb +152 -0
  248. data/test/tc/getrec.rb +137 -0
  249. data/test/tc/gzip.rb +109 -0
  250. data/test/tc/io_each_byte.rb +60 -0
  251. data/test/tc/io_read.rb +80 -0
  252. data/test/tc/iometh.rb +149 -0
  253. data/test/tc/likeio.rb +116 -0
  254. data/test/tc/line_record_row.rb +51 -0
  255. data/test/tc/lineno.rb +196 -0
  256. data/test/tc/lines.rb +66 -0
  257. data/test/tc/misc.rb +432 -0
  258. data/test/tc/nolines.rb +204 -0
  259. data/test/tc/noqae.rb +879 -0
  260. data/test/tc/null.rb +45 -0
  261. data/test/tc/once.rb +6 -0
  262. data/test/tc/overload.rb +140 -0
  263. data/test/tc/pa.rb +158 -0
  264. data/test/tc/path_parts.rb +175 -0
  265. data/test/tc/pathop.rb +60 -0
  266. data/test/tc/paths.rb +145 -0
  267. data/test/tc/pid.rb +31 -0
  268. data/test/tc/piper.rb +143 -0
  269. data/test/tc/programs_util.rb +24 -0
  270. data/test/tc/qae.rb +493 -0
  271. data/test/tc/qae_riovar.rb +499 -0
  272. data/test/tc/readline.rb +30 -0
  273. data/test/tc/records.rb +68 -0
  274. data/test/tc/rename.rb +233 -0
  275. data/test/tc/rename_assign.rb +45 -0
  276. data/test/tc/riorl.rb +181 -0
  277. data/test/tc/route.rb +51 -0
  278. data/test/tc/selnosel.rb +33 -0
  279. data/test/tc/skip.rb +89 -0
  280. data/test/tc/skiplines.rb +71 -0
  281. data/test/tc/split.rb +28 -0
  282. data/test/tc/splitlines.rb +65 -0
  283. data/test/tc/splitpath.rb +83 -0
  284. data/test/tc/sub.rb +46 -0
  285. data/test/tc/symlink.rb +176 -0
  286. data/test/tc/symlink0.rb +348 -0
  287. data/test/tc/symlink1.rb +114 -0
  288. data/test/tc/synopsis.rb +75 -0
  289. data/test/tc/temp.rb +152 -0
  290. data/test/tc/tempdir.rb +60 -0
  291. data/test/tc/tempfile.rb +66 -0
  292. data/test/tc/testcase.rb +170 -0
  293. data/test/tc/tonl.rb +37 -0
  294. data/test/tc/truncate.rb +39 -0
  295. data/test/tc/yaml.rb +275 -0
  296. metadata +387 -0
@@ -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
data/test/tc/likeio.rb ADDED
@@ -0,0 +1,116 @@
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 TestData
11
+ attr_reader :fn_ruby,:fn_rio,:data
12
+ def initialize(prefix,data)
13
+ @data = data
14
+ @fn_ruby = prefix + 'ruby.dat'
15
+ @fn_rio = prefix + 'rio.dat'
16
+ rio(@fn_ruby) < @data
17
+ rio(@fn_rio) < @data
18
+ end
19
+ end
20
+
21
+ class TC_likeio < Test::RIO::TestCase
22
+ @@once = false
23
+ @@data = {}
24
+ def self.once
25
+ @@once = true
26
+ @@data['bytes'] = TestData.new('bytes_',"012")
27
+ @@data['lines'] = TestData.new('lines_',"Line0\nLine1\n")
28
+ end
29
+ def setup
30
+ super
31
+ self.class.once unless @@once
32
+ end
33
+ def open_data(td,&block)
34
+ begin
35
+ fruby = ::File.open(td.fn_ruby)
36
+ frio = rio(td.fn_rio)
37
+ yield(fruby,frio)
38
+ ensure
39
+ fruby.close
40
+ frio.close
41
+ end
42
+ end
43
+
44
+ def check_read_method(fruby,frio,n,sym,*args)
45
+ #$trace_states = true
46
+ n.times {
47
+ exp = fruby.__send__(sym,*args)
48
+ ans = frio.__send__(sym,*args)
49
+ assert_equal(exp,ans)
50
+ assert_equal(fruby.eof?,frio.eof?)
51
+ }
52
+ #$trace_states = false
53
+ end
54
+
55
+ def check_read_method_raises_eof(fruby,frio,n,sym,*args)
56
+ n.times {
57
+ ruby_raises = false
58
+ rio_raises = false
59
+ ruby_returns = nil
60
+ rio_returns = nil
61
+ begin
62
+ ruby_returns = fruby.__send__(sym,*args)
63
+ rescue EOFError
64
+ ruby_raises = true
65
+ end
66
+ begin
67
+ rio_returns = frio.__send__(sym,*args)
68
+ rescue EOFError
69
+ rio_raises = true
70
+ end
71
+ assert_equal(ruby_raises,rio_raises)
72
+ assert_equal(ruby_returns,rio_returns)
73
+ }
74
+ end
75
+
76
+ def check_iter(fruby,frio,sym,*args)
77
+ ans_ruby = []
78
+ ans_rio = []
79
+ fruby.__send__(sym,*args) { |el|
80
+ ans_ruby << el
81
+ }
82
+ frio.__send__(sym,*args) { |el|
83
+ ans_rio << el
84
+ }
85
+ assert_equal(ans_ruby,ans_rio)
86
+ end
87
+ def test_each_byte
88
+ open_data(@@data['bytes']) { |fruby,frio|
89
+ check_iter(fruby,frio,:each_byte)
90
+ }
91
+ end
92
+ def test_each_line
93
+ open_data(@@data['lines']) { |fruby,frio|
94
+ check_iter(fruby,frio,:each_line)
95
+ }
96
+ end
97
+ def test_gets
98
+ open_data(@@data['lines']) { |fruby,frio|
99
+ check_read_method(fruby,frio,3,:gets)
100
+ }
101
+ open_data(@@data['lines']) { |fruby,frio|
102
+ check_read_method(fruby,frio,4,:gets,'e')
103
+ }
104
+ end
105
+ def test_getc
106
+ open_data(@@data['bytes']) { |fruby,frio|
107
+ check_read_method(fruby,frio,4,:getc)
108
+ }
109
+ end
110
+ def test_readchar
111
+ testdata = @@data['bytes']
112
+ open_data(testdata) { |fruby,frio|
113
+ check_read_method_raises_eof(fruby,frio,testdata.data.size+1,:readchar)
114
+ }
115
+ end
116
+ end
@@ -0,0 +1,51 @@
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_line_record_row < Test::RIO::TestCase
11
+ @@once = false
12
+ def self.once
13
+ @@once = true
14
+ rio('f0') < ['zero','one','two','three'].map{ |w| w + $/ }
15
+ end
16
+ def setup
17
+ super
18
+ self.class.once unless @@once
19
+ @f0 = rio('f0')
20
+ end
21
+ def test_line
22
+ assert_equal(rio(@f0).lines[0][0],rio(@f0).line[0])
23
+ assert_equal(rio(@f0).lines[1][0],rio(@f0).line[1])
24
+ assert_equal(rio(@f0).lines[2][0],rio(@f0).line[2])
25
+ assert_equal(rio(@f0).lines[3][0],rio(@f0).line[3])
26
+ assert_equal(rio(@f0).lines[4][0],rio(@f0).line[4])
27
+ assert_equal(rio(@f0).lines[1..2][0],rio(@f0).line[1])
28
+ assert_equal(rio(@f0).lines[/t/][0],rio(@f0).line[/t/])
29
+ end
30
+
31
+ def test_record
32
+ assert_equal(rio(@f0).records[0][0],rio(@f0).record[0])
33
+ assert_equal(rio(@f0).records[1][0],rio(@f0).record[1])
34
+ assert_equal(rio(@f0).records[2][0],rio(@f0).record[2])
35
+ assert_equal(rio(@f0).records[3][0],rio(@f0).record[3])
36
+ assert_equal(rio(@f0).records[4][0],rio(@f0).record[4])
37
+ assert_equal(rio(@f0).records[1..2][0],rio(@f0).record[1])
38
+ assert_equal(rio(@f0).records[/t/][0],rio(@f0).record[/t/])
39
+ end
40
+
41
+ def test_row
42
+ assert_equal(rio(@f0).rows[0][0],rio(@f0).row[0])
43
+ assert_equal(rio(@f0).rows[1][0],rio(@f0).row[1])
44
+ assert_equal(rio(@f0).rows[2][0],rio(@f0).row[2])
45
+ assert_equal(rio(@f0).rows[3][0],rio(@f0).row[3])
46
+ assert_equal(rio(@f0).rows[4][0],rio(@f0).row[4])
47
+ assert_equal(rio(@f0).rows[1..2][0],rio(@f0).row[1])
48
+ assert_equal(rio(@f0).rows[/t/][0],rio(@f0).row[/t/])
49
+ end
50
+
51
+ end