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,170 @@
1
+ require 'rio'
2
+ require 'test/unit'
3
+ require 'test/unit/testsuite'
4
+
5
+
6
+
7
+ module RIOSupport
8
+ def supports_symlink
9
+ yes = true
10
+ begin
11
+ File.symlink('dummy','ldummy')
12
+ File.delete('ldummy')
13
+ rescue NotImplementedError
14
+ yes = false
15
+ rescue
16
+ end
17
+ yes
18
+ end
19
+ module_function :supports_symlink
20
+
21
+ end
22
+ $supports_symlink = RIOSupport.supports_symlink
23
+ $mswin32 = (RUBY_PLATFORM =~ /mswin32/)
24
+ module RIO_TestCase
25
+ module Util
26
+ def make_lines_file(n_lines=8,*args)
27
+ file = rio(*args)
28
+ lines = (0...n_lines).map { |i| "L#{i}:#{file}" + $/ }
29
+ lines.each do |line|
30
+ file.puts(line)
31
+ end
32
+ file.close
33
+ [lines,file]
34
+ end
35
+ module_function :make_lines_file
36
+ end
37
+
38
+ T_ROOT = 'qp'
39
+ def _t_dir_from_class()
40
+ self.class.to_s.sub(/^TC_/,'')
41
+ end
42
+ def tdir()
43
+ rio(T_ROOT,_t_dir_from_class())
44
+ end
45
+ def assert!(a,msg="negative assertion")
46
+ assert((!(a)),msg)
47
+ end
48
+ def assert_array_equal(a,b,msg="array same regardless of order")
49
+ assert_equal(smap(a).sort,smap(b).sort,msg)
50
+ end
51
+ def smap(a) a.map { |el| el.to_s } end
52
+ def mkafile(*args)
53
+ file = rio(*args)
54
+ file < (0..1).map { |i| "L#{i}:#{file.to_s}\n" }
55
+ file
56
+ end
57
+
58
+ def mklines(n_lines=8)
59
+ (0...n_lines).map { |i| "L#{i}\n" }
60
+ end
61
+ def mkalinesfile(n_lines,*args)
62
+ file = rio(*args)
63
+ file < (0...n_lines).map { |i| "L#{i}:#{file.to_s}\n" }
64
+ file
65
+ end
66
+ def lines_file(n_lines=8,*args)
67
+ Util::make_lines_file(n_lines,*args)
68
+ end
69
+ def file_lines(n_lines=8)
70
+ file = mkalinesfile(n_lines,'f1')
71
+ lines = file[]
72
+ (2..4).each do |n|
73
+ lines[n] = '#' + lines[n]
74
+ end
75
+ (0..3).each do |n|
76
+ lines[n].sub!(/f1/,'f2')
77
+ end
78
+ file < lines
79
+ [file,lines]
80
+ end
81
+ def setup
82
+ #$trace_states = true
83
+ @cwd = ::Dir.getwd
84
+ tdir.mkpath.chdir
85
+ end
86
+ def teardown
87
+ ::Dir.chdir @cwd
88
+ end
89
+ end
90
+ module Test
91
+ module RIO
92
+ class TestCase < Unit::TestCase
93
+ include RIO_TestCase::Util
94
+ def setup()
95
+ return if self.class == Test::RIO::TestCase
96
+ #p self.class
97
+ @cwd = ::Dir.getwd
98
+ tdir.mkpath.chdir
99
+ end
100
+ def teardown
101
+ return if self.class == Test::RIO::TestCase
102
+ ::Dir.chdir @cwd
103
+ end
104
+ def rios2str(a) a.map { |el| el.to_s } end
105
+
106
+ def assert!(a,msg="negative assertion")
107
+ assert((!(a)),msg)
108
+ end
109
+
110
+ def smap(a) a.map { |el| el.to_s } end
111
+ def assert_array_equal(a,b,msg="array same regardless of order")
112
+ if a.nil?
113
+ assert_nil(b)
114
+ elsif b.nil?
115
+ assert_nil(a)
116
+ else
117
+ assert_equal(smap(a).sort,smap(b).sort,msg)
118
+ end
119
+ end
120
+ def assert_dirs_equal(exp,d,msg="")
121
+ exp.each do |ent|
122
+ ds = rio(d,ent.filename)
123
+ assert_equal(ent.symlink?,ds.symlink?,"both symlinks, or not")
124
+ unless ent.symlink?
125
+ assert(ds.exist?,"entry '#{ds}' exists")
126
+ end
127
+ assert_equal(ent.ftype,ds.ftype,"same ftype")
128
+ assert_rios_equal(ent,ds,"sub rios are the same")
129
+ end
130
+ end
131
+ def assert_rios_equal(exp,ans,msg="")
132
+ case
133
+ when exp.symlink?
134
+ assert(ans.symlink?,"entry is a symlink")
135
+ assert_equal(exp.readlink,ans.readlink,"symlinks read the same")
136
+ when exp.file?
137
+ assert(ans.file?,"entry is a file")
138
+ assert_equal(exp.chomp.lines[],ans.chomp.lines[],"file has same contents")
139
+ when exp.dir?
140
+ assert(ans.dir?,"entry is a dir")
141
+ assert_dirs_equal(exp,ans,"directories are the same")
142
+ end
143
+ end
144
+
145
+ def self.make_lines_file(n_lines=8,*args)
146
+ file = rio(*args)
147
+ lines = (0...n_lines).map { |i| "L#{i}:#{file}" + $/ }
148
+ lines.each do |line|
149
+ file.puts(line)
150
+ end
151
+ file.close
152
+ [lines,file]
153
+ end
154
+ T_ROOT = 'qp'
155
+ def _t_dir_from_class()
156
+ self.class.to_s.sub(/^TC_/,'')
157
+ end
158
+ def self.tdir_from_class()
159
+ self.to_s.sub(/^TC_/,'')
160
+ end
161
+ def self.tdir()
162
+ rio(T_ROOT,tdir_from_class())
163
+ end
164
+ def tdir()
165
+ rio(T_ROOT,_t_dir_from_class())
166
+ end
167
+ def default_test; end
168
+ end
169
+ end
170
+ end
data/test/tc/tonl.rb ADDED
@@ -0,0 +1,37 @@
1
+ #!/usr/local/bin/ruby
2
+ if $0 == __FILE__
3
+ Dir.chdir File.dirname(__FILE__)+'/../'
4
+ $:.unshift File.expand_path('../lib/')
5
+ end
6
+
7
+ require 'rio'
8
+ require 'tc/testcase'
9
+
10
+ class TC_tonl < Test::RIO::TestCase
11
+ @@once = false
12
+ CRNLFILE = 'hw.crnl.txt'
13
+ NLFILE = 'hw.nl.txt'
14
+ STR = "Hello World\r\n"
15
+ require 'tc/programs_util'
16
+ include Test::RIO::Programs
17
+
18
+ def self.once
19
+ @@once = true
20
+ rio(CRNLFILE) < STR * 2
21
+ end
22
+ def setup
23
+ super
24
+ self.class.once unless @@once
25
+ end
26
+
27
+ def test_1
28
+ out = rio.strio
29
+ rio(CRNLFILE) > out
30
+ lines = rio(CRNLFILE).to_a
31
+ assert_equal(13,lines[0].length)
32
+ rio(NLFILE) < rio(CRNLFILE).chomp.map{ |l| "#{l}\n" }
33
+ lines = rio(NLFILE).to_a
34
+ assert_equal(12,lines[0].length)
35
+ end
36
+
37
+ end
@@ -0,0 +1,39 @@
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 'pp'
9
+
10
+ class TC_truncate < Test::RIO::TestCase
11
+ @@once = false
12
+ def self.once
13
+ @@once = true
14
+
15
+ end
16
+
17
+ def setup
18
+ super
19
+ self.class.once unless @@once
20
+
21
+ end
22
+
23
+ def test_basic
24
+ str = "1234567890"
25
+ f = rio("out")
26
+ f.print!(str)
27
+ assert_equal(str,f.contents)
28
+ assert_equal(str.size,f.size)
29
+ n = 5
30
+ f.truncate(n)
31
+ assert_equal(str[0,n],f.contents)
32
+ assert_equal(n,f.size)
33
+ n = 2
34
+ assert_equal(str[0,n],f.read(n))
35
+ assert_equal(n,f.truncate.size)
36
+ assert_equal(str[0,n],f.contents)
37
+ end
38
+
39
+ end
data/test/tc/yaml.rb ADDED
@@ -0,0 +1,275 @@
1
+ #!/usr/local/bin/ruby
2
+ if $0 == __FILE__
3
+ Dir.chdir File.dirname(__FILE__)+'/../'
4
+ $:.unshift File.expand_path('../lib/')
5
+ end
6
+
7
+ require 'rio'
8
+ require 'tc/testcase'
9
+ require 'tc/csvutil'
10
+
11
+ class TC_yaml < Test::RIO::TestCase
12
+ include CSV_Util
13
+
14
+ @@once = false
15
+ TRIO = rio('test.yaml')
16
+ TOBJS = [
17
+ ['zero','one','two'],
18
+ {'zero' => 0, 'one' => 1, 'two' => 2},
19
+ "the crux of the biscuit",
20
+ ]
21
+ def self.once
22
+ @@once = true
23
+ tdir.delete!.mkpath.chdir {
24
+ TRIO.puts!(YAML.dump_stream(*TOBJS))
25
+ }
26
+ end
27
+ def setup()
28
+ self.class.once unless @@once
29
+ super
30
+ end
31
+
32
+ def test_ss
33
+ 0.upto(2) do |n|
34
+ exp = [TOBJS[n]]
35
+ ans = rio(TRIO).yaml[n]
36
+ assert_equal(exp,ans)
37
+ ans = rio(TRIO).yaml[TOBJS[n].class]
38
+ assert_equal(exp,ans)
39
+ end
40
+ end
41
+ def test_copyop
42
+ objs = rio(TRIO).yaml[]
43
+ assert_equal(TOBJS,objs)
44
+ ofile = 'out.yml'
45
+ yout = rio(ofile).yaml.delete << objs[0] << objs[1] << objs[2]
46
+ assert_equal(rio(TRIO)[],rio(ofile)[])
47
+ rio(?",ostring = "").yaml < yout
48
+ assert_equal(rio(TRIO).contents,ostring)
49
+ end
50
+ def test_yaml2csv
51
+ data = [["h0","h1","h2"],["d0","d1","d2"]]
52
+ csvfile = 'y2c.csv'
53
+ ymlfile = 'y2c.yml'
54
+ dat = data.map{|d| d.join(',')}
55
+ rio(csvfile).puts!(dat)
56
+ val = rio(csvfile).contents
57
+ assert_equal(dat.join($/)+$/,val)
58
+ rio(ymlfile).yaml < rio(csvfile).csv
59
+ ans = rio(ymlfile).yaml[]
60
+ assert_equal(data,ans)
61
+ #puts rio(ymlfile).contents
62
+ end
63
+ def test_select
64
+ ans = rio(TRIO).yaml.records[]
65
+ assert_equal(TOBJS,ans)
66
+ ans = rio(TRIO).yaml.objects[]
67
+ assert_equal(TOBJS,ans)
68
+
69
+ ans = rio(TRIO).yaml.rows[]
70
+ assert_equal(TOBJS,ans.map{|obj| ::YAML.load(obj)})
71
+ ans = rio(TRIO).yaml.documents[]
72
+ assert_equal(TOBJS,ans.map{|obj| ::YAML.load(obj)})
73
+
74
+ exp = [TOBJS[1]]
75
+ ans = rio(TRIO).yaml.records[1]
76
+ assert_equal(exp,ans)
77
+ ans = rio(TRIO).yaml.objects[1]
78
+ assert_equal(exp,ans)
79
+
80
+ ans = rio(TRIO).yaml.rows[1]
81
+ assert_equal(exp,ans.map{|obj| ::YAML.load(obj)})
82
+ ans = rio(TRIO).yaml.documents[1]
83
+ assert_equal(exp,ans.map{|obj| ::YAML.load(obj)})
84
+
85
+ exp = [TOBJS[0],TOBJS[2]]
86
+ ans = rio(TRIO).yaml.skiprecords[1]
87
+ assert_equal(exp,ans)
88
+ ans = rio(TRIO).yaml.skipobjects[1]
89
+ assert_equal(exp,ans)
90
+
91
+ ans = rio(TRIO).yaml.skiprows[1]
92
+ assert_equal(exp,ans.map{|obj| ::YAML.load(obj)})
93
+ ans = rio(TRIO).yaml.skipdocuments[1]
94
+ assert_equal(exp,ans.map{|obj| ::YAML.load(obj)})
95
+
96
+ exp = [TOBJS[1]]
97
+ ans = rio(TRIO).yaml.records[::Hash]
98
+ assert_equal(exp,ans)
99
+ ans = rio(TRIO).yaml.objects[::Hash]
100
+ assert_equal(exp,ans)
101
+
102
+ exp = [TOBJS[0],TOBJS[2]]
103
+ ans = rio(TRIO).yaml.skiprecords[::Hash]
104
+ assert_equal(exp,ans)
105
+ ans = rio(TRIO).yaml.skipobjects[::Hash]
106
+ assert_equal(exp,ans)
107
+
108
+ end
109
+ def test_single
110
+ exp = TOBJS[1]
111
+ ans = rio(TRIO).yaml.record[1]
112
+ assert_equal(exp,ans)
113
+ ans = rio(TRIO).yaml.row[1]
114
+ assert_equal(exp,::YAML.load(ans))
115
+ ans = rio(TRIO).yaml.object[1]
116
+ assert_equal(exp,ans)
117
+ ans = rio(TRIO).yaml.document[1]
118
+ assert_equal(exp,::YAML.load(ans))
119
+ end
120
+ def test_copytypes
121
+ ofile = 'out.yml'
122
+ [1,"1",{'one'=>1},[1]].each do |obj|
123
+ rio(ofile).yaml < obj
124
+ assert_equal(obj,rio(ofile).yaml.load)
125
+ end
126
+ end
127
+ def test_copytoary
128
+ ofile = 'out.yml'
129
+ in_ary = [1,"1",{'one'=>1},[1]]
130
+ ary = []
131
+ in_ary.each do |obj|
132
+ rio(ofile).yaml < obj
133
+ assert_equal(obj,rio(ofile).yaml.load)
134
+ rio(ofile).yaml >> ary
135
+ end
136
+ assert_equal(in_ary,ary)
137
+ end
138
+ def test_get
139
+ exp = TOBJS[0]
140
+
141
+ obj = rio(TRIO).yaml.get
142
+ assert_instance_of(exp.class,obj)
143
+ assert_equal(exp,obj)
144
+
145
+ obj = rio(TRIO).yaml.records.get
146
+ assert_instance_of(exp.class,obj)
147
+ assert_equal(exp,obj)
148
+
149
+ obj = rio(TRIO).yaml.lines.get
150
+ assert_instance_of(::String,obj)
151
+ assert_equal(rio(TRIO).lines[0],[obj])
152
+
153
+ exp = ::YAML.dump(exp)
154
+ obj = rio(TRIO).yaml.rows.get
155
+ assert_instance_of(::String,obj)
156
+ assert_equal(exp,obj)
157
+
158
+ end
159
+ def test_each
160
+ exp = TOBJS
161
+
162
+ ans = []
163
+ rio(TRIO).yaml do |obj|
164
+ ans << obj
165
+ end
166
+ (0...exp.size).each do |i|
167
+ assert_equal(exp[i],ans[i])
168
+ end
169
+
170
+ ans = []
171
+ rio(TRIO).yaml.records do |obj|
172
+ ans << obj
173
+ end
174
+ (0...exp.size).each do |i|
175
+ assert_equal(exp[i],ans[i])
176
+ end
177
+
178
+ ans = []
179
+ rio(TRIO).yaml.rows do |obj|
180
+ ans << ::YAML.load(obj)
181
+ end
182
+ (0...exp.size).each do |i|
183
+ assert_equal(exp[i],ans[i])
184
+ end
185
+
186
+ exp = rio(TRIO).lines[]
187
+ ans = []
188
+ rio(TRIO).yaml.lines do |obj|
189
+ ans << obj
190
+ end
191
+ (0...exp.size).each do |i|
192
+ assert_equal(exp[i],ans[i])
193
+ end
194
+
195
+ end
196
+ def test_array
197
+ exp = TOBJS
198
+
199
+ ans = rio(TRIO).yaml[]
200
+ assert_equal(exp,ans)
201
+
202
+ ans = rio(TRIO).yaml.records[]
203
+ assert_equal(exp,ans)
204
+
205
+ ans = rio(TRIO).yaml.rows[]
206
+ assert_equal(exp,ans.map{|obj| ::YAML.load(obj)})
207
+
208
+ exp = rio(TRIO).lines[]
209
+ ans = rio(TRIO).yaml.lines[]
210
+ assert_equal(exp,ans)
211
+
212
+ end
213
+ def test_getrec
214
+ exp = TOBJS[0]
215
+
216
+ obj = rio(TRIO).yaml.getrec
217
+ assert_instance_of(::Array,obj)
218
+ assert_equal(exp,obj)
219
+
220
+ obj = rio(TRIO).yaml.lines.getrec
221
+ assert_instance_of(::Array,obj)
222
+ assert_equal(exp,obj)
223
+
224
+ obj = rio(TRIO).yaml.records.getrec
225
+ assert_instance_of(::Array,obj)
226
+ assert_equal(exp,obj)
227
+
228
+ obj = rio(TRIO).yaml.rows.getrec
229
+ assert_instance_of(::Array,obj)
230
+ assert_equal(exp,obj)
231
+
232
+ end
233
+ def test_getrow
234
+ exp = TOBJS[0].to_yaml
235
+
236
+ obj = rio(TRIO).yaml.getrow
237
+ assert_instance_of(::String,obj)
238
+ assert_equal(exp,obj)
239
+
240
+ obj = rio(TRIO).yaml.lines.getrow
241
+ assert_instance_of(::String,obj)
242
+ assert_equal(exp,obj)
243
+
244
+ obj = rio(TRIO).yaml.records.getrow
245
+ assert_instance_of(::String,obj)
246
+ assert_equal(exp,obj)
247
+
248
+ obj = rio(TRIO).yaml.rows.getrow
249
+ assert_instance_of(::String,obj)
250
+ assert_equal(exp,obj)
251
+
252
+ end
253
+ def test_getline
254
+ exp = rio(TRIO).gets
255
+
256
+ obj = rio(TRIO).yaml.getline
257
+ assert_instance_of(::String,obj)
258
+ assert_equal(exp,obj)
259
+
260
+ obj = rio(TRIO).yaml.lines.getline
261
+ assert_instance_of(::String,obj)
262
+ assert_equal(exp,obj)
263
+
264
+ obj = rio(TRIO).yaml.records.getline
265
+ assert_instance_of(::String,obj)
266
+ assert_equal(exp,obj)
267
+
268
+ obj = rio(TRIO).yaml.rows.getline
269
+ assert_instance_of(::String,obj)
270
+ assert_equal(exp,obj)
271
+
272
+ end
273
+
274
+
275
+ end