test/file_test.rb in rubyzip-1.2.3 vs test/file_test.rb in rubyzip-1.2.4
- old
+ new
@@ -101,27 +101,72 @@
assert_equal('Putting stuff in data/generated/empty.txt', zf.read('test/data/generated/empty.txt'))
assert_equal(File.open('test/data/generated/5entry.zip', 'rb').read, zf.read('entry.bin'))
end
end
+ def test_open_buffer_with_string
+ string = File.read('test/data/rubycode.zip')
+ ::Zip::File.open_buffer string do |zf|
+ assert zf.entries.map { |e| e.name }.include?('zippedruby1.rb')
+ end
+ end
+
def test_open_buffer_with_stringio
string_io = StringIO.new File.read('test/data/rubycode.zip')
::Zip::File.open_buffer string_io do |zf|
assert zf.entries.map { |e| e.name }.include?('zippedruby1.rb')
end
end
def test_close_buffer_with_stringio
string_io = StringIO.new File.read('test/data/rubycode.zip')
zf = ::Zip::File.open_buffer string_io
- assert(zf.close || true) # Poor man's refute_raises
+ assert_nil zf.close
end
- def test_close_buffer_with_io
- f = File.open('test/data/rubycode.zip')
- zf = ::Zip::File.open_buffer f
- assert zf.close
- f.close
+ def test_open_buffer_no_op_does_not_change_file
+ Dir.mktmpdir do |tmp|
+ test_zip = File.join(tmp, 'test.zip')
+ FileUtils.cp 'test/data/rubycode.zip', test_zip
+
+ # Note: this may change the file if it is opened with r+b instead of rb.
+ # The 'extra fields' in this particular zip file get reordered.
+ File.open(test_zip, 'rb') do |file|
+ Zip::File.open_buffer(file) do |zf|
+ nil # do nothing
+ end
+ end
+
+ assert_equal \
+ File.binread('test/data/rubycode.zip'),
+ File.binread(test_zip)
+ end
+ end
+
+ def test_open_buffer_close_does_not_change_file
+ Dir.mktmpdir do |tmp|
+ test_zip = File.join(tmp, 'test.zip')
+ FileUtils.cp 'test/data/rubycode.zip', test_zip
+
+ File.open(test_zip, 'rb') do |file|
+ zf = Zip::File.open_buffer(file)
+ refute zf.commit_required?
+ assert_nil zf.close
+ end
+
+ assert_equal \
+ File.binread('test/data/rubycode.zip'),
+ File.binread(test_zip)
+ end
+ end
+
+ def test_open_buffer_with_io_and_block
+ File.open('test/data/rubycode.zip') do |io|
+ io.set_encoding(Encoding::BINARY) # not strictly required but can be set
+ Zip::File.open_buffer(io) do |zip_io|
+ # left empty on purpose
+ end
+ end
end
def test_open_buffer_without_block
string_io = StringIO.new File.read('test/data/rubycode.zip')
zf = ::Zip::File.open_buffer string_io