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
data/test/tc/base.rb ADDED
@@ -0,0 +1,31 @@
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_base < 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_basic
20
+ r = rio('zippy',{:base => '/'})
21
+ assert_equal('/zippy',r.abs.path)
22
+ end
23
+ def test_2args
24
+ r = rio('tmp','zippy',{:base => '/'})
25
+ assert_equal('/tmp/zippy',r.abs.path)
26
+ end
27
+ def test_longer_base
28
+ r = rio('zippy',{:base => '/tmp/'})
29
+ assert_equal('/tmp/zippy',r.abs.path)
30
+ end
31
+ end
data/test/tc/base2.rb ADDED
@@ -0,0 +1,87 @@
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_base2 < 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
+ @base_urls = {
19
+ 'abshttp' => 'http://localhost/riotest/dir/index.html',
20
+ 'rootdir' => '/rootdir/dir/',
21
+ 'reldir' => 'reldir/dir/',
22
+ }
23
+ @links = {
24
+ 'abshttp' => 'http://localhost/riotest/hw.html',
25
+ 'relfile' => '../hw.html',
26
+ 'absfile' => '/riotest/hw.html',
27
+ }
28
+ end
29
+
30
+ def test_abshttp_absfile
31
+ bk = 'abshttp'
32
+ lk = 'absfile'
33
+ b = @base_urls[bk]
34
+ l = @links[lk]
35
+ exp = [l,l,l,@links['abshttp'],l,b,@links['abshttp']]
36
+ run_case(bk,lk,exp)
37
+ end
38
+ def run_case(bk,lk,exp)
39
+ bs = @base_urls[bk]
40
+ ls = @links[lk]
41
+
42
+ [bs,URI(bs)].each do |b|
43
+ [ls,URI(ls),rio(ls)].each do |l|
44
+ u = rio(ls)
45
+ msg = mkmsg(bk,lk,b,l)
46
+ assert_equal(exp[0].to_s,u.to_s,msg)
47
+ assert_equal(exp[1].to_s,u.base.to_s,msg)
48
+ assert_equal(exp[2].to_s,u.abs.to_s,msg)
49
+ #p "run_case: b=#{b} abs=#{u.abs(b)}"
50
+ assert_equal(exp[3].to_s,u.abs(b).to_s,msg)
51
+ end
52
+ end
53
+
54
+
55
+ [bs,URI(bs)].each do |b|
56
+ [ls,URI(ls),rio(ls)].each do |l|
57
+ #p "b=#{b.inspect} l=#{l.inspect}"
58
+ u = rio(l,{:base => b})
59
+ msg = mkmsg(bk,lk,b,l)
60
+ assert_equal(exp[4].to_s,u.to_s,msg)
61
+ assert_equal(exp[5].to_s,u.base.to_s,msg)
62
+ assert_equal(exp[6].to_s,u.abs.to_s,msg)
63
+ end
64
+ end
65
+ end
66
+ def test_abshttp_relfile
67
+ bk = 'abshttp'
68
+ lk = 'relfile'
69
+ b = @base_urls[bk]
70
+ l = @links[lk]
71
+ wd = ::Dir.getwd+'/'
72
+ abs = ::Pathname.new(wd + l).cleanpath
73
+ exp = [l,wd,abs,@links['abshttp'],l,b,@links['abshttp']]
74
+ run_case(bk,lk,exp)
75
+ end
76
+ def test_abshttp_abshttp
77
+ bk = 'abshttp'
78
+ lk = 'abshttp'
79
+ b = @base_urls[bk]
80
+ l = @links[lk]
81
+ exp = [l,l,l,l,l,b,l]
82
+ run_case(bk,lk,exp)
83
+ end
84
+ def mkmsg(basekey,linkkey,base,link)
85
+ "Base[#{basekey}](#{base.class}) Link[#{linkkey}](#{link.class})"
86
+ end
87
+ end
data/test/tc/cd1.rb ADDED
@@ -0,0 +1,113 @@
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_cd1 < Test::RIO::TestCase
11
+ @@once = false
12
+ def self.once
13
+ @@once = true
14
+ rio('d0').rmtree.mkpath
15
+ rio('d0/d2').rmtree.mkpath
16
+ rio('d0/d3').rmtree.mkpath
17
+ rio('d0/d4').rmtree.mkpath
18
+ rio('d0/d2/d3').rmtree.mkpath
19
+ rio('d0/d2/d5').rmtree.mkpath
20
+ rio('d0/d3/d6').rmtree.mkpath
21
+ rio('d1').rmtree.mkpath
22
+ rio('d1/d8').rmtree.mkpath
23
+ make_lines_file(1,'d1/f0')
24
+ make_lines_file(2,'d1/f1')
25
+ make_lines_file(1,'d0/f0')
26
+ make_lines_file(2,'d0/f1')
27
+ make_lines_file(1,'d0/d2/f0')
28
+ make_lines_file(2,'d0/d2/f1')
29
+ make_lines_file(1,'d0/d3/d6/f0')
30
+ make_lines_file(2,'d0/d3/d6/f1')
31
+ end
32
+ def setup
33
+ super
34
+ self.class.once unless @@once
35
+
36
+ @d0 = rio('d0')
37
+ @d1 = rio('d1')
38
+ @d2 = rio('d0/d2')
39
+ @f0 = rio('d0/f0')
40
+ @f1 = rio('d0/f1')
41
+ @f2 = rio('d0/d2/f2')
42
+ @f3 = rio('d0/d2/f3')
43
+ end
44
+ def assert_dirs_equal(exp,d,msg="")
45
+ exp.each do |ent|
46
+ ds = rio(d,ent.filename)
47
+ assert(ds.exist?,"entry '#{ds}' exists")
48
+ assert_equal(ent.ftype,ds.ftype,"same ftype")
49
+ case
50
+ when ent.file?
51
+ assert(ds.file?,"entry is a file")
52
+ assert_equal(ent[],ds[],"file has same contents")
53
+ when ent.dir?
54
+ assert_dirs_equal(ent,ds,"subdirectories are the same")
55
+ end
56
+ end
57
+ end
58
+ def assert_skel_equal(exp,d,msg="")
59
+ exp.each do |ent|
60
+ next unless ent.dir?
61
+ ds = rio(d,ent.filename)
62
+ assert(ds.exist?,"entry '#{ds}' exists")
63
+ assert_equal(ent.ftype,ds.ftype,"same ftype")
64
+ case
65
+ when ent.dir?
66
+ assert_skel_equal(ent,ds,"subdirectories are the same")
67
+ end
68
+ end
69
+ end
70
+ def test_d2a
71
+ src = rio(@d1)
72
+ dst = []
73
+ # dst < src
74
+ #$trace_states = true
75
+ src > dst
76
+ $trace_states = false
77
+ p smap(src[])
78
+ p smap(dst.inspect)
79
+
80
+ end
81
+ def test_d2b
82
+ src = rio(@d1)
83
+ dst = []
84
+ # dst < src
85
+ #$trace_states = true
86
+ src.each do |e|
87
+ dst << e
88
+ end
89
+ $trace_states = false
90
+ p smap(src[])
91
+ p smap(dst.inspect)
92
+
93
+ end
94
+ def a0test_nonex
95
+ dst = rio('nonex').delete!
96
+ assert!(dst.exist?)
97
+ src = rio(@d1)
98
+ # dst < src
99
+ #$trace_states = true
100
+ src > dst
101
+ $trace_states = false
102
+ # p smap(dst.all[].map { |e| e.rel(dst) })
103
+ #p smap(src.all[])
104
+ #p smap(dst.all[])
105
+ # assert_dirs_equal(@d0,rio(dst,@d0.filename),"basic copy")
106
+ # exp = @d0.files[]
107
+ # dd = rio(dst,@d0.filename)
108
+ # ans = dd.map { |e| e.rel(dst) }
109
+ # p smap(exp)
110
+ # p smap(ans)
111
+ # assert_array_equal(exp,ans,"copy files only")
112
+ end
113
+ 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_clearsel < Test::Unit::TestCase
12
+ def tdir() rio(%w/qp clearsel/) end
13
+ def assert!(a,msg="negative assertion")
14
+ assert((!(a)),msg)
15
+ end
16
+ def smap(a) a.map { |el| el.to_s } 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_basic
37
+ rio('a').delete!.mkpath.chdir
38
+
39
+ file = mkalinesfile(8,'f1')
40
+ lines = file[]
41
+ cmnt_range = (2..4)
42
+ cmnt_range.each do |n|
43
+ lines[n] = '#' + lines[n]
44
+ end
45
+ (0..3).each do |n|
46
+ lines[n].sub!(/f1/,'f2')
47
+ end
48
+ file < lines
49
+
50
+ f0 = file.dup
51
+ begin
52
+ exp = lines[cmnt_range]
53
+ ans = f0.lines[/^\s*#/]
54
+ assert_equal(exp,ans)
55
+ ans = f0[0]
56
+ assert_equal(lines[0..0],f0[0])
57
+ assert_equal(lines,f0[])
58
+ assert_equal(lines[1..2],f0[1..2])
59
+ assert_equal(lines,f0.lines(1..2)[])
60
+ assert_equal(lines[4..4],f0.lines(1..2)[4])
61
+
62
+ end
63
+
64
+
65
+ file.close
66
+ rio('..').chdir
67
+ end
68
+ end
data/test/tc/clone.rb ADDED
@@ -0,0 +1,208 @@
1
+ #!/usr/local/bin/ruby
2
+ if $0 == __FILE__
3
+ Dir.chdir File.dirname(__FILE__)+'/../'
4
+ $:.unshift File.expand_path('../lib/')
5
+ end
6
+ require 'rio'
7
+ require 'tc/testcase'
8
+
9
+ class TC_clone < Test::RIO::TestCase
10
+ @@once = false
11
+ def self.once
12
+ @@once = true
13
+ end
14
+ def setup
15
+ super
16
+ self.class.once unless @@once
17
+ @lines = (0..8).map { |n| "Line#{n}" }
18
+ @chlines = @lines.map{|el| el.chomp}
19
+ ::File.open('lines1','w') do |f|
20
+ @lines.each do |li|
21
+ f.puts(li)
22
+ end
23
+ end
24
+ ::File.open('lines2','w') do |f|
25
+ @lines.each do |li|
26
+ f.puts(li)
27
+ end
28
+ end
29
+ @lines = rio('lines1').to_a
30
+ end
31
+
32
+
33
+ def check_clone(ios)
34
+ oexp = []
35
+ cexp = []
36
+
37
+ oexp << ios.gets
38
+ ioc = ios.clone
39
+
40
+ cexp << ioc.gets
41
+ oexp << ios.gets
42
+ while ans = ioc.gets
43
+ cexp << ans
44
+ end
45
+
46
+ while ans = ios.gets
47
+ oexp << ans
48
+ end
49
+ return ioc,oexp,cexp
50
+ end
51
+
52
+ def check_dup(ios)
53
+ oexp = []
54
+ cexp = []
55
+
56
+ oexp << ios.gets
57
+ ioc = ios.dup
58
+ assert_not_nil(ioc,"dup returns nil")
59
+ cexp << ioc.gets
60
+ oexp << ios.gets
61
+ while ans = ioc.gets
62
+ cexp << ans
63
+ end
64
+
65
+ while ans = ios.gets
66
+ oexp << ans
67
+ end
68
+ return ioc,oexp,cexp
69
+ end
70
+
71
+ def check_clone_close(ios,ioc)
72
+ assert!(ios.closed?,"original not closed")
73
+ assert!(ioc.closed?,"clone not closed")
74
+ ioc.close
75
+ assert(ioc.closed?,"clone closed?")
76
+ assert!(ios.closed?," orignal still not closed?")
77
+ ios.close
78
+ assert(ios.closed?,"now original closed")
79
+ end
80
+
81
+ def check_dup_close(ios,ioc)
82
+ assert!(ios.closed?,"original not closed")
83
+ assert(ioc.closed?,"dup closed")
84
+ ios.close
85
+ assert(ios.closed?,"now original closed")
86
+ end
87
+
88
+ def test_clone_closes_like_IO
89
+ ios = ::File.open('lines1')
90
+ ioc,oexp,cexp = check_clone(ios)
91
+ check_clone_close(ios,ioc)
92
+ ioc.close unless ioc.closed?
93
+ ios.close unless ios.closed?
94
+
95
+ ario = rio('lines1').nocloseoneof
96
+ crio,oans,cans = check_clone(ario)
97
+ assert_equal(oexp,oans)
98
+ assert_equal(cexp,cans)
99
+ check_clone_close(ario,crio)
100
+
101
+ end
102
+
103
+ def test_dup_doesnt_close_like_IO
104
+
105
+ ios = ::File.open('lines1')
106
+ ioc,oexp,cexp = check_dup(ios)
107
+ check_clone_close(ios,ioc)
108
+ ario = rio('lines1').nocloseoneof
109
+ crio,oans,cans = check_dup(ario)
110
+ assert_equal(@lines,oans)
111
+ assert_equal(@lines,cans)
112
+ check_dup_close(ario,crio)
113
+
114
+ end
115
+
116
+ def test_clone_own_context
117
+
118
+ assert(rio.closeoncopy?,"closeoncopy is on")
119
+ assert!(rio.nocloseoncopy.closeoncopy?,"nocloseoncopy is off")
120
+ assert!(rio.chomp?,"chomp is off")
121
+ chomper = rio.chomp
122
+ assert(chomper.chomp?,"chomp is on")
123
+ cl = chomper.clone
124
+ assert(cl.chomp?,"cloned chomp is on")
125
+ cl.nochomp
126
+ assert!(cl.chomp?,"cloned chomp is off")
127
+ assert(chomper.chomp?,"original chomp is still on")
128
+
129
+ chomper.join!('lines1')
130
+ ans = chomper.to_a
131
+ assert_equal(@chlines,ans)
132
+
133
+ cl.join!('lines1')
134
+ ans = cl.to_a
135
+ assert_equal(@lines,ans)
136
+
137
+ end
138
+ def test_read_moves_pos_like_IO
139
+ #$trace_states = true
140
+ fnio = ::File.open('lines1')
141
+ frio = rio('lines2')
142
+ assert_equal(fnio.pos,frio.pos)
143
+
144
+ nrec = fnio.gets
145
+ rrec = frio.gets
146
+ assert_equal(nrec,rrec)
147
+ assert_equal(fnio.pos,frio.pos)
148
+
149
+ cfnio = fnio.clone
150
+ cfrio = frio.clone
151
+ assert_equal(cfnio.pos,cfrio.pos)
152
+ assert_equal(fnio.pos,frio.pos)
153
+ nrec = cfnio.gets
154
+ rrec = cfrio.gets
155
+ assert_equal(nrec,rrec)
156
+ assert_equal(cfnio.pos,cfrio.pos)
157
+ assert_equal(fnio.pos,frio.pos)
158
+
159
+ nrec = cfnio.gets
160
+ rrec = cfrio.gets
161
+
162
+ assert_equal(nrec,rrec)
163
+ assert_equal(cfnio.pos,cfrio.pos)
164
+ assert_equal(fnio.pos,frio.pos)
165
+
166
+ nrec = fnio.gets
167
+ rrec = frio.gets
168
+ assert_equal(nrec,rrec)
169
+ #assert_equal(fnio.pos,frio.pos)
170
+
171
+ end
172
+
173
+ def test_clone_read_ruby
174
+
175
+ #$trace_states = true
176
+ afile = ::File.open('lines1')
177
+ arec = afile.gets
178
+ assert_equal(@lines[0],arec)
179
+ cfile = afile.dup
180
+ #p "POS: a(#{afile.pos}) c(#{cfile.pos})"
181
+ crec = cfile.gets
182
+ #p "crec=#{crec} POS: a(#{afile.pos}) cfile(#{cfile.pos})"
183
+ afile.close
184
+ end
185
+ def test_clone_read
186
+ #return unless $supports_symlink
187
+ ario = rio('lines1')
188
+ arec = ario.getrec
189
+ assert_equal(@lines[0],arec)
190
+ crio = ario.clone.chomp
191
+ #p "POS: ario(#{ario.pos}) crio(#{crio.pos})"
192
+ crec = crio.getrec
193
+ #p "crec=#{crec} POS: ario(#{ario.pos}) crio(#{crio.pos})"
194
+
195
+ assert_equal(@chlines[1],crec)
196
+
197
+ arec = ario.getrec
198
+ cremaining = crio.to_a
199
+
200
+ assert_equal(@chlines[2...@lines.size],cremaining)
201
+ #p "#{crio.eof?} #{crio.closed?}"
202
+ #$trace_states = true
203
+ assert(crio.eof?,"clone eof?") unless crio.closed?
204
+ assert(crio.closed?,"clone closed?")
205
+
206
+ end
207
+
208
+ end