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,37 @@
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
+ require 'tc/csvutil'
10
+
11
+ class TC_csv_columns < Test::RIO::TestCase
12
+ include CSV_Util
13
+
14
+ @@once = false
15
+ def self.once
16
+ @@once = true
17
+ end
18
+ def setup()
19
+ super
20
+ @src = rio(?")
21
+ @dst_name = 'dst.csv'
22
+ @records,@strings,@lines,@string = create_test_csv_data(@src,1, 8, false)
23
+ end
24
+
25
+ def test_basic
26
+
27
+ rio('src1.csv') < @src
28
+ r = @records[0]
29
+ assert_equal([[r[1],r[2],r[5]]],rio('src1.csv').csv.columns(1,2,5).to_a)
30
+ assert_equal([r[3...6]],rio('src1.csv').csv.columns(3...6).to_a)
31
+ assert_equal([[r[3],r[5]]],rio('src1.csv').csv.columns(3...6).skipcolumns(4).to_a)
32
+ assert_equal([[r[0],r[7]]],rio('src1.csv').csv.skipcolumns(1..6).to_a)
33
+ assert_equal([[]],rio('src1.csv').csv.skipcolumns.to_a)
34
+ assert_equal([r],rio('src1.csv').csv.to_a)
35
+
36
+ end
37
+ end
@@ -0,0 +1,56 @@
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
+
9
+ module CSV_Util
10
+ def records_to_rows(records)
11
+ n_records = records.size
12
+ rows = []
13
+ head = records[0]
14
+ (1...n_records).each do |n|
15
+ record = records[n]
16
+ row = {}
17
+ (0...record.size).each do |ncol|
18
+ row[head[ncol]] = row[ncol]
19
+ end
20
+ rows << row
21
+ end
22
+ rows
23
+ end
24
+ def records_to_strings(records)
25
+ records.map { |values| values.join(',') }
26
+ end
27
+ def records_to_string(records)
28
+ records_to_strings(records).join("\n") + "\n"
29
+ end
30
+ def strings_to_string(strings)
31
+ strings.join("\n") + "\n"
32
+ end
33
+ def strings_to_lines(strings)
34
+ strings.map { |s| s + "\n" }
35
+ end
36
+ def create_test_csv_records(n_rows,n_cols,header=true)
37
+ records = []
38
+
39
+ records << (0...n_cols).map { |n| "Head#{n}" } if header
40
+
41
+ (0...n_rows).each do |nrow|
42
+ records << (0...n_cols).map { |n| "Dat#{nrow}#{n}" }
43
+ end
44
+ records
45
+ end
46
+
47
+ def create_test_csv_data(frio,n_rows,n_cols,header=true)
48
+ records = create_test_csv_records(n_rows,n_cols,header)
49
+ strings = records_to_strings(records)
50
+ lines = strings_to_lines(strings)
51
+ string = strings_to_string(strings)
52
+ frio < string
53
+ [records,strings,lines,string]
54
+ end
55
+
56
+ end
data/test/tc/dir.rb ADDED
@@ -0,0 +1,76 @@
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
+ class TC_dir < Test::Unit::TestCase
10
+ include RIO_TestCase
11
+ def setup()
12
+ super
13
+ rio('a').rmtree.mkpath
14
+ rio('a/d').mkpath
15
+ rio('a/f').touch
16
+ @ents = %w[. .. d f]
17
+ @rents = @ents.map { |ds| rio(ds) }
18
+ end
19
+ def test_read
20
+ d = rio('a')
21
+ ans = []
22
+ while ent = d.read
23
+ ans << ent
24
+ end
25
+ assert_equal(@rents,ans)
26
+ assert(d.closed?)
27
+ end
28
+ def test_rewind
29
+ d = rio('a').nocloseoneof
30
+ ans = []
31
+ while ent = d.read
32
+ ans << ent
33
+ end
34
+ assert_equal(@rents,ans)
35
+ assert!(d.closed?)
36
+ d.rewind
37
+ while ent = d.read
38
+ ans << ent
39
+ end
40
+ assert_equal(@rents+@rents,ans)
41
+ d.close
42
+ end
43
+ def test_seek
44
+ d = rio('a').nocloseoneof
45
+ ans = []
46
+ poss = {}
47
+ while true
48
+ ps = d.tell
49
+ ent = d.read
50
+ break if ent.nil?
51
+ poss[ent] = ps
52
+ end
53
+ poss.each do |e,ps|
54
+ ent = d.seek(ps).read
55
+ assert_equal(e,ent)
56
+ end
57
+ d.close
58
+ end
59
+ def test_pos
60
+ d = rio('a').nocloseoneof
61
+ ans = []
62
+ poss = {}
63
+ while true
64
+ ps = d.pos
65
+ ent = d.read
66
+ break if ent.nil?
67
+ poss[ent] = ps
68
+ end
69
+ poss.each do |e,ps|
70
+ d.pos = ps
71
+ ent = d.read
72
+ assert_equal(e,ent)
73
+ end
74
+ d.close
75
+ end
76
+ end
@@ -0,0 +1,383 @@
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
+ if ENV['TEST_RIO'] == 'gem'
8
+ require 'rubygems'
9
+ require_gem 'rio'
10
+ else
11
+ require 'rio'
12
+ end
13
+
14
+ require 'tc/testcase'
15
+
16
+ class TC_dir_iter < Test::RIO::TestCase
17
+ @@once = false
18
+ @@exp = {}
19
+ def self.once
20
+ @@once = true
21
+ (0..3).each { |n_ents|
22
+ d = rio('d'+n_ents.to_s).delete!.mkdir
23
+ @@exp[d.to_s] = []
24
+ d.chdir { |dir|
25
+ (0...n_ents).each { |fnum|
26
+ @@exp[d.to_s] << rio('f'+fnum.to_s).touch
27
+ }
28
+ }
29
+ }
30
+ end
31
+ def setup
32
+ super
33
+ self.class.once unless @@once
34
+ end
35
+ def otest_dir
36
+ (1..1).each do |n_ents|
37
+ get_each_dir(n_ents)
38
+ end
39
+ end
40
+ def doem(&block)
41
+ rio('.').each { |d|
42
+ ma = /d(\d)/.match(d.to_s)
43
+ n_ents = ma[1].to_i
44
+ exp = @@exp[d.to_s]
45
+ d.chdir { |dir|
46
+ yield(dir,n_ents,exp)
47
+ }
48
+ }
49
+ end
50
+ def test_ss
51
+ doem { |d,n,exp|
52
+ ans = d[]
53
+ assert_array_equal(exp,ans)
54
+ }
55
+ end
56
+ def test_each
57
+ doem { |d,n,exp|
58
+ ans = []
59
+ d.each { |e| ans << e }
60
+ assert_array_equal(exp,ans)
61
+ }
62
+ end
63
+ def test_read
64
+ doem { |d,n,exp|
65
+ ans = []
66
+ while e = d.read
67
+ ans << e
68
+ end
69
+ ans.reject! { |el| el =~ /^\.{1,2}$/ }
70
+ assert_array_equal(exp,ans)
71
+ }
72
+ end
73
+ def test_each_get_break
74
+ doem { |d,n,exp|
75
+ ans = []
76
+ d.each { |e|
77
+ ans << e
78
+ break
79
+ }
80
+ assert_array_equal(exp[0..0],ans)
81
+ ent = d.get
82
+ assert_equal(exp[1],ent)
83
+ ent2 = d.get
84
+ if ent.nil?
85
+ assert_equal(exp[0],ent2)
86
+ else
87
+ assert_equal(exp[2],ent2)
88
+ end
89
+ }
90
+ end
91
+ def test_each_get
92
+ doem { |d,n,exp|
93
+ ans = []
94
+ d.each { |e|
95
+ ans << e
96
+ }
97
+ assert_array_equal(exp,ans)
98
+ ent = d.get
99
+ assert_equal(exp[0],ent)
100
+ }
101
+ end
102
+ def test_each_get_nceof
103
+ doem { |d,n,exp|
104
+ ans = []
105
+ d.nocloseoneof.each { |e|
106
+ ans << e
107
+ break
108
+ }
109
+ assert_array_equal(exp[0..0],ans)
110
+ ent = d.get
111
+ assert_equal(exp[1],ent)
112
+ ent2 = d.get
113
+ assert_equal(exp[2],ent2)
114
+ }
115
+ end
116
+ def test_each_get_nac
117
+ doem { |d,n,exp|
118
+ ans = []
119
+ d.noautoclose.each { |e|
120
+ ans << e
121
+ break
122
+ }
123
+ assert_array_equal(exp[0..0],ans)
124
+ ent = d.get
125
+ assert_equal(exp[1],ent)
126
+ ent2 = d.get
127
+ assert_equal(exp[2],ent2)
128
+ }
129
+ end
130
+ def test_get_get
131
+ doem { |d,n,exp|
132
+ ans = []
133
+ while e = d.get
134
+ ans << e
135
+ end
136
+ while e = d.get
137
+ ans << e
138
+ end
139
+ assert_array_equal(exp+exp,ans)
140
+ }
141
+ end
142
+ def test_get_get_nac
143
+ doem { |d,n,exp|
144
+ ans = []
145
+ d.noautoclose
146
+ while e = d.get
147
+ ans << e
148
+ end
149
+ while e = d.get
150
+ ans << e
151
+ end
152
+ assert_array_equal(exp,ans)
153
+ }
154
+ end
155
+ def test_each_each
156
+ doem { |d,n,exp|
157
+ ans = []
158
+ d.each { |e|
159
+ ans << e
160
+ }
161
+ d.each { |e|
162
+ ans << e
163
+ }
164
+ assert_array_equal(exp+exp,ans)
165
+ }
166
+ end
167
+ def test_each_each_nac
168
+ doem { |d,n,exp|
169
+ ans = []
170
+ d.noautoclose.each { |e|
171
+ ans << e
172
+ }
173
+ d.each { |e|
174
+ ans << e
175
+ }
176
+ assert_array_equal(exp,ans)
177
+ }
178
+ end
179
+ def test_get
180
+ doem { |d,n,exp|
181
+ ans = []
182
+ while e = d.get
183
+ ans << e
184
+ end
185
+ assert_array_equal(exp,ans)
186
+ }
187
+ end
188
+ def test_get_select
189
+ doem { |d,n,exp|
190
+ ans = []
191
+ d.entries(/1/)
192
+ while e = d.get
193
+ ans << e
194
+ end
195
+ exp = exp.select { |el| el =~ /1/ }
196
+ assert_array_equal(exp,ans)
197
+ }
198
+ end
199
+ def test_get_skip
200
+ doem { |d,n,exp|
201
+ ans = []
202
+ d.skip(/1/)
203
+ while e = d.get
204
+ ans << e
205
+ end
206
+ exp = exp.reject { |el| el =~ /1/ }
207
+ assert_array_equal(exp,ans)
208
+ }
209
+ end
210
+ def test_get_skip_files
211
+ doem { |d,n,exp|
212
+ ans = []
213
+ d.skip.files(/1/)
214
+ while e = d.get
215
+ ans << e
216
+ end
217
+ exp = exp.reject { |el| el =~ /1/ }
218
+ assert_array_equal(exp,ans)
219
+ }
220
+ end
221
+ def test_get_skipfiles
222
+ doem { |d,n,exp|
223
+ ans = []
224
+ d.skipfiles(/1/)
225
+ while e = d.get
226
+ ans << e
227
+ end
228
+ exp = exp.reject { |el| el =~ /1/ }
229
+ assert_array_equal(exp,ans)
230
+ }
231
+ end
232
+ def get_each_dir(n_ents)
233
+ expa = []
234
+ d = rio('dir').delete!.mkdir
235
+ (0..n_ents-1).each { |n|
236
+ expa << (d/'f'+n.to_s).touch
237
+ }
238
+
239
+ d = rio('dir')
240
+ assert_array_equal(expa,d[])
241
+
242
+ begin
243
+ d = rio('dir')
244
+ ans = []
245
+ d.each { |ent| ans << ent }
246
+ assert_equal(expa,ans)
247
+ end
248
+ begin
249
+ d = rio('dir')
250
+ ans = []
251
+ while ent = d.get
252
+ ans << rec
253
+ end
254
+ assert_equal(expa,ans)
255
+ end
256
+ begin
257
+ while rec = f.get
258
+ ans << rec
259
+ end
260
+ assert_equal(expa,ans)
261
+ end
262
+
263
+ # $trace_states = true
264
+
265
+ # iterate twice using #get (no auto close)
266
+ begin
267
+ f = rio('f.txt').nocloseoneof
268
+ ans = []
269
+ while rec = f.get
270
+ ans << rec
271
+ end
272
+ assert_equal(expa,ans)
273
+ while rec = f.get
274
+ ans << rec
275
+ end
276
+ assert_equal(expa,ans)
277
+ end
278
+
279
+ # iterate using #get then using #each (no auto close)
280
+ begin
281
+ f = rio('f.txt').nocloseoneof
282
+ ans = []
283
+ while rec = f.get
284
+ ans << rec
285
+ end
286
+ assert_equal(expa,ans)
287
+ f.each do |rec|
288
+ ans << rec
289
+ end
290
+ assert_equal(expa,ans)
291
+ end
292
+
293
+ # iterate using #each then using #get (no auto close)
294
+ begin
295
+ f = rio('f.txt').nocloseoneof
296
+ ans = []
297
+ f.each do |rec|
298
+ ans << rec
299
+ end
300
+ assert_equal(expa,ans)
301
+ while rec = f.get
302
+ ans << rec
303
+ end
304
+ assert_equal(expa,ans)
305
+ end
306
+
307
+ # iterate twice using #get (with auto close)
308
+ begin
309
+ f = rio('f.txt')
310
+ ans = []
311
+ while rec = f.get
312
+ ans << rec
313
+ end
314
+ assert_equal(expa,ans)
315
+ while rec = f.get
316
+ ans << rec
317
+ end
318
+ assert_equal(expa+expa,ans)
319
+ end
320
+
321
+ # assure get returns nil once after iteration using #get (with auto close)
322
+ begin
323
+ f = rio('f.txt')
324
+ ans = []
325
+
326
+ f.each do |rec|
327
+ ans << rec
328
+ end
329
+ assert_equal(expa,ans)
330
+
331
+ rec = f.get
332
+ assert_nil(rec)
333
+
334
+ rec = f.get
335
+ assert_equal(expa[0],rec)
336
+ end
337
+
338
+ begin
339
+ f = rio('f.txt')
340
+ ans = []
341
+
342
+ rec = f.get
343
+ assert_equal(expa[0],rec)
344
+ ans << rec unless rec.nil?
345
+ f.each do |rec|
346
+ ans << rec
347
+ end
348
+ rec = f.get
349
+ assert_nil(rec)
350
+ end
351
+
352
+ begin
353
+ f = rio('f.txt')
354
+ ans = []
355
+
356
+ (0...n_lines).each do |n|
357
+ rec = f.get
358
+ assert_equal(expa[n],rec)
359
+ end
360
+ rec = f.get
361
+ assert_nil(rec)
362
+
363
+ f.each do |rec|
364
+ ans << rec
365
+ end
366
+ assert_equal(expa,ans)
367
+ end
368
+
369
+ begin
370
+ f = rio('f.txt')
371
+ ans = []
372
+
373
+ (0...n_lines).each do |n|
374
+ rec = f.get
375
+ assert_equal(expa[n],rec)
376
+ end
377
+ f.each do |rec|
378
+ ans << rec
379
+ end
380
+ assert_equal(expa,ans)
381
+ end
382
+ end
383
+ end