virtfs 0.0.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 (91) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +8 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +154 -0
  8. data/Rakefile +5 -0
  9. data/lib/virtfs-nativefs-thick.rb +1 -0
  10. data/lib/virtfs-nativefs-thin.rb +1 -0
  11. data/lib/virtfs.rb +38 -0
  12. data/lib/virtfs/activation.rb +97 -0
  13. data/lib/virtfs/block_io.rb +140 -0
  14. data/lib/virtfs/byte_range.rb +71 -0
  15. data/lib/virtfs/context.rb +300 -0
  16. data/lib/virtfs/context_manager.rb +175 -0
  17. data/lib/virtfs/context_switch_class_methods.rb +96 -0
  18. data/lib/virtfs/delegate_module.rb +40 -0
  19. data/lib/virtfs/dir_instance_delegate.rb +3 -0
  20. data/lib/virtfs/exception.rb +13 -0
  21. data/lib/virtfs/file_instance_delegate.rb +3 -0
  22. data/lib/virtfs/file_modes_and_options.rb +293 -0
  23. data/lib/virtfs/find_class_methods.rb +106 -0
  24. data/lib/virtfs/io_buffer.rb +133 -0
  25. data/lib/virtfs/io_instance_delegate.rb +3 -0
  26. data/lib/virtfs/kernel.rb +146 -0
  27. data/lib/virtfs/nativefs/thick.rb +30 -0
  28. data/lib/virtfs/nativefs/thick/dir_class_methods.rb +38 -0
  29. data/lib/virtfs/nativefs/thick/file_class_methods.rb +178 -0
  30. data/lib/virtfs/nativefs/thin.rb +32 -0
  31. data/lib/virtfs/nativefs/thin/dir.rb +30 -0
  32. data/lib/virtfs/nativefs/thin/dir_class_methods.rb +41 -0
  33. data/lib/virtfs/nativefs/thin/file.rb +112 -0
  34. data/lib/virtfs/nativefs/thin/file_class_methods.rb +181 -0
  35. data/lib/virtfs/protofs/protofs.rb +7 -0
  36. data/lib/virtfs/protofs/protofs_base.rb +12 -0
  37. data/lib/virtfs/protofs/protofs_dir.rb +13 -0
  38. data/lib/virtfs/protofs/protofs_dir_class.rb +31 -0
  39. data/lib/virtfs/protofs/protofs_file.rb +27 -0
  40. data/lib/virtfs/protofs/protofs_file_class.rb +136 -0
  41. data/lib/virtfs/stat.rb +100 -0
  42. data/lib/virtfs/thin_dir_delegator.rb +79 -0
  43. data/lib/virtfs/thin_file_delegator.rb +77 -0
  44. data/lib/virtfs/thin_io_delegator_methods.rb +301 -0
  45. data/lib/virtfs/thin_io_delegator_methods_bufferio.rb +337 -0
  46. data/lib/virtfs/v_dir.rb +238 -0
  47. data/lib/virtfs/v_file.rb +480 -0
  48. data/lib/virtfs/v_io.rb +243 -0
  49. data/lib/virtfs/v_pathname.rb +128 -0
  50. data/lib/virtfs/version.rb +3 -0
  51. data/spec/activate_spec.rb +202 -0
  52. data/spec/chroot_spec.rb +120 -0
  53. data/spec/context_manager_class_spec.rb +246 -0
  54. data/spec/context_manager_instance_spec.rb +255 -0
  55. data/spec/context_spec.rb +335 -0
  56. data/spec/data/UTF-16LE-data.txt +0 -0
  57. data/spec/data/UTF-8-data.txt +212 -0
  58. data/spec/dir_class_spec.rb +506 -0
  59. data/spec/dir_instance_spec.rb +208 -0
  60. data/spec/file_class_spec.rb +2106 -0
  61. data/spec/file_instance_spec.rb +154 -0
  62. data/spec/file_modes_and_options_spec.rb +1556 -0
  63. data/spec/find_spec.rb +142 -0
  64. data/spec/io_bufferio_size_shared_examples.rb +371 -0
  65. data/spec/io_bufferio_size_spec.rb +861 -0
  66. data/spec/io_bufferio_spec.rb +801 -0
  67. data/spec/io_class_spec.rb +145 -0
  68. data/spec/io_instance_spec.rb +516 -0
  69. data/spec/kernel_spec.rb +285 -0
  70. data/spec/mount_spec.rb +186 -0
  71. data/spec/nativefs_local_root_spec.rb +132 -0
  72. data/spec/path_spec.rb +39 -0
  73. data/spec/spec_helper.rb +126 -0
  74. data/tasks/rspec.rake +3 -0
  75. data/tasks/yard.rake +7 -0
  76. data/test/UTF-8-demo.txt +212 -0
  77. data/test/bench.rb +18 -0
  78. data/test/bio_internal_test.rb +45 -0
  79. data/test/delegate_io.rb +31 -0
  80. data/test/delegate_module.rb +62 -0
  81. data/test/encode_test.rb +42 -0
  82. data/test/enoent_test.rb +30 -0
  83. data/test/namespace_test.rb +42 -0
  84. data/test/read_block_valid_encoding.rb +44 -0
  85. data/test/read_test.rb +78 -0
  86. data/test/stream_readers.rb +46 -0
  87. data/test/utf-16-demo.txt +0 -0
  88. data/test/utf8_to_utf16.rb +77 -0
  89. data/test/wrapper_test.rb +34 -0
  90. data/virtfs.gemspec +29 -0
  91. metadata +230 -0
@@ -0,0 +1,861 @@
1
+ require 'spec_helper'
2
+ require 'io_bufferio_size_shared_examples'
3
+
4
+ describe VirtFS::VIO, "(#{$fs_interface} interface)" do
5
+ before(:all) do
6
+ @data_dir = VfsRealFile.join(__dir__, "data")
7
+ @utf_8_filename = VfsRealFile.join(@data_dir, "UTF-8-data.txt")
8
+ @utf_16_filename = VfsRealFile.join(@data_dir, "UTF-16LE-data.txt")
9
+
10
+ @start_marker = "START OF FILE:\n"
11
+ @end_marker = ":END OF FILE"
12
+ @data1 = "0123456789"
13
+ @data2 = "abcdefghijklmnopqrstuvwzyz\n"
14
+
15
+ @temp_file = Tempfile.new("VirtFS-IO")
16
+ @temp_file.write(@start_marker)
17
+ (0..9).each do
18
+ @temp_file.write(@data1)
19
+ @temp_file.write(@data2)
20
+ end
21
+ @temp_file.write(@end_marker)
22
+ @temp_file.close
23
+
24
+ @full_path = @temp_file.path
25
+ @file_size = VfsRealFile.size(@full_path)
26
+
27
+ @temp_write = Tempfile.new("VirtFS-IO")
28
+ @temp_write.close
29
+ @write_file_path = @temp_write.path
30
+
31
+ @default_encoding = Encoding.default_external
32
+ @binary_encoding = Encoding.find("ASCII-8BIT")
33
+ end
34
+
35
+ before(:each) do
36
+ reset_context
37
+
38
+ @root = File::SEPARATOR
39
+ @native_fs = nativefs_class.new
40
+ VirtFS.mount(@native_fs, @root)
41
+
42
+ @vfile_read_obj = VirtFS::VFile.new(@full_path, "r")
43
+ @vfile_write_obj = VirtFS::VFile.new(@write_file_path, "w")
44
+ end
45
+
46
+ after(:each) do
47
+ @vfile_read_obj.close unless @vfile_read_obj.closed?
48
+ @vfile_write_obj.close unless @vfile_write_obj.closed?
49
+ VirtFS.umount(@root)
50
+ end
51
+
52
+ #
53
+ # Run the set of tests for each buffer size.
54
+ #
55
+ buffer_test_sizes.each do |buf_sz|
56
+ describe "#bytes - Buffer size: #{buf_sz}" do # deprecated
57
+ before(:each) do
58
+ @vfile_read_obj.send(:min_read_buf_sz=, buf_sz)
59
+ @rfile_obj = VfsRealFile.new(@full_path, "r")
60
+ end
61
+
62
+ after(:each) do
63
+ @rfile_obj.close
64
+ end
65
+
66
+ it_should_behave_like "common_bytes"
67
+ end
68
+
69
+ describe "#chars - Buffer size: #{buf_sz}" do
70
+ context "default encoding (buffer size: #{buf_sz})" do
71
+ before(:each) do
72
+ @test_file_size = @file_size
73
+ @expected_full_read_size = @file_size
74
+ @vfile_read_test_obj = @vfile_read_obj
75
+ @rfile_obj = VfsRealFile.new(@full_path, "r")
76
+ @expected_returned_encoding = Encoding.default_external
77
+
78
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
79
+ end
80
+
81
+ after(:each) do
82
+ @rfile_obj.close
83
+ end
84
+
85
+ it_should_behave_like "common_chars"
86
+ end
87
+
88
+ context "UTF-8 encoding (buffer size: #{buf_sz})" do
89
+ before(:each) do
90
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
91
+ @expected_full_read_size = @test_file_size
92
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8")
93
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8")
94
+ @expected_returned_encoding = Encoding.find("UTF-8")
95
+
96
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
97
+ end
98
+
99
+ after(:each) do
100
+ @vfile_read_test_obj.close
101
+ @rfile_obj.close
102
+ end
103
+
104
+ it_should_behave_like "common_chars"
105
+ end
106
+
107
+ context "UTF-16LE encoding (buffer size: #{buf_sz})" do
108
+ before(:each) do
109
+ @test_file_size = VfsRealFile.size(@utf_16_filename)
110
+ @expected_full_read_size = @test_file_size
111
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_16_filename, "rb:UTF-16LE")
112
+ @rfile_obj = VfsRealFile.new(@utf_16_filename, "rb:UTF-16LE")
113
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
114
+
115
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
116
+ end
117
+
118
+ after(:each) do
119
+ @vfile_read_test_obj.close
120
+ @rfile_obj.close
121
+ end
122
+
123
+ it_should_behave_like "common_chars"
124
+ end
125
+
126
+ context "Transcode UTF-8 to UTF-16LE (buffer size: #{buf_sz})" do
127
+ before(:each) do
128
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
129
+ @expected_full_read_size = VfsRealFile.size(@utf_16_filename)
130
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
131
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
132
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
133
+
134
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
135
+ end
136
+
137
+ after(:each) do
138
+ @vfile_read_test_obj.close
139
+ @rfile_obj.close
140
+ end
141
+
142
+ it_should_behave_like "common_chars"
143
+ end
144
+ end
145
+
146
+ describe "#each - Buffer size: #{buf_sz}" do
147
+ context "default encoding (buffer size: #{buf_sz})" do
148
+ before(:each) do
149
+ @test_file_size = @file_size
150
+ @expected_full_read_size = @file_size
151
+ @vfile_read_test_obj = @vfile_read_obj
152
+ @rfile_obj = VfsRealFile.new(@full_path, "r")
153
+ @expected_returned_encoding = Encoding.default_external
154
+
155
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
156
+ end
157
+
158
+ after(:each) do
159
+ @rfile_obj.close
160
+ end
161
+
162
+ it_should_behave_like "common_each"
163
+ end
164
+
165
+ context "UTF-8 encoding (buffer size: #{buf_sz})" do
166
+ before(:each) do
167
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
168
+ @expected_full_read_size = @test_file_size
169
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8")
170
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8")
171
+ @expected_returned_encoding = Encoding.find("UTF-8")
172
+
173
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
174
+ end
175
+
176
+ after(:each) do
177
+ @vfile_read_test_obj.close
178
+ @rfile_obj.close
179
+ end
180
+
181
+ it_should_behave_like "common_each"
182
+ end
183
+
184
+ context "UTF-16LE encoding (buffer size: #{buf_sz})" do
185
+ before(:each) do
186
+ @test_file_size = VfsRealFile.size(@utf_16_filename)
187
+ @expected_full_read_size = @test_file_size
188
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_16_filename, "rb:UTF-16LE")
189
+ @rfile_obj = VfsRealFile.new(@utf_16_filename, "rb:UTF-16LE")
190
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
191
+
192
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
193
+ end
194
+
195
+ after(:each) do
196
+ @vfile_read_test_obj.close
197
+ @rfile_obj.close
198
+ end
199
+
200
+ it_should_behave_like "common_each"
201
+ end
202
+
203
+ context "Transcode UTF-8 to UTF-16LE (buffer size: #{buf_sz})" do
204
+ before(:each) do
205
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
206
+ @expected_full_read_size = VfsRealFile.size(@utf_16_filename)
207
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
208
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
209
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
210
+
211
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
212
+ end
213
+
214
+ after(:each) do
215
+ @vfile_read_test_obj.close
216
+ @rfile_obj.close
217
+ end
218
+
219
+ it_should_behave_like "common_each"
220
+ end
221
+ end
222
+
223
+ describe "#each_byte - Buffer size: #{buf_sz}" do
224
+ context "Buffer size: #{buf_sz}" do
225
+ before(:each) do
226
+ @vfile_read_obj.send(:min_read_buf_sz=, buf_sz)
227
+ @rfile_obj = VfsRealFile.new(@full_path, "r")
228
+ end
229
+
230
+ after(:each) do
231
+ @rfile_obj.close
232
+ end
233
+
234
+ it_should_behave_like "common_each_byte"
235
+ end
236
+ end
237
+
238
+ describe "#each_char - Buffer size: #{buf_sz}" do
239
+ context "default encoding (buffer size: #{buf_sz})" do
240
+ before(:each) do
241
+ @test_file_size = @file_size
242
+ @expected_full_read_size = @file_size
243
+ @vfile_read_test_obj = @vfile_read_obj
244
+ @rfile_obj = VfsRealFile.new(@full_path, "r")
245
+ @expected_returned_encoding = Encoding.default_external
246
+
247
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
248
+ end
249
+
250
+ after(:each) do
251
+ @rfile_obj.close
252
+ end
253
+
254
+ it_should_behave_like "common_each_char"
255
+ end
256
+
257
+ context "UTF-8 encoding (buffer size: #{buf_sz})" do
258
+ before(:each) do
259
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
260
+ @expected_full_read_size = @test_file_size
261
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8")
262
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8")
263
+ @expected_returned_encoding = Encoding.find("UTF-8")
264
+
265
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
266
+ end
267
+
268
+ after(:each) do
269
+ @vfile_read_test_obj.close
270
+ @rfile_obj.close
271
+ end
272
+
273
+ it_should_behave_like "common_each_char"
274
+ end
275
+
276
+ context "UTF-16LE encoding (buffer size: #{buf_sz})" do
277
+ before(:each) do
278
+ @test_file_size = VfsRealFile.size(@utf_16_filename)
279
+ @expected_full_read_size = @test_file_size
280
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_16_filename, "rb:UTF-16LE")
281
+ @rfile_obj = VfsRealFile.new(@utf_16_filename, "rb:UTF-16LE")
282
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
283
+
284
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
285
+ end
286
+
287
+ after(:each) do
288
+ @vfile_read_test_obj.close
289
+ @rfile_obj.close
290
+ end
291
+
292
+ it_should_behave_like "common_each_char"
293
+ end
294
+
295
+ context "Transcode UTF-8 to UTF-16LE (buffer size: #{buf_sz})" do
296
+ before(:each) do
297
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
298
+ @expected_full_read_size = VfsRealFile.size(@utf_16_filename)
299
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
300
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
301
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
302
+
303
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
304
+ end
305
+
306
+ after(:each) do
307
+ @vfile_read_test_obj.close
308
+ @rfile_obj.close
309
+ end
310
+
311
+ it_should_behave_like "common_each_char"
312
+ end
313
+ end
314
+
315
+ describe "#each_codepoint - Buffer size: #{buf_sz}" do
316
+ context "default encoding (buffer size: #{buf_sz})" do
317
+ before(:each) do
318
+ @test_file_size = @file_size
319
+ @expected_full_read_size = @file_size
320
+ @vfile_read_test_obj = @vfile_read_obj
321
+ @rfile_obj = VfsRealFile.new(@full_path, "r")
322
+ @expected_returned_encoding = Encoding.default_external
323
+
324
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
325
+ end
326
+
327
+ after(:each) do
328
+ @rfile_obj.close
329
+ end
330
+
331
+ it_should_behave_like "common_each_each_codepoint"
332
+ end
333
+
334
+ context "UTF-8 encoding (buffer size: #{buf_sz})" do
335
+ before(:each) do
336
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
337
+ @expected_full_read_size = @test_file_size
338
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8")
339
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8")
340
+ @expected_returned_encoding = Encoding.find("UTF-8")
341
+
342
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
343
+ end
344
+
345
+ after(:each) do
346
+ @vfile_read_test_obj.close
347
+ @rfile_obj.close
348
+ end
349
+
350
+ it_should_behave_like "common_each_each_codepoint"
351
+ end
352
+
353
+ context "UTF-16LE encoding (buffer size: #{buf_sz})" do
354
+ before(:each) do
355
+ @test_file_size = VfsRealFile.size(@utf_16_filename)
356
+ @expected_full_read_size = @test_file_size
357
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_16_filename, "rb:UTF-16LE")
358
+ @rfile_obj = VfsRealFile.new(@utf_16_filename, "rb:UTF-16LE")
359
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
360
+
361
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
362
+ end
363
+
364
+ after(:each) do
365
+ @vfile_read_test_obj.close
366
+ @rfile_obj.close
367
+ end
368
+
369
+ it_should_behave_like "common_each_each_codepoint"
370
+ end
371
+ end
372
+
373
+ describe "#getbyte - Buffer size: #{buf_sz}" do
374
+ context "Buffer size: #{buf_sz}" do
375
+ before(:each) do
376
+ @vfile_read_obj.send(:min_read_buf_sz=, buf_sz)
377
+ @rfile_obj = VfsRealFile.new(@full_path, "r")
378
+ end
379
+
380
+ after(:each) do
381
+ @rfile_obj.close
382
+ end
383
+
384
+ it_should_behave_like "common_getbyte"
385
+ end
386
+ end
387
+
388
+ describe "#getc - Buffer size: #{buf_sz}" do
389
+ context "default encoding (buffer size: #{buf_sz})" do
390
+ before(:each) do
391
+ @test_file_size = @file_size
392
+ @expected_full_read_size = @file_size
393
+ @vfile_read_test_obj = @vfile_read_obj
394
+ @rfile_obj = VfsRealFile.new(@full_path, "r")
395
+ @expected_returned_encoding = Encoding.default_external
396
+
397
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
398
+ end
399
+
400
+ after(:each) do
401
+ @rfile_obj.close
402
+ end
403
+
404
+ it_should_behave_like "common_getc"
405
+ end
406
+
407
+ context "UTF-8 encoding (buffer size: #{buf_sz})" do
408
+ before(:each) do
409
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
410
+ @expected_full_read_size = @test_file_size
411
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8")
412
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8")
413
+ @expected_returned_encoding = Encoding.find("UTF-8")
414
+
415
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
416
+ end
417
+
418
+ after(:each) do
419
+ @vfile_read_test_obj.close
420
+ @rfile_obj.close
421
+ end
422
+
423
+ it_should_behave_like "common_getc"
424
+ end
425
+
426
+ context "UTF-16LE encoding (buffer size: #{buf_sz})" do
427
+ before(:each) do
428
+ @test_file_size = VfsRealFile.size(@utf_16_filename)
429
+ @expected_full_read_size = @test_file_size
430
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_16_filename, "rb:UTF-16LE")
431
+ @rfile_obj = VfsRealFile.new(@utf_16_filename, "rb:UTF-16LE")
432
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
433
+
434
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
435
+ end
436
+
437
+ after(:each) do
438
+ @vfile_read_test_obj.close
439
+ @rfile_obj.close
440
+ end
441
+
442
+ it_should_behave_like "common_getc"
443
+ end
444
+
445
+ context "Transcode UTF-8 to UTF-16LE (buffer size: #{buf_sz})" do
446
+ before(:each) do
447
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
448
+ @expected_full_read_size = VfsRealFile.size(@utf_16_filename)
449
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
450
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
451
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
452
+
453
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
454
+ end
455
+
456
+ after(:each) do
457
+ @vfile_read_test_obj.close
458
+ @rfile_obj.close
459
+ end
460
+
461
+ it_should_behave_like "common_getc"
462
+ end
463
+ end
464
+
465
+ describe "#gets - Buffer size: #{buf_sz}" do
466
+ context "default encoding (buffer size: #{buf_sz})" do
467
+ before(:each) do
468
+ @test_file_size = @file_size
469
+ @expected_full_read_size = @file_size
470
+ @vfile_read_test_obj = @vfile_read_obj
471
+ @rfile_obj = VfsRealFile.new(@full_path, "r")
472
+ @expected_returned_encoding = Encoding.default_external
473
+
474
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
475
+ end
476
+
477
+ after(:each) do
478
+ @rfile_obj.close
479
+ end
480
+
481
+ it_should_behave_like "common_gets"
482
+ end
483
+
484
+ context "UTF-8 encoding (buffer size: #{buf_sz})" do
485
+ before(:each) do
486
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
487
+ @expected_full_read_size = @test_file_size
488
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8")
489
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8")
490
+ @expected_returned_encoding = Encoding.find("UTF-8")
491
+
492
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
493
+ end
494
+
495
+ after(:each) do
496
+ @vfile_read_test_obj.close
497
+ @rfile_obj.close
498
+ end
499
+
500
+ it_should_behave_like "common_gets"
501
+ end
502
+
503
+ context "UTF-16LE encoding (buffer size: #{buf_sz})" do
504
+ before(:each) do
505
+ @test_file_size = VfsRealFile.size(@utf_16_filename)
506
+ @expected_full_read_size = @test_file_size
507
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_16_filename, "rb:UTF-16LE")
508
+ @rfile_obj = VfsRealFile.new(@utf_16_filename, "rb:UTF-16LE")
509
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
510
+
511
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
512
+ end
513
+
514
+ after(:each) do
515
+ @vfile_read_test_obj.close
516
+ @rfile_obj.close
517
+ end
518
+
519
+ it_should_behave_like "common_gets"
520
+ end
521
+
522
+ context "Transcode UTF-8 to UTF-16LE (buffer size: #{buf_sz})" do
523
+ before(:each) do
524
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
525
+ @expected_full_read_size = VfsRealFile.size(@utf_16_filename)
526
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
527
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
528
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
529
+
530
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
531
+ end
532
+
533
+ after(:each) do
534
+ @vfile_read_test_obj.close
535
+ @rfile_obj.close
536
+ end
537
+
538
+ it_should_behave_like "common_gets"
539
+ end
540
+ end
541
+
542
+ describe "#lines - Buffer size: #{buf_sz}" do # deprecated
543
+ context "default encoding (buffer size: #{buf_sz})" do
544
+ before(:each) do
545
+ @test_file_size = @file_size
546
+ @expected_full_read_size = @file_size
547
+ @vfile_read_test_obj = @vfile_read_obj
548
+ @rfile_obj = VfsRealFile.new(@full_path, "r")
549
+ @expected_returned_encoding = Encoding.default_external
550
+
551
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
552
+ end
553
+
554
+ after(:each) do
555
+ @rfile_obj.close
556
+ end
557
+
558
+ it_should_behave_like "common_lines"
559
+ end
560
+
561
+ context "UTF-8 encoding (buffer size: #{buf_sz})" do
562
+ before(:each) do
563
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
564
+ @expected_full_read_size = @test_file_size
565
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8")
566
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8")
567
+ @expected_returned_encoding = Encoding.find("UTF-8")
568
+
569
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
570
+ end
571
+
572
+ after(:each) do
573
+ @vfile_read_test_obj.close
574
+ @rfile_obj.close
575
+ end
576
+
577
+ it_should_behave_like "common_lines"
578
+ end
579
+
580
+ context "UTF-16LE encoding (buffer size: #{buf_sz})" do
581
+ before(:each) do
582
+ @test_file_size = VfsRealFile.size(@utf_16_filename)
583
+ @expected_full_read_size = @test_file_size
584
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_16_filename, "rb:UTF-16LE")
585
+ @rfile_obj = VfsRealFile.new(@utf_16_filename, "rb:UTF-16LE")
586
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
587
+
588
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
589
+ end
590
+
591
+ after(:each) do
592
+ @vfile_read_test_obj.close
593
+ @rfile_obj.close
594
+ end
595
+
596
+ it_should_behave_like "common_lines"
597
+ end
598
+
599
+ context "Transcode UTF-8 to UTF-16LE (buffer size: #{buf_sz})" do
600
+ before(:each) do
601
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
602
+ @expected_full_read_size = VfsRealFile.size(@utf_16_filename)
603
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
604
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
605
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
606
+
607
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
608
+ end
609
+
610
+ after(:each) do
611
+ @vfile_read_test_obj.close
612
+ @rfile_obj.close
613
+ end
614
+
615
+ it_should_behave_like "common_lines"
616
+ end
617
+ end
618
+
619
+ describe "#read - Buffer size: #{buf_sz}" do
620
+ context "default encoding (buffer size: #{buf_sz})" do
621
+ before(:each) do
622
+ @test_file_size = @file_size
623
+ @expected_full_read_size = @file_size
624
+ @vfile_read_test_obj = @vfile_read_obj
625
+ @rfile_obj = VfsRealFile.new(@full_path, "r")
626
+ @expected_returned_encoding = Encoding.default_external
627
+
628
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
629
+ end
630
+
631
+ after(:each) do
632
+ @rfile_obj.close
633
+ end
634
+
635
+ it_should_behave_like "common_read"
636
+ end
637
+
638
+ context "UTF-8 encoding (buffer size: #{buf_sz})" do
639
+ before(:each) do
640
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
641
+ @expected_full_read_size = @test_file_size
642
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8")
643
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8")
644
+ @expected_returned_encoding = Encoding.find("UTF-8")
645
+
646
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
647
+ end
648
+
649
+ after(:each) do
650
+ @vfile_read_test_obj.close
651
+ @rfile_obj.close
652
+ end
653
+
654
+ it_should_behave_like "common_read"
655
+ end
656
+
657
+ context "UTF-16LE encoding (buffer size: #{buf_sz})" do
658
+ before(:each) do
659
+ @test_file_size = VfsRealFile.size(@utf_16_filename)
660
+ @expected_full_read_size = @test_file_size
661
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_16_filename, "rb:UTF-16LE")
662
+ @rfile_obj = VfsRealFile.new(@utf_16_filename, "rb:UTF-16LE")
663
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
664
+
665
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
666
+ end
667
+
668
+ after(:each) do
669
+ @vfile_read_test_obj.close
670
+ @rfile_obj.close
671
+ end
672
+
673
+ it_should_behave_like "common_read"
674
+ end
675
+
676
+ context "Transcode UTF-8 to UTF-16LE (buffer size: #{buf_sz})" do
677
+ before(:each) do
678
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
679
+ @expected_full_read_size = VfsRealFile.size(@utf_16_filename)
680
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
681
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
682
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
683
+
684
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
685
+ end
686
+
687
+ after(:each) do
688
+ @vfile_read_test_obj.close
689
+ @rfile_obj.close
690
+ end
691
+
692
+ it_should_behave_like "common_read"
693
+ end
694
+ end
695
+
696
+ describe "#readlines - Buffer size: #{buf_sz}" do
697
+ context "default encoding (buffer size: #{buf_sz})" do
698
+ before(:each) do
699
+ @test_file_size = @file_size
700
+ @expected_full_read_size = @file_size
701
+ @vfile_read_test_obj = @vfile_read_obj
702
+ @rfile_obj = VfsRealFile.new(@full_path, "r")
703
+ @expected_returned_encoding = Encoding.default_external
704
+
705
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
706
+ end
707
+
708
+ after(:each) do
709
+ @rfile_obj.close
710
+ end
711
+
712
+ it_should_behave_like "common_readlines"
713
+ end
714
+
715
+ context "UTF-8 encoding (buffer size: #{buf_sz})" do
716
+ before(:each) do
717
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
718
+ @expected_full_read_size = @test_file_size
719
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8")
720
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8")
721
+ @expected_returned_encoding = Encoding.find("UTF-8")
722
+
723
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
724
+ end
725
+
726
+ after(:each) do
727
+ @vfile_read_test_obj.close
728
+ @rfile_obj.close
729
+ end
730
+
731
+ it_should_behave_like "common_readlines"
732
+ end
733
+
734
+ context "UTF-16LE encoding (buffer size: #{buf_sz})" do
735
+ before(:each) do
736
+ @test_file_size = VfsRealFile.size(@utf_16_filename)
737
+ @expected_full_read_size = @test_file_size
738
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_16_filename, "rb:UTF-16LE")
739
+ @rfile_obj = VfsRealFile.new(@utf_16_filename, "rb:UTF-16LE")
740
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
741
+
742
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
743
+ end
744
+
745
+ after(:each) do
746
+ @vfile_read_test_obj.close
747
+ @rfile_obj.close
748
+ end
749
+
750
+ it_should_behave_like "common_readlines"
751
+ end
752
+
753
+ context "Transcode UTF-8 to UTF-16LE (buffer size: #{buf_sz})" do
754
+ before(:each) do
755
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
756
+ @expected_full_read_size = VfsRealFile.size(@utf_16_filename)
757
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
758
+ @rfile_obj = VfsRealFile.new(@utf_8_filename, "r:UTF-8:UTF-16LE")
759
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
760
+
761
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
762
+ end
763
+
764
+ after(:each) do
765
+ @vfile_read_test_obj.close
766
+ @rfile_obj.close
767
+ end
768
+
769
+ it_should_behave_like "common_readlines"
770
+ end
771
+ end
772
+
773
+ describe "#ungetbyte - Buffer size: #{buf_sz}" do
774
+ context "default encoding (buffer size: #{buf_sz})" do
775
+ before(:each) do
776
+ @test_file_size = @file_size
777
+ @vfile_read_test_obj = @vfile_read_obj
778
+ @expected_returned_encoding = Encoding.default_external
779
+
780
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
781
+
782
+ @char = "X"
783
+ @bytes_for_char = @char.dup.force_encoding("ASCII-8BIT")
784
+ @expected_return_char = @char
785
+ end
786
+
787
+ it_should_behave_like "common_ungetbyte"
788
+ end
789
+
790
+ context "UTF-8 encoding (buffer size: #{buf_sz})" do
791
+ before(:each) do
792
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
793
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8")
794
+ @expected_returned_encoding = Encoding.find("UTF-8")
795
+
796
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
797
+
798
+ @char = "X".encode("UTF-8")
799
+ @bytes_for_char = @char.dup.force_encoding("ASCII-8BIT")
800
+ @expected_return_char = @char
801
+ end
802
+
803
+ it_should_behave_like "common_ungetbyte"
804
+ end
805
+
806
+ context "UTF-16LE encoding (buffer size: #{buf_sz})" do
807
+ before(:each) do
808
+ @test_file_size = VfsRealFile.size(@utf_16_filename)
809
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_16_filename, "rb:UTF-16LE")
810
+ @expected_returned_encoding = Encoding.find("UTF-16LE")
811
+
812
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
813
+
814
+ @char = "X".encode("UTF-16LE")
815
+ @bytes_for_char = @char.dup.force_encoding("ASCII-8BIT")
816
+ @expected_return_char = @char
817
+ end
818
+
819
+ it_should_behave_like "common_ungetbyte"
820
+ end
821
+ end
822
+
823
+ describe "#ungetc - Buffer size: #{buf_sz}" do
824
+ context "default encoding (buffer size: #{buf_sz})" do
825
+ before(:each) do
826
+ @test_file_size = @file_size
827
+ @vfile_read_test_obj = @vfile_read_obj
828
+ @expected_returned_encoding = Encoding.default_external
829
+
830
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
831
+ end
832
+
833
+ it_should_behave_like "common_ungetc"
834
+ end
835
+
836
+ context "UTF-8 encoding (buffer size: #{buf_sz})" do
837
+ before(:each) do
838
+ @test_file_size = VfsRealFile.size(@utf_8_filename)
839
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_8_filename, "r:UTF-8")
840
+ @expected_returned_encoding = Encoding.find("UTF-8")
841
+
842
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
843
+ end
844
+
845
+ it_should_behave_like "common_ungetc"
846
+ end
847
+
848
+ context "UTF-16LE encoding (buffer size: #{buf_sz})" do
849
+ before(:each) do
850
+ @test_file_size = VfsRealFile.size(@utf_16_filename)
851
+ @vfile_read_test_obj = VirtFS::VFile.new(@utf_16_filename, "rb:UTF-16LE:UTF-8")
852
+ @expected_returned_encoding = Encoding.find("UTF-8")
853
+
854
+ @vfile_read_test_obj.send(:min_read_buf_sz=, buf_sz)
855
+ end
856
+
857
+ it_should_behave_like "common_ungetc"
858
+ end
859
+ end
860
+ end
861
+ end