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,50 @@
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 'test/unit'
8
+
9
+ class TC_RIO_copydest < Test::Unit::TestCase
10
+ def test_copydest
11
+ qp = RIO.rio('qp')
12
+ rio(qp,'test_copydest').rmtree.mkpath.chdir {
13
+ expary = ["Line0\n","Line1\n","Line2\n"]
14
+ line = expary.to_s
15
+ src = rio('src').print!(line)
16
+
17
+ ary = Array.new
18
+ $trace_states = false
19
+ rio('src') > ary
20
+ $trace_states = false
21
+ assert_equal(expary,ary)
22
+
23
+ rio('src') > ary
24
+ assert_equal(expary,ary)
25
+ rio('src') >> ary
26
+ assert_equal(expary+expary,ary)
27
+
28
+ a0 = ["Zippy0\n"]
29
+ rio('dst0') < a0
30
+ assert_equal(a0,rio('dst0').to_a)
31
+
32
+ a1 = ["Zippy1\n"]
33
+ rio('dst0') << a1
34
+ assert_equal(a0+a1,rio('dst0').to_a)
35
+ a2 = a0 + a1 + [ rio('src') ]
36
+ rio('dst2') < a2
37
+ assert_equal(a0+a1+expary,rio('dst2').to_a)
38
+ a3 = [ "Lastline\n" ]
39
+ rio('dst2') << a3
40
+ assert_equal(a0+a1+expary+a3,rio('dst2').to_a)
41
+
42
+ lA,lT,lZ = "lineA\n","ALineOfText\n","lineZ\n"
43
+
44
+ rio('src1').puts!(lT)
45
+ rio('src1') < [lT]
46
+ assert_equal([lT],rio('src1').to_a)
47
+
48
+ }
49
+ end
50
+ end
@@ -0,0 +1,166 @@
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_copydir < Test::RIO::TestCase
11
+ @@once = false
12
+ def self.once
13
+ @@once = true
14
+
15
+ rio('d0').rmtree.mkpath
16
+ rio('d0/d2').rmtree.mkpath
17
+ rio('d0/d3').rmtree.mkpath
18
+ rio('d0/d4').rmtree.mkpath
19
+ rio('d0/d2/d3').rmtree.mkpath
20
+ rio('d0/d2/d5').rmtree.mkpath
21
+ rio('d0/d3/d6').rmtree.mkpath
22
+ rio('d1').rmtree.mkpath
23
+ rio('d1/d8').rmtree.mkpath
24
+ make_lines_file(1,'d1/f0')
25
+ make_lines_file(2,'d1/f1')
26
+ make_lines_file(1,'d0/f0')
27
+ make_lines_file(2,'d0/f1')
28
+ make_lines_file(1,'d0/d2/f0')
29
+ make_lines_file(2,'d0/d2/f1')
30
+ make_lines_file(1,'d0/d3/d6/f0')
31
+ make_lines_file(2,'d0/d3/d6/f1')
32
+ end
33
+ def setup
34
+ super
35
+ self.class.once unless @@once
36
+
37
+ @d0 = rio('d0/')
38
+ @d1 = rio('d1/')
39
+ @d2 = rio('d0/d2/')
40
+ @f0 = rio('d0/f0')
41
+ @f1 = rio('d0/f1')
42
+ @f2 = rio('d0/d2/f2')
43
+ @f3 = rio('d0/d2/f3')
44
+ end
45
+ def assert_skel_equal(exp,d,msg="")
46
+ exp.each do |ent|
47
+ next unless ent.dir?
48
+ ds = rio(d,ent.filename)
49
+ assert(ds.exist?,"entry '#{ds}' exists")
50
+ assert_equal(ent.ftype,ds.ftype,"same ftype")
51
+ case
52
+ when ent.dir?
53
+ assert_skel_equal(ent,ds,"subdirectories are the same")
54
+ end
55
+ end
56
+ end
57
+ def test_basic
58
+ dst = rio('dst').delete!.mkpath
59
+ dst < @d0
60
+
61
+ assert_dirs_equal(@d0,rio(dst,@d0.filename),"basic copy")
62
+ end
63
+ def test_dirs_only
64
+ dst = rio('dirs_only').delete!.mkpath
65
+ dst < @d0.dirs
66
+ assert_skel_equal(@d0,rio(dst,@d0.filename),"copy dirs only")
67
+ end
68
+ def test_files_only
69
+ dst = rio('files_only').delete!.mkpath
70
+ src = rio(@d0).files
71
+ dst < src
72
+ exp = @d0.files[]
73
+ dd = rio(dst,@d0.filename)
74
+ ans = dd.map { |e| e.rel(dst) }
75
+ assert_array_equal(exp,ans,"copy files only")
76
+ end
77
+ def test_files_dirs
78
+ dst = rio('files_dirs').delete!.mkpath
79
+ src = rio(@d0).files.dirs
80
+ dst < src
81
+ assert_dirs_equal(@d0,rio(dst,@d0.filename),"copy files dirs")
82
+ end
83
+ def test_dirs_somefiles
84
+ dst = rio('dirs_somefiles').delete!
85
+ src = rio(@d0).files(/0/).dirs
86
+ #$trace_states = true
87
+ src > dst
88
+ $trace_states = false
89
+ ans = dst.all.map { |e| e.rel(dst) }
90
+ exp = rio(@d0).all.map { |e| e.rel(@d0) }.select { |e| e !~ /f[^0]$/ }
91
+ assert_array_equal(exp,ans,"dirs somefiles")
92
+
93
+ end
94
+ def test_somedirs_somefiles
95
+ dst = rio('somedirs_somefiles').delete!
96
+ src = rio(@d0).files(/0/).dirs('d[36]')
97
+ src > dst
98
+ ans = smap(dst.all[].map { |e| e.rel(dst) })
99
+ exp = %w[d3 d3/d6 d3/d6/f0 f0]
100
+ assert_array_equal(exp,ans)
101
+ end
102
+ def test_nonex_ri
103
+ dst = rio('nonex_ri').delete!
104
+ assert!(dst.exist?)
105
+ src = rio(@d1)
106
+ src > dst
107
+ assert_dirs_equal(src,dst,"nonex ri")
108
+ end
109
+ def test_nonex_le
110
+ dst = rio('nonex_le').delete!
111
+ assert!(dst.exist?)
112
+ src = rio(@d1)
113
+ dst < src
114
+ assert_dirs_equal(src,dst,"nonex le")
115
+ end
116
+ def test_files_a_dir
117
+ dst = rio('files_a_di').delete!.mkpath
118
+ dst < @d0.files[]
119
+ assert_array_equal(%w[f0 f1],dst.map { |el| el.rel(dst) })
120
+ end
121
+ def test_files_a_file
122
+ dst = rio('files_a_fi').delete!.touch
123
+ dst < @d0.files[]
124
+ exp = %w[f0 f1].inject([]) { |lines,f| lines + rio(@d0,f).readlines }
125
+ assert_equal(exp,dst.readlines)
126
+ end
127
+ def test_files_a_nonex
128
+ dst = rio('files_a_nonex').delete!
129
+ src = @d0[]
130
+ assert_kind_of(::Array,src)
131
+ dst < src
132
+ assert(dst.dir?)
133
+ assert_equal(smap(src.map { |el| el.rel(@d0) }),smap(dst.map { |el| el.rel(dst) }))
134
+ src.each do |el|
135
+ assert_rios_equal(el,rio(dst,el.filename))
136
+ end
137
+ assert_rios_equal(@d0,dst)
138
+ end
139
+ def test_files_a_nonex_files
140
+ dst = rio('files_a_nonex_files').delete!
141
+ src = @d0.files[]
142
+ assert_kind_of(::Array,src)
143
+ dst < src
144
+ assert(dst.dir?)
145
+ assert_equal(smap(src.map { |el| el.rel(@d0) }),smap(dst.map { |el| el.rel(dst) }))
146
+ src.each do |el|
147
+ assert_rios_equal(el,rio(dst,el.filename))
148
+ end
149
+ # assert_dirs_equal(src,dst,"array of files to nonex")
150
+ end
151
+ def test_files_a_nonex_lines
152
+ dst = rio('files_a_nonex_l').delete!
153
+ src = @d0.lines[]
154
+ assert_kind_of(::Array,src)
155
+ dst < src
156
+ assert(dst.file?)
157
+ assert_equal(src,dst.readlines)
158
+ end
159
+ def test_tofile
160
+ dst = rio('dst').delete!.touch
161
+ exp = ($mswin32 ? Errno::ENOENT : Errno::ENOTDIR)
162
+ assert_raise(exp) {
163
+ @d0 > dst
164
+ }
165
+ end
166
+ end
@@ -0,0 +1,121 @@
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_copydirlines < 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(3,'d1/f0')
24
+ make_lines_file(2,'d1/f1')
25
+ make_lines_file(3,'d0/f0')
26
+ make_lines_file(2,'d0/f1')
27
+ make_lines_file(3,'d0/d2/f0')
28
+ make_lines_file(2,'d0/d2/f1')
29
+ make_lines_file(3,'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_rios_equal(exp,ans,msg="")
59
+ case
60
+ when exp.file?
61
+ assert(ans.file?,"entry is a file")
62
+ assert_equal(exp.readlines,ans.readlines,"file has same contents")
63
+ when exp.dir?
64
+ assert(ans.dir?,"entry is a dir")
65
+ assert_dirs_equal(exp,ans,"directories are the same")
66
+ end
67
+ end
68
+ def assert_skel_equal(exp,d,msg="")
69
+ exp.each do |ent|
70
+ next unless ent.dir?
71
+ ds = rio(d,ent.filename)
72
+ assert(ds.exist?,"entry '#{ds}' exists")
73
+ assert_equal(ent.ftype,ds.ftype,"same ftype")
74
+ case
75
+ when ent.dir?
76
+ assert_skel_equal(ent,ds,"subdirectories are the same")
77
+ end
78
+ end
79
+ end
80
+ def ztest_basic
81
+ dst = rio('dst').delete!.mkpath
82
+ dst < @d0
83
+
84
+ assert_dirs_equal(@d0,rio(dst,@d0.filename),"basic copy")
85
+ end
86
+ def test_files
87
+ dst = rio('files').delete!.mkdir
88
+ src = rio(@d1).files.lines(0)
89
+ #$trace_states = true
90
+ src > dst
91
+ src.dup.files.each do |file|
92
+ assert_equal(file[0],rio(dst,file).to_a)
93
+ end
94
+ end
95
+ def test_files2
96
+ dst = rio('files').delete!.mkdir
97
+ src = rio(@d1).files.lines(0)
98
+ #$trace_states = true
99
+ dst < src
100
+ src.dup.files.each do |file|
101
+ assert_equal(file[0],rio(dst,file).to_a)
102
+ end
103
+ end
104
+ def test_array
105
+ src = rio(@d1).files.lines
106
+ exp = src.to_a
107
+ dst = []
108
+ src > dst
109
+ assert_equal(exp,dst)
110
+ src >> dst
111
+ assert_equal(exp+exp,dst)
112
+ end
113
+ def ztest_somedirs_somefiles
114
+ dst = rio('somedirs_somefiles').delete!
115
+ src = rio(@d0).files(/0/).dirs('d[36]')
116
+ src > dst
117
+ ans = smap(dst.all[].map { |e| e.rel(dst) })
118
+ exp = %w[d3 d3/d6 d3/d6/f0 f0]
119
+ assert_array_equal(exp,ans)
120
+ end
121
+ end
@@ -0,0 +1,46 @@
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_copylines < Test::RIO::TestCase
11
+ @@once = false
12
+ STR = 'peter piper picked a peck of pickled peppers'
13
+ WORDS = STR.split(/\s+/)
14
+ LINE = WORDS.map { |w| w+"\n" }.join('')
15
+ def self.once
16
+ @@once = true
17
+ src = rio('src').print!(LINE)
18
+ end
19
+ def setup
20
+ super
21
+ self.class.once unless @@once
22
+ end
23
+ def test_basic
24
+ out = rio(?")
25
+ rio('src').chomp.lines(/^[^p]/) > out
26
+ assert(out.closed?, "copy closed")
27
+
28
+ assert_equal('aof',out.contents)
29
+
30
+ out < rio('src').lines(/^[^p]/)
31
+ assert_equal("a\nof\n",out.contents)
32
+
33
+ aout = Array.new
34
+ rio('src').chomp.lines(1,4..6) > aout
35
+ assert_equal(%w{piper peck of pickled},aout)
36
+
37
+ out < rio('src').chomp.lines(0..1)
38
+ assert_equal("peterpiper",out.contents)
39
+
40
+ rio('src').chomp.lines(0..1) > aout
41
+ assert_equal(%w{peter piper},aout)
42
+
43
+ rio('src').chomp.lines(0..1) >> aout
44
+ assert_equal(%w{peter piper peter piper},aout)
45
+ end
46
+ end
@@ -0,0 +1,118 @@
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_copynonex < 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_rios_equal(exp,ans,msg="")
59
+ case
60
+ when exp.file?
61
+ assert(ans.file?,"entry is a file")
62
+ assert_equal(exp.readlines,ans.readlines,"file has same contents")
63
+ when exp.dir?
64
+ assert(ans.dir?,"entry is a dir")
65
+ assert_dirs_equal(exp,ans,"directories are the same")
66
+ end
67
+ end
68
+ def assert_skel_equal(exp,d,msg="")
69
+ exp.each do |ent|
70
+ next unless ent.dir?
71
+ ds = rio(d,ent.filename)
72
+ assert(ds.exist?,"entry '#{ds}' exists")
73
+ assert_equal(ent.ftype,ds.ftype,"same ftype")
74
+ case
75
+ when ent.dir?
76
+ assert_skel_equal(ent,ds,"subdirectories are the same")
77
+ end
78
+ end
79
+ end
80
+ def test_nonex_right_sel
81
+ dst = rio('nonex_ri_sel').delete!
82
+ assert!(dst.exist?)
83
+ src = rio(@d1)
84
+ src.files(/0/) > dst
85
+ p src,dst
86
+ # p smap(dst[])
87
+ # p smap(src.lines[0])
88
+ #assert_dirs_equal(src,dst,"nonex ri")
89
+ end
90
+ def test_nonex_right_dir
91
+ dst = rio('nonex_ri').delete!
92
+ assert!(dst.exist?)
93
+ src = rio(@d1)
94
+ src > dst
95
+ assert_dirs_equal(src,dst,"nonex ri")
96
+ end
97
+ def test_nonex_left_dir
98
+ dst = rio('nonex_le').delete!
99
+ assert!(dst.exist?)
100
+ src = rio(@d1)
101
+ dst < src
102
+ assert_dirs_equal(src,dst,"nonex le")
103
+ end
104
+ def test_nonex_right_file
105
+ dst = rio('nonex_ri_f').delete!
106
+ assert!(dst.exist?)
107
+ src = rio(@f1)
108
+ src > dst
109
+ assert_rios_equal(src,dst,"nonex ri")
110
+ end
111
+ def test_nonex_left_file
112
+ dst = rio('nonex_le_f').delete!
113
+ assert!(dst.exist?)
114
+ src = rio(@f1)
115
+ dst < src
116
+ assert_rios_equal(src,dst,"nonex le")
117
+ end
118
+ end