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,30 @@
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_readline < 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_readline_like_IO
20
+ frio = rio('frio') < (0..1).map{ |i| "Line #{i}\n" }
21
+ rio('fruby') < frio
22
+ fruby = File.open('fruby');
23
+ assert_equal(fruby.readline,frio.readline)
24
+ assert_equal(fruby.readline,frio.readline)
25
+ assert_raise(EOFError) { fruby.readline }
26
+ assert_raise(EOFError) { frio.readline }
27
+
28
+
29
+ end
30
+ end
@@ -0,0 +1,68 @@
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 'test/unit'
9
+ require 'test/unit/testsuite'
10
+
11
+ class TC_RIO_records < Test::Unit::TestCase
12
+ def assert!(a,msg="negative assertion")
13
+ assert((!(a)),msg)
14
+ end
15
+ def smap(a) a.map { |el| el.to_s } end
16
+ def tdir() rio(%w/qp records/) end
17
+ def mkafile(*args)
18
+ file = rio(*args)
19
+ file < (0..1).map { |i| "L#{i}:#{file.to_s}\n" }
20
+ file
21
+ end
22
+ def mkalinesfile(n_lines,*args)
23
+ file = rio(*args)
24
+ file < (0...n_lines).map { |i| "L#{i}:#{file.to_s}\n" }
25
+ file
26
+ end
27
+ def setup
28
+ #$trace_states = true
29
+ @cwd = ::Dir.getwd
30
+ tdir.mkpath.chdir
31
+ end
32
+ def teardown
33
+ ::Dir.chdir @cwd
34
+ end
35
+
36
+ def test_procs
37
+ rio('lineno').delete!.mkpath.chdir
38
+
39
+ file = mkalinesfile(8,'f1')
40
+ lines = file[]
41
+ (2..4).each do |n|
42
+ lines[n] = '#' + lines[n]
43
+ end
44
+ (0..3).each do |n|
45
+ lines[n].sub!(/f1/,'f2')
46
+ end
47
+ file < lines
48
+ exp = lines[0..0] + lines[2..4]
49
+
50
+ # iterate over the first line and comment lines
51
+ ans = file.lines[0,/^\s*#/]
52
+ assert_equal(exp,ans)
53
+
54
+ ans = file.lines[proc { |rec,rnum,rio| rnum == 0 || rec =~ /^\s*#/ }]
55
+ assert_equal(exp,ans)
56
+
57
+ exp = lines[0..0] + lines[2...8]
58
+ ans = file.lines[0,/^\s*#/,proc { |rec,rnum,ario| rec =~ /#{ario.filename}/ }]
59
+ assert_equal(exp,ans)
60
+
61
+ # $trace_states = true
62
+
63
+
64
+
65
+ file.close
66
+ rio('..').chdir
67
+ end
68
+ end
data/test/tc/rename.rb ADDED
@@ -0,0 +1,233 @@
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_rename < Test::RIO::TestCase
11
+ @@once = false
12
+ def self.once
13
+ @@once = true
14
+ rio('a').rmtree.mkpath
15
+ rio('b').rmtree.mkpath
16
+ make_lines_file(3,'a/f0')
17
+ make_lines_file(2,'a/f1')
18
+ end
19
+ def setup
20
+ super
21
+ self.class.once unless @@once
22
+
23
+ @l = []; @f = []; @d = []
24
+ @d[0] = rio('a')
25
+ @d[1] = rio('b')
26
+ @f[0] = rio('a/f0')
27
+ @f[1] = rio('a/f1')
28
+ @l[0] = @f[0].readlines
29
+ @l[1] = @f[1].readlines
30
+ @d[1] < @d[0]
31
+ @d[1] < @d[0].files[]
32
+ end
33
+ def test_rename_filename
34
+ indir = rio('tdir').delete!.mkpath < rio(@d[1]).to_a
35
+ oldf = indir.files[].map { |f| f.to_s }
36
+ expf = oldf.map { |f| f.sub(/f/,'q') }
37
+ indir.rename.files do |ent|
38
+ nname = ent.filename.to_s.sub(/f/,'q')
39
+ ent.filename = nname
40
+ end
41
+ assert_array_equal(expf,rio('tdir').files[])
42
+
43
+ end
44
+ def test_rename_filename_sub
45
+ indir = rio('tdir').delete!.mkpath < rio(@d[1]).to_a
46
+ oldf = indir.files[].map { |f| f.to_s }
47
+ expf = oldf.map { |f| f.sub(/f/,'q') }
48
+
49
+ indir.rename.files do |ent|
50
+ ent.filename = ent.filename.sub(/f/,'q')
51
+ end
52
+ assert_array_equal(expf,rio('tdir').files[])
53
+
54
+ end
55
+ def test_rename_basename
56
+ indir = rio('tdir').delete!.mkpath < rio(@d[1]).to_a
57
+ oldf = indir.files[].map { |f| f.to_s }
58
+ expf = oldf.map { |f| f.sub(/f/,'q') }
59
+
60
+ indir.rename.files do |ent|
61
+ ent.basename = ent.basename.to_s.sub(/f/,'q')
62
+ end
63
+ assert_array_equal(expf,indir.files[])
64
+
65
+ end
66
+ def test_rename
67
+ lines,ario = self.class.make_lines_file(1,'afile')
68
+ assert(ario.file?)
69
+
70
+ brio = rio('bfile').delete!
71
+ assert!(brio.exist?)
72
+ ario.rename('bfile')
73
+ assert!(ario.exist?)
74
+ assert(brio.file?)
75
+ assert_equal(lines,brio[])
76
+
77
+ end
78
+ def test_rename!
79
+ lines,ario = self.class.make_lines_file(1,'afile')
80
+ assert(ario.file?)
81
+
82
+ brio = rio('bfile').delete!
83
+ assert!(brio.exist?)
84
+
85
+ crio = ario.rename!('bfile')
86
+ assert(ario.exist?)
87
+ assert_same(ario,crio)
88
+ assert_equal(brio,ario)
89
+ assert_equal(lines,brio[])
90
+
91
+ end
92
+ def test_rename_assign
93
+ adir = rio('adir').delete!.mkpath
94
+ lines,ario = self.class.make_lines_file(1,adir,'afile.txt')
95
+ assert(ario.file?)
96
+ apath = 'adir/afile.txt'
97
+
98
+ ario.rename.extname = '.asc'
99
+ assert_equal(apath.sub!(/\.txt/,'.asc'),ario.to_s)
100
+ assert(ario.file?)
101
+ assert_equal(lines,ario[])
102
+
103
+ ario.rename.basename = 'bfile'
104
+ assert_equal(apath.sub!(/afile/,'bfile'),ario.to_s)
105
+ assert(ario.file?)
106
+ assert_equal(lines,ario[])
107
+
108
+ bdir = rio('bdir').delete!.mkpath
109
+ ario.rename.dirname = 'bdir'
110
+ assert_equal(apath.sub!(/adir/,'bdir'),ario.to_s)
111
+ assert(ario.file?)
112
+ assert_equal(lines,ario[])
113
+
114
+ ario.rename.filename = 'cfile.dat'
115
+ assert_equal(apath.sub!(/bfile\.asc/,'cfile.dat'),ario.to_s)
116
+ assert(ario.file?)
117
+ assert_equal(lines,ario[])
118
+
119
+ end
120
+ def test_rename_basename_sub
121
+ indir = rio('tdir').delete!.mkpath < rio(@d[1]).to_a
122
+ oldf = indir.files[].map { |f| f.to_s }
123
+ expf = oldf.map { |f| f.sub(/f/,'q') }
124
+
125
+ indir.rename.files do |ent|
126
+ ent.basename = ent.basename.sub(/f/,'q')
127
+ end
128
+ assert_array_equal(expf,indir.files[])
129
+
130
+ end
131
+ def test_rename_dirname
132
+ indir = rio('tdir').delete!.mkpath < rio(@d[1]).to_a
133
+ oldf = indir.files[].map { |f| f.to_s }
134
+ expf = oldf.map { |f| f.sub(/tdir/,'qdir') }
135
+ rio('qdir').delete!.mkpath
136
+ indir.rename.files do |ent|
137
+ ent.dirname = 'qdir'
138
+ end
139
+
140
+ assert_array_equal(expf,rio('qdir').files[])
141
+ assert_array_equal([],rio('tdir').files[])
142
+
143
+ end
144
+ def test_rename_dirname_deep
145
+ indir = rio('dir1/dir2/dir3/tdir').delete!.mkpath < rio(@d[1]).to_a
146
+ oldf = indir.files[].map { |f| f.to_s }
147
+ expf = oldf.map { |f| f.sub(indir.to_s,'shallow') }
148
+ rio('shallow').delete!.mkpath
149
+ indir.rename.files do |ent|
150
+ ent.dirname = 'shallow'
151
+ end
152
+ assert_array_equal(expf,rio('shallow').files[])
153
+ assert_array_equal([],rio(indir.to_s).files[])
154
+
155
+ end
156
+ def test_rename_basename_wext
157
+ indir = rio('tdir').delete!.mkpath < rio(@d[1]).to_a
158
+
159
+ newext = '.txt'
160
+ indir.files.rename.each { |ent|
161
+ ent.extname = newext
162
+ }
163
+ expf = @f.map { |file| rio(indir,file.basename.to_s + newext) }
164
+ expf.each_with_index do |ef,i|
165
+ assert(ef.file?)
166
+ assert_equal(@l[i],ef.lines[])
167
+ end
168
+
169
+ indir = rio('tdir')
170
+ newnames = []
171
+ indir.files.each do |ent|
172
+ ent.basename = ent.basename.sub(/f/,'q')
173
+ newnames << ent
174
+ end
175
+ expnames = @f.map { |file| rio(indir,file.basename.to_s.sub(/f/,'q') + newext) }
176
+ assert_equal(expnames,newnames)
177
+ newf = rio('tdir').files.to_a
178
+ assert_equal(expf,newf)
179
+
180
+ indir = rio('tdir')
181
+ indir.rename.files { |ent| ent.basename = ent.basename.to_s.sub(/f/,'q') }
182
+
183
+ newf = rio('tdir').files.to_a
184
+ assert_equal(expnames,newf)
185
+
186
+
187
+
188
+ end
189
+
190
+ def test_rename_add_ext
191
+ rio('tdir').delete!.mkpath < rio(@d[1]).to_a
192
+ indir = rio('tdir')
193
+ newext = '.txt'
194
+ rio('tdir').files.rename.each { |ent|
195
+ ent.extname = newext
196
+ }
197
+ assert_equal(@l[0],rio(rio('tdir'),@f[0].basename.to_s + newext).lines[])
198
+ assert_equal(@l[1],rio(rio('tdir'),@f[1].basename.to_s + newext).lines[])
199
+ end
200
+ def test_rename_add_ext_oreq
201
+ indir = (rio('tdir').delete!.mkpath < rio(@d[1]).to_a)
202
+
203
+ newext = '.txt'
204
+ indir.files(/0/).rename { |ent| ent.extname = newext }
205
+ assert_equal(@l[0],rio(indir,@f[0].basename.to_s + newext).lines[])
206
+ assert_equal(@l[1],rio(indir,@f[1].basename).lines[])
207
+
208
+ newerext = '.asc'
209
+ indir = rio(indir)
210
+ indir.files.rename { |ent| ent.extname ||= newerext }
211
+ assert_equal(@l[0],rio(indir,@f[0].basename.to_s + newext).lines[])
212
+ assert_equal(@l[1],rio(indir,@f[1].basename.to_s + newerext).lines[])
213
+ end
214
+
215
+ def test_rename_add_ext_andeq
216
+ indir = (rio('tdir').delete!.mkpath < rio(@d[1]).to_a)
217
+ newext = '.txt'
218
+ indir.files(/0/).rename { |ent|
219
+ ent.extname = newext
220
+ }
221
+ assert_equal(@l[0],rio(indir,@f[0].basename.to_s + newext).lines[])
222
+ assert_equal(@l[1],rio(indir,@f[1].basename).lines[])
223
+
224
+ newerext = '.asc'
225
+ indir = rio(indir)
226
+ indir.files.rename { |ent|
227
+ ent.extname &&= newerext
228
+ }
229
+ assert_equal(@l[0],rio(indir,@f[0].basename.to_s + newerext).lines[])
230
+ assert_equal(@l[1],rio(indir,@f[1].basename).lines[])
231
+ end
232
+ end
233
+ __END__
@@ -0,0 +1,45 @@
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_rename_assign < Test::RIO::TestCase
10
+ @@once = false
11
+ def self.once
12
+ @@once = true
13
+ rio('a').rmtree.mkpath
14
+ rio('b').rmtree.mkpath
15
+ make_lines_file(3,'a/f0')
16
+ make_lines_file(2,'a/f1')
17
+ end
18
+ def setup
19
+ super
20
+ self.class.once unless @@once
21
+
22
+ @l = []; @f = []; @d = []
23
+ @d[0] = rio('a')
24
+ @d[1] = rio('b')
25
+ @f[0] = rio('a/f0')
26
+ @f[1] = rio('a/f1')
27
+ @l[0] = @f[0].readlines
28
+ @l[1] = @f[1].readlines
29
+ @d[1] < @d[0]
30
+ @d[1] < @d[0].files[]
31
+ end
32
+ def test_rename_filename_shorter
33
+ adir = rio('adir').delete!.mkdir
34
+ rio(adir,'abcd').touch.rename.filename = 'xyz'
35
+ p adir[]
36
+ end
37
+ def test_rename_filename_shorterd
38
+ rio('tc').delete!.mkdir
39
+ newdir = rio('tc2').delete!.mkdir
40
+ rio('tc').rename('tc_old')
41
+ newdir.rename.filename = 'tc'
42
+ p smap(rio('.').to_a)
43
+ end
44
+ end
45
+ __END__
data/test/tc/riorl.rb ADDED
@@ -0,0 +1,181 @@
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 'tmpdir'
10
+
11
+ class TC_riorl < Test::RIO::TestCase
12
+ @@once = false
13
+ def self.once
14
+ @@once = true
15
+ end
16
+ def setup
17
+ super
18
+ self.class.once unless @@once
19
+ @tmpdir = "#{::Dir::tmpdir}"
20
+ #p @tmpdir
21
+ @tmppath = "#{@tmpdir}/rio"
22
+ end
23
+
24
+ def pathinfo(ario)
25
+ h = {}
26
+ [:scheme,:opaque,:path,:fspath,:to_s,:to_url,:to_uri].each do |sym|
27
+ begin
28
+ h[sym] = ario.__send__(sym)
29
+ rescue
30
+ h[sym] = 'error'
31
+ end
32
+ end
33
+ h
34
+ end
35
+ def pinfo(fmt,pi)
36
+ printf(fmt, pi[:scheme].inspect,pi[:opaque].inspect,pi[:path].inspect,
37
+ pi[:fspath].inspect,pi[:to_s].inspect,pi[:to_url].inspect)
38
+ end
39
+ def mkrioinfo(astring)
40
+ rinfo = mksyminfo(astring)
41
+ rinfo[?-] = rinfo[:stdio]
42
+ rinfo[?=] = rinfo[:stderr]
43
+ rinfo[??] = rinfo[:temp]
44
+ rinfo[?"] = rinfo[:strio]
45
+ rinfo[?_] = rinfo[:sysio]
46
+ rinfo[?`] = rinfo[:cmdio]
47
+ rinfo[?#] = rinfo[:fd]
48
+ rinfo
49
+ end
50
+
51
+ def mksyminfo(astring)
52
+ rinfo = {
53
+ :stdio => ['stdio',"",nil,nil,"stdio:","stdio:"],
54
+ :stderr => ['stderr',"",nil,nil,"stderr:","stderr:"],
55
+ :temp => ['temp',@tmppath,nil,nil,"temp:#{@tmppath}","temp:#{@tmppath}"],
56
+ }
57
+ strpq = sprintf("0x%08x",astring.object_id)
58
+ rinfo[:strio] = ['strio',strpq,nil,nil,"strio:#{strpq}","strio:#{strpq}"]
59
+
60
+ siopq = sprintf("0x%08x",$stdout.object_id)
61
+ rinfo[:sysio] = ['sysio',siopq,nil,nil,"sysio:#{siopq}","sysio:#{siopq}"]
62
+ rinfo[:cmdio] = ['cmdio','echo%20x',nil,nil,'echo x','cmdio:echo%20x']
63
+ rinfo[:fd] = ['fd','1',nil,nil,'fd:1','fd:1']
64
+ rinfo
65
+ end
66
+
67
+ def mkrios1()
68
+ rinfo = mkrioinfo(astring="")
69
+ rios = {
70
+ ?- => rio(?-),
71
+ ?= => rio(?=),
72
+ ?" => rio(?",astring),
73
+ ?? => rio(??),
74
+ ?_ => rio($stdout),
75
+ ?` => rio(?`,'echo x'),
76
+ ?# => rio(?#,1),
77
+ }
78
+ [rios,rinfo]
79
+ end
80
+
81
+ def mkrios_sym
82
+ rinfo = mksyminfo(astring="")
83
+
84
+ rios = {
85
+ :stdio => rio(:stdio),
86
+ :stderr => rio(:stderr),
87
+ :strio => rio(:strio,astring),
88
+ :temp => rio(:temp),
89
+ :sysio => rio(:sysio,$stdout),
90
+ :cmdio => rio(:cmdio,'echo x'),
91
+ :fd => rio(:fd,1),
92
+ }
93
+
94
+ [rios,rinfo]
95
+ end
96
+ def mkrios_modfunc
97
+ rinfo = mksyminfo(astring="")
98
+ rios = {
99
+ :stdio => RIO.stdio,
100
+ :stderr => RIO.stderr,
101
+ :strio => RIO.strio(astring),
102
+ :temp => RIO.temp,
103
+ :sysio => RIO.sysio($stdout),
104
+ :cmdio => RIO.cmdio('echo x'),
105
+ :fd => RIO.fd(1),
106
+ }
107
+ [rios,rinfo]
108
+ end
109
+ def mkrios_classmeth
110
+ rinfo = mksyminfo(astring="")
111
+ rios = {
112
+ :stdio => RIO::Rio.stdio,
113
+ :stderr => RIO::Rio.stderr,
114
+ :strio => RIO::Rio.strio(astring),
115
+ :temp => RIO::Rio.temp,
116
+ :sysio => RIO::Rio.sysio($stdout),
117
+ :cmdio => RIO::Rio.cmdio('echo x'),
118
+ :fd => RIO::Rio.fd(1),
119
+ }
120
+ [rios,rinfo]
121
+ end
122
+ def check_rios(rios,rinfo,fmt="%-12s %-12s %-8s %-8s %-20s %-20s\n")
123
+ #printf(fmt,'scheme','opaque','path','fspath','to_s','url')
124
+ rios.each do |k,r|
125
+ #pinfo(fmt,pathinfo(r))
126
+ assert_equal(rinfo[k][0],r.scheme)
127
+ assert_equal(rinfo[k][1],r.opaque)
128
+ assert_equal(rinfo[k][2],r.path)
129
+ assert_equal(rinfo[k][3],r.fspath)
130
+ assert_equal(rinfo[k][4],r.to_s)
131
+ assert_equal(rinfo[k][5],r.to_url)
132
+ end
133
+ end
134
+ def test_specialpaths
135
+ rios,rinfo = mkrios1()
136
+ check_rios(rios,rinfo)
137
+ end
138
+
139
+ def test_specialpaths_sym
140
+ rios,rinfo = mkrios_sym()
141
+ check_rios(rios,rinfo)
142
+ end
143
+ def test_specialpaths_modfunc
144
+ rios,rinfo = mkrios_modfunc()
145
+ check_rios(rios,rinfo)
146
+ end
147
+ def test_specialpaths_classmeth
148
+ rios,rinfo = mkrios_classmeth()
149
+ check_rios(rios,rinfo)
150
+ end
151
+
152
+ def mkrios_open()
153
+ require 'tempfile'
154
+ stdlib_temppath = ::Tempfile.new('rio').path
155
+ fnre = "#{@tmppath}(\\.)?\\d+\\.\\d+"
156
+ rinfo = {
157
+ ?- => ['stdout',/^$/,nil,nil,/^stdout:$/,/^stdout:$/],
158
+ ?? => ['file',%r|//#{fnre}|,%r|#{fnre}|,%r|#{fnre}|,/#{fnre}/,/#{fnre}/],
159
+ }
160
+ siopq = sprintf("0x%08x",$stdout.object_id)
161
+ rios = {
162
+ ?- => rio(?-).print("."),
163
+ ?? => rio(??).puts("hw"),
164
+ }
165
+ [rios,rinfo]
166
+ end
167
+ def test_specialpaths_open
168
+ fmt = "%-12s %-12s %-8s %-8s %-20s %-20s\n"
169
+ #printf(fmt,'scheme','opaque','path','fspath','to_s','url')
170
+ rios,rinfo = mkrios_open()
171
+ rios.each do |k,r|
172
+ #pinfo(fmt,pathinfo(r))
173
+ assert_equal(rinfo[k][0],r.scheme)
174
+ assert_match(rinfo[k][1],r.opaque)
175
+ assert_match(rinfo[k][4],r.to_s)
176
+ assert_match(rinfo[k][5],r.to_url)
177
+ end
178
+ assert_match(rinfo[??][2],rios[??].path)
179
+ assert_match(rinfo[??][3],rios[??].fspath)
180
+ end
181
+ end