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/lineno.rb ADDED
@@ -0,0 +1,196 @@
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_lineno < 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 lineno/) 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 ztest_lineno_0
37
+ rio('lineno').delete!.mkpath.chdir
38
+
39
+ file = mkalinesfile(10,'f0')
40
+ lines = file[]
41
+
42
+ pos = file.pos
43
+ lnum = file.lineno
44
+ line = file.readline
45
+ p "pos=#{pos}, lnum=#{lnum}, line=#{line}"
46
+
47
+ pos = file.pos
48
+ lnum = file.lineno
49
+ line = file.readline
50
+ p "pos=#{pos}, lnum=#{lnum}, line=#{line}"
51
+
52
+
53
+ file.close
54
+ rio('..').chdir
55
+ end
56
+ # baoo code 4153
57
+
58
+ def test_lineno_like_IO
59
+ rio('lineno').delete!.mkpath.chdir
60
+
61
+ frio = mkalinesfile(5,'frio')
62
+ rio('fruby') < frio
63
+
64
+ fruby = File.open('fruby');
65
+
66
+ assert_equal(fruby.pos,frio.pos)
67
+ assert_equal(fruby.lineno,frio.lineno)
68
+ assert_equal(line = fruby.readline,frio.readline)
69
+
70
+ assert_equal(fruby.pos,frio.pos)
71
+ assert_equal(fruby.lineno,frio.lineno)
72
+ assert_equal(line = fruby.readline,frio.readline)
73
+
74
+ fruby.pos += line.length
75
+ frio.pos += line.length
76
+
77
+ assert_equal(fruby.pos,frio.pos)
78
+ assert_equal(fruby.lineno,frio.lineno)
79
+ assert_equal(line = fruby.readline,frio.readline)
80
+
81
+
82
+ $trace_states = false
83
+ fruby.close
84
+ frio.close
85
+
86
+ fruby = File.open('fruby');
87
+ frio = rio('frio')
88
+
89
+ p fruby.lineno
90
+ fruby.each { |rec|
91
+ p "#{fruby.lineno} >> #{rec}"
92
+ }
93
+
94
+ p frio.lineno
95
+ frio.each { |rec|
96
+ p "#{frio.lineno} >> #{rec}"
97
+ }
98
+ frio.close
99
+ p "RECNO"
100
+ $trace_states = true
101
+
102
+ frio = rio('frio')
103
+ p frio.recno
104
+ frio.each { |rec|
105
+ p "#{frio.recno} >> #{rec}"
106
+ }
107
+ $trace_states = false
108
+ frio.close
109
+
110
+ # fruby.close
111
+ # p fruby.lineno
112
+
113
+ rio('..').chdir
114
+
115
+
116
+
117
+
118
+ end
119
+
120
+
121
+
122
+
123
+
124
+ def test_lineno
125
+ rio('lineno').delete!.mkpath.chdir
126
+
127
+ file = mkalinesfile(10,'f1')
128
+ lines = file[]
129
+
130
+ # $trace_states = true
131
+ file = rio('f1')
132
+
133
+ assert_equal(0,file.lineno)
134
+ assert_equal(lines[0],file.readline)
135
+ assert_equal(1,file.lineno)
136
+
137
+ assert_equal(lines[1],file.readline)
138
+ # p file.recno
139
+
140
+
141
+ $trace_states = false
142
+ file.close
143
+ rio('..').chdir
144
+ end
145
+
146
+ def test_recno
147
+ rio('recno').delete!.mkpath.chdir
148
+
149
+ file = mkalinesfile(3,'f0')
150
+ lines = file[]
151
+
152
+ $trace_states = false
153
+ file = rio('f0')
154
+ p file.recno
155
+ file.each { |rec|
156
+ p "#{file.recno} >> #{rec}"
157
+ }
158
+
159
+
160
+
161
+
162
+
163
+ file.close
164
+
165
+
166
+
167
+
168
+ $trace_states = false
169
+ file.close
170
+ rio('..').chdir
171
+ end
172
+
173
+ def test_eof
174
+ rio('lineno').delete!.mkpath.chdir
175
+
176
+ file = mkalinesfile(3,'f0')
177
+ file > (lines = [])
178
+ $trace_states = false
179
+ file = rio('f0')
180
+ p file.eof?
181
+
182
+
183
+ $trace_states = false
184
+ # assert(file.file?)
185
+ # assert(link.file?)
186
+ # assert(link.symlink?)
187
+
188
+ # assert_equal(file.stat.size,link.stat.size)
189
+ # assert_not_equal(file.stat.size,link.lstat.size)
190
+ # assert_raise(RIO::Exception::CantHandle) {
191
+ # file.lstat
192
+ # }
193
+
194
+ rio('..').chdir
195
+ end
196
+ end
data/test/tc/lines.rb ADDED
@@ -0,0 +1,66 @@
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
+ require 'test/unit/testsuite'
9
+
10
+ class TC_RIO_lines < Test::Unit::TestCase
11
+ def test_basic
12
+ qp = rio('qp')
13
+
14
+ rio(qp,'test_lines').rmtree.mkpath.chdir {
15
+
16
+ f = rio('basic.txt')
17
+ 0.upto(6) do |n|
18
+ f.puts("L#{n}: #{n*3}:#{n*2}")
19
+ end
20
+ f.puts!("Line Z")
21
+
22
+ expa = ["L0: 0:0\n", "L1: 3:2\n", "L2: 6:4\n", "L3: 9:6\n", "L4: 12:8\n", "L5: 15:10\n", "L6: 18:12\n",
23
+ "Line Z\n"]
24
+
25
+ ans = []
26
+
27
+ rio('basic.txt').lines { |line| ans.push(line) }
28
+ assert_equal(expa,ans)
29
+ ans.clear
30
+
31
+ rio('basic.txt').lines.each { |line| ans.push(line) }
32
+ assert_equal(expa,ans)
33
+ ans.clear
34
+
35
+ rio('basic.txt').each { |line| ans.push(line) }
36
+ assert_equal(expa,ans)
37
+ ans.clear
38
+
39
+ # proxy of IO#each_line -- lines() is ignored
40
+ rio('basic.txt').each_line { |line| ans.push(line) }
41
+ assert_equal(expa,ans)
42
+ ans.clear
43
+
44
+ assert_equal(expa,rio('basic.txt').lines.to_a)
45
+ assert_equal(expa,rio('basic.txt').to_a)
46
+
47
+
48
+ expa = ["L1: 3:2\n", "L2: 6:4\n", "L4: 12:8\n", "L6: 18:12\n"]
49
+ assert_equal(expa,rio('basic.txt').lines(/2/).to_a)
50
+
51
+ expa = ["L0: 0:0\nL1: 3:2\nL2: 6:4\nL3: 9:6\n", "L4: 12:8\nL5: 15:10\nL6: 18:12\nLin", "e Z\n"]
52
+ assert_equal(expa,rio('basic.txt').bytes(32).to_a)
53
+
54
+ # expa = [["15", "10"], ["18", "12"]]
55
+ # assert_equal(expa,rio('basic.txt').lines(/(\d\d):(\d\d)/).to_a)
56
+
57
+ # ans = []
58
+ # rio('basic.txt').lines(/(\d\d):(\d\d)/) { |ary|
59
+ # ans.push(ary)
60
+ # }
61
+ # assert_equal(expa,ans)
62
+ }
63
+ end
64
+
65
+ end
66
+
data/test/tc/misc.rb ADDED
@@ -0,0 +1,432 @@
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
+ #require 'dev-utils/debug'
9
+
10
+ #require 'tc_myfirsttests'
11
+ #require 'tc_moretestsbyme'
12
+ #require 'ts_anothersetoftests'
13
+
14
+ class TC_RIO_misc < Test::Unit::TestCase
15
+ def rio(*args) RIO.rio(*args) end
16
+ def rootrio(*args) RIO.root(*args) end
17
+ def ttdir() RIO.rio('qp').mkpath end
18
+ def assert_equal_s(a,b) assert_equal(a.to_s,b.to_s) end
19
+
20
+ def test_iomodes
21
+ exp = (0..5).to_a.map { |n| "Line #{n}" }
22
+ f = rio('qp/rwlines.txt').chomp
23
+ 0.upto(4) do |n|
24
+ f.puts("Line #{n}")
25
+ end
26
+ got = f.a.puts("Line 5").readlines
27
+ assert_equal(exp,got)
28
+
29
+ f = rio('qp/rwlines.txt').mode('w')
30
+ 0.upto(4) { |n| f.puts("Line #{n}") }
31
+ assert_raise(IOError) {
32
+ f.readlines
33
+ }
34
+
35
+ f = rio('qp/rwlines.txt').a
36
+ assert_equal_s('a',f.outputmode?)
37
+ f.puts("Line 0\n\n")
38
+ # assert_match(/Output$/,.handled_by)
39
+ assert_equal_s('a',f.mode?)
40
+ assert_equal("Line 0\n",f.rewind.gets);
41
+ assert_equal_s('r',f.mode?)
42
+ # assert_match(/Input$/,f.handled_by)
43
+
44
+ f = rio('qp/rwlines.txt').a!
45
+ assert_equal_s('a+',f.outputmode?)
46
+ f.puts("Line 0\n\n")
47
+ # assert_match(/InOut$/,f.puts("Line 0\n\n").handled_by)
48
+ assert_equal_s('a+',f.mode?)
49
+ assert_equal("Line 0\n",f.rewind.gets);
50
+ assert_equal_s('a+',f.mode?)
51
+ # assert_match(/InOut$/,f.handled_by)
52
+
53
+ f = rio('qp/rwlines.txt').w
54
+ assert_equal_s('w',f.outputmode?)
55
+ f.puts("Line 0\n\n")
56
+ # assert_match(/Output$/,f.puts("Line 0\n\n").handled_by)
57
+ assert_equal_s('w',f.mode?)
58
+ assert_equal("Line 0\n",f.rewind.gets);
59
+ assert_equal_s('r',f.mode?)
60
+ # assert_match(/Input$/,f.handled_by)
61
+
62
+ f = rio('qp/rwlines.txt').w!
63
+ assert_equal_s('w+',f.outputmode?)
64
+ f.puts("Line 0").puts("Line 1")
65
+ # assert_match(/InOut$/,f.puts("Line 0").puts("Line 1").handled_by)
66
+ assert_equal_s('w+',f.mode?)
67
+ assert_equal("Line 0\n",f.rewind.gets);
68
+ assert_equal_s('w+',f.mode?)
69
+ # assert_match(/InOut$/,f.handled_by)
70
+
71
+ f = rio('qp/rwlines.txt').r
72
+ assert_equal_s('r',f.inputmode?)
73
+ f.puts("Line 0").puts("Line 1")
74
+ # assert_match(/Output$/,f.puts("Line 0").puts("Line 1").handled_by)
75
+ assert_equal_s('w',f.mode?)
76
+ assert_equal("Line 0\n",f.rewind.gets);
77
+ assert_equal_s('r',f.mode?)
78
+ # assert_match(/Input$/,f.handled_by)
79
+
80
+ f = rio('qp/rwlines.txt').r!
81
+ assert_equal_s('r+',f.inputmode?)
82
+ f.puts("Line 0").puts("Line 1")
83
+ # assert_match(/InOut$/,f.puts("Line 0").puts("Line 1").handled_by)
84
+ assert_equal_s('r+',f.mode?)
85
+ assert_equal("Line 0\n",f.rewind.gets);
86
+ # assert_match(/InOut$/,f.handled_by)
87
+ assert_equal_s('r+',f.mode?)
88
+
89
+
90
+ end
91
+
92
+ def test_readwrite
93
+ require 'rio'
94
+ tdir = rio(%w/qp test_readwrite/)
95
+ tdir.rmtree.mkpath.chdir {
96
+ exp = (0..5).to_a.map { |n| "Line #{n}" }
97
+
98
+ f = rio('rwlines.txt').chomp
99
+ 0.upto(4) { |n| f.puts("Line #{n}") }
100
+ got = f.a.puts("Line 5").readlines
101
+ assert_equal(exp,got)
102
+
103
+
104
+ f = rio('rwlines.txt').a
105
+ assert_equal_s('a',f.outputmode?)
106
+ f.puts("Line 0\n\n")
107
+ # assert_match(/Output$/,f.puts("Line 0\n\n").handled_by)
108
+ assert_equal_s('a',f.mode?)
109
+ assert_equal("Line 0\n",f.rewind.gets);
110
+ assert_equal_s('r',f.mode?)
111
+ # assert_match(/Input$/,f.handled_by)
112
+
113
+ f = rio('rwlines.txt').a!
114
+ assert_equal_s('a+',f.outputmode?)
115
+ f.puts("Line 0\n\n")
116
+ # assert_match(/InOut$/,f.puts("Line 0\n\n").handled_by)
117
+ assert_equal_s('a+',f.mode?)
118
+ assert_equal("Line 0\n",f.rewind.gets);
119
+ assert_equal_s('a+',f.mode?)
120
+ # assert_match(/InOut$/,f.handled_by)
121
+
122
+ f = rio('rwlines.txt').w
123
+ assert_equal_s('w',f.outputmode?)
124
+ f.puts("Line 0\n\n")
125
+ # assert_match(/Output$/,f.puts("Line 0\n\n").handled_by)
126
+ assert_equal_s('w',f.mode?)
127
+ assert_equal("Line 0\n",f.rewind.gets);
128
+ assert_equal_s('r',f.mode?)
129
+ # assert_match(/Input$/,f.handled_by)
130
+
131
+ f = rio('rwlines.txt').w!
132
+ assert_equal_s('w+',f.outputmode?)
133
+ f.puts("Line 0").puts("Line 1")
134
+ # assert_match(/InOut$/,f.puts("Line 0").puts("Line 1").handled_by)
135
+ assert_equal_s('w+',f.mode?)
136
+ assert_equal("Line 0\n",f.rewind.gets);
137
+ assert_equal_s('w+',f.mode?)
138
+ # assert_match(/InOut$/,f.handled_by)
139
+
140
+ f = rio('rwlines.txt').r
141
+ assert_equal_s('r',f.inputmode?)
142
+ f.puts("Line 0").puts("Line 1")
143
+ # assert_match(/Output$/,f.puts("Line 0").puts("Line 1").handled_by)
144
+ assert_equal_s('w',f.mode?)
145
+ assert_equal("Line 0\n",f.rewind.gets);
146
+ assert_equal_s('r',f.mode?)
147
+ # assert_match(/Input$/,f.handled_by)
148
+
149
+ f = rio('rwlines.txt').r!
150
+ assert_equal_s('r+',f.inputmode?)
151
+ f.puts("Line 0").puts("Line 1")
152
+ # assert_match(/InOut$/,f.puts("Line 0").puts("Line 1").handled_by)
153
+ assert_equal_s('r+',f.mode?)
154
+ assert_equal("Line 0\n",f.rewind.gets);
155
+ # assert_match(/InOut$/,f.handled_by)
156
+ assert_equal_s('r+',f.mode?)
157
+ }
158
+ end
159
+ def test_copy2
160
+ require 'rio'
161
+ tdir = rio(%w/qp test_copy2/)
162
+ tdir.rmtree.mkpath.chdir {
163
+ txt = "Hello f1.txt"
164
+ o = rio('o').puts(txt).close
165
+ oslurp = o.contents
166
+
167
+ n = rio('n')
168
+ o.copy_to(n)
169
+ assert_equal(oslurp,n.contents)
170
+
171
+ d = rio('d1').rmtree.mkpath
172
+ n = rio(d,'o')
173
+ o.copy_to(d)
174
+ assert_equal(oslurp,n.contents)
175
+
176
+ # d = rio('d2').rmtree
177
+ # n = rio(d,'o')
178
+ # assert_raise(::RIO::Exception::Copy) {
179
+ # o.copy_to(n)
180
+ # }
181
+
182
+
183
+ d = rio('d3').rmtree.mkpath
184
+ n = rio(d,'o').touch
185
+ o.copy_to(d)
186
+ assert_equal(oslurp,n.contents)
187
+
188
+
189
+ return unless $supports_symlink
190
+ d = rio('d5').rmtree.mkpath
191
+ q = rio(d,'qf').touch
192
+ d.chdir {
193
+ rio('qf').symlink('o')
194
+ }
195
+ n = rio(d,'o')
196
+ o.copy_to(d)
197
+ assert_equal(oslurp,n.contents)
198
+
199
+ d = rio('d6').rmtree.mkpath
200
+ q = rio(d,'qd').mkdir
201
+ d.chdir {
202
+ rio('qd').symlink('o')
203
+ }
204
+ n = rio(d,'o')
205
+
206
+
207
+
208
+
209
+ }
210
+ end
211
+ def smap(a) a.map { |el| el.to_s } end
212
+ def emap(d,a)
213
+ exp = a.map { |f| File.join(d,f) }.sort
214
+ end
215
+ def gmap(io)
216
+ smap(io.to_a).sort
217
+ end
218
+
219
+ def test_find
220
+ s_dir = 'qp/test_find'
221
+ dir = RIO.cwd(s_dir).rmtree.mkpath
222
+ f1 = RIO.rio(dir,'f1.txt').puts("This is f1")
223
+ f2 = RIO.rio(dir,'f2.txt').puts("This is f2")
224
+ d2 = RIO.rio(dir,'d1','d2').mkpath
225
+ f3 = RIO.rio(dir,'d1','f3.txt').puts("This is f3")
226
+ f4 = d2.join('f4.emp').touch
227
+
228
+ io = rio(s_dir)
229
+ exp = %w{f1.txt f2.txt d1}
230
+ assert_equal(emap(s_dir,exp), gmap(io))
231
+
232
+ io = rio(s_dir).files('*.txt')
233
+ exp = %w{f1.txt f2.txt}
234
+ assert_equal(emap(s_dir,exp), gmap(io))
235
+
236
+ io = rio(s_dir).dirs
237
+ exp = %w{d1}
238
+ assert_equal(emap(s_dir,exp), gmap(io))
239
+
240
+ io = rio(s_dir).all.dirs
241
+ exp = %w{d1 d1/d2}
242
+ assert_equal(emap(s_dir,exp), gmap(io))
243
+
244
+ io = rio(s_dir).all.dirs("*2")
245
+ exp = %w{d1/d2}
246
+ assert_equal(emap(s_dir,exp), gmap(io))
247
+
248
+ io = rio(s_dir).all.files("*.emp")
249
+ exp = %w{d1/d2/f4.emp}
250
+ assert_equal(emap(s_dir,exp), gmap(io))
251
+
252
+
253
+
254
+
255
+ end
256
+ def test_mkdir
257
+ datadir = rio('qp/test_mkdir').rmtree.mkpath
258
+ dir2 = rio(datadir,'dir2').rmtree.mkpath
259
+ dir2 = rio(datadir,'dir2').rmtree.mkpath
260
+ # sd1 > dir2
261
+ # oline = rio(datadir,'dir1/sd1/f1.txt').readline
262
+ # nline = rio(datadir,'dir2/sd1/f1.txt').readline
263
+ # assert_equal(oline,nline)
264
+
265
+ # dir2 = rio(datadir,'dir2').rmtree.mkpath
266
+ # dir2 < sd1
267
+ # oline = rio(datadir,'dir1/sd1/f1.txt').readline
268
+ # nline = rio(datadir,'dir2/sd1/f1.txt').readline
269
+ # assert_equal(oline,nline)
270
+
271
+ end
272
+ def test_specialio
273
+ tdir = rio(ttdir,'test_specialio').rmtree.mkpath
274
+ msg = "Hello File\n"
275
+ fname = 'f.txt'
276
+ rio(tdir,fname).puts(msg).close
277
+ str = rio(tdir,fname).readline
278
+ assert_equal(msg,str)
279
+
280
+ # require 'open3'
281
+
282
+ # IO.popen("-") {|f|
283
+ # if f.nil?
284
+ # rio(?-).puts('Hello Stdout')
285
+ # else
286
+ # assert_equal("Hello Stdout\n",f.gets)
287
+ # end
288
+ # }
289
+
290
+ # For some reason the use of popen3 stopped working FIXME
291
+ # stdin,stdout,stderr = Open3.popen3(%q~ruby -e "require 'rio';rio(?=).puts('Hello Stderr')"~)
292
+ #errput = stderr.gets
293
+ #assert_equal("Hello Stderr\n",errput)
294
+
295
+ smsg = str.sub(/File/,'StringIO')
296
+ srio = rio(?$).print(smsg)
297
+ assert_equal(smsg,srio.string)
298
+ # lines = rio('?').mode('w+').puts(str.sub(/File/,'Tempfile')).readlines
299
+
300
+ end
301
+
302
+ def test_copy
303
+ require 'rio'
304
+ datadir = rio('qp/test_copy').rmtree.mkpath
305
+ inline = "Source Stuff\n"
306
+ src = rio(datadir,'src')
307
+ src.print(inline)
308
+ src.close
309
+ src = rio(datadir,'src')
310
+ dst1 = rio(datadir,'dst1')
311
+ src.copy_to(dst1)
312
+ dst2 = rio(datadir,'dst2').mkdir
313
+ src.copy_to(dst2)
314
+ sline = rio(datadir,'src').readline
315
+ l1 = rio(datadir,'dst1').readline
316
+ l2 = rio(datadir,'dst2/src').readline
317
+ assert_equal(inline,sline)
318
+ assert_equal(inline,l1)
319
+ assert_equal(inline,l2)
320
+
321
+ # copy directories
322
+ sd1 = rio(datadir,'dir1/sd1').rmtree.mkpath
323
+ txt = "Hello f1.txt"
324
+ sd1.join('f1.txt').puts(txt).close
325
+ oline = rio(datadir,'dir1/sd1/f1.txt').readline
326
+
327
+ dir2 = rio(datadir,'dir2').rmtree.mkpath
328
+ sd1.copy_to(dir2)
329
+ nline = rio(datadir,'dir2/sd1/f1.txt').readline
330
+ assert_equal(oline,nline)
331
+
332
+ end
333
+ def cmpfiles(z1,z2)
334
+ o = rio(z1).contents
335
+ n = rio(z2).contents
336
+ o == n
337
+ end
338
+
339
+ # def test_dirstream
340
+ # datadir = rio('qp','test_dirstream').rmtree.mkpath
341
+ # rio(datadir,'afile').touch.symlink(rio(datadir,'asymlink'))
342
+ # rio(datadir,'adir').mkdir
343
+
344
+ # #pp datadir.open
345
+ # positions = {}
346
+ # while 1
347
+ # ps = datadir.tell
348
+ # ent = datadir.read
349
+ # break if ent.nil?
350
+ # positions[ent] = ps
351
+ # end
352
+
353
+ # positions.each { |k,v|
354
+ # datadir.seek(v)
355
+ # ent = datadir.read
356
+ # assert_equal(k.to_s,ent.to_s)
357
+ # }
358
+ # end
359
+ def test_path
360
+ dir = RIO.cwd(%w/qp test_path/).rmtree.mkpath
361
+ s_dir = 'qp/test_path'
362
+ assert_equal(true,::FileTest.directory?(s_dir))
363
+ f1 = RIO.rio(dir,'f1.txt').puts("This is f1")
364
+ assert_equal(true,::FileTest.file?(::File.join(s_dir,'f1.txt')))
365
+ f2 = RIO.rio(dir,'f2.txt').puts("This is f2")
366
+ assert_equal(true,::FileTest.file?(::File.join(s_dir,'f2.txt')))
367
+ f3 = RIO.rio(dir,'d1').mkpath.join('f3.txt').puts("This is f2")
368
+ assert_equal(true,::FileTest.directory?(::File.join(s_dir,'d1')))
369
+ assert_equal(true,::FileTest.file?(::File.join(s_dir,'d1/f3.txt')))
370
+ f4 = RIO.rio(dir,'d1').mkpath.join('f4.emp').touch
371
+ assert_equal(0,::FileTest.size(::File.join(s_dir,'d1/f4.emp')))
372
+ end
373
+ def test_glob
374
+ end
375
+
376
+ def test_sdio
377
+
378
+ # qpd = rio(%w/qp/).mkpath
379
+ # rio(qpd,'hw.txt').puts("This\nis\na\nqesi")
380
+ # ObjectSpace.each_object(File) { |o|
381
+ # p o.to_s
382
+ # }
383
+
384
+
385
+ # io = rio(qpd,'hw.txt').readlines
386
+ # p io.inspect
387
+ end
388
+ end
389
+ # extend Forwardable
390
+ # def_instance_delegators(:state,
391
+ # :to_i,
392
+ # :mode,
393
+ # :mkdir,:mkpath,
394
+ # :rmdir,:rmtree,
395
+ # :chdir,
396
+ # :each_entry,:each_line,:each,:each_byte,
397
+ # :each_tested,:each_file,:each_directory,:each_symlink,
398
+ # :to_str,:to_a,:contents,
399
+ # :length,:size,:zero?,
400
+ # :eof?,
401
+ # :read,:readchar,:readline,:readlines,
402
+ # :putc,:puts,:print,:printf,
403
+ # :chomp,:chop,
404
+ # :atime,:ctime,:mtime,
405
+ # :blockdev?,:chardev?,:pipe?,:socket?,:symlink?,:sticky?,
406
+ # :dir?,:directory?,:file?,:exist?,
407
+ # :executable?,:executable_real?,
408
+ # :readable?,:readable_real?,:writeable?,:writeable_real?,
409
+ # :grpowned?,:owned?,:setgid?,:setuid?,
410
+ # :ftype,:extname,
411
+ # :lstat,:stat,
412
+ # :fnmatch?)
413
+ # class LogDecorator
414
+ # def initialize(target)
415
+ # @target = target
416
+ # end
417
+ # def method_missing( sym, *args )
418
+ # call = "#{@target}.#{sym}(" + (args.map {|a|a.inspect}).join(",") + ")"
419
+ # puts "calling #{call}"
420
+ # result = @target.__send__( sym, *args )
421
+ # puts "returned #{result.inspect} from #{call}"
422
+ # result
423
+ # end
424
+ # end
425
+
426
+ #module RIO
427
+ # module RIOState
428
+ # def new_rio(*args)
429
+ # self.class.new(*args)
430
+ # end
431
+ # end
432
+ #end # module RIO