rubyzip 1.2.1 → 1.3.0

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 (64) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +89 -35
  3. data/lib/zip/central_directory.rb +3 -3
  4. data/lib/zip/compressor.rb +1 -2
  5. data/lib/zip/constants.rb +3 -3
  6. data/lib/zip/crypto/null_encryption.rb +2 -4
  7. data/lib/zip/decompressor.rb +1 -1
  8. data/lib/zip/dos_time.rb +1 -1
  9. data/lib/zip/entry.rb +67 -57
  10. data/lib/zip/entry_set.rb +3 -3
  11. data/lib/zip/errors.rb +1 -0
  12. data/lib/zip/extra_field/generic.rb +1 -1
  13. data/lib/zip/extra_field/zip64_placeholder.rb +1 -2
  14. data/lib/zip/extra_field.rb +2 -2
  15. data/lib/zip/file.rb +47 -27
  16. data/lib/zip/filesystem.rb +17 -13
  17. data/lib/zip/inflater.rb +2 -2
  18. data/lib/zip/input_stream.rb +10 -7
  19. data/lib/zip/ioextras/abstract_input_stream.rb +1 -1
  20. data/lib/zip/ioextras/abstract_output_stream.rb +1 -1
  21. data/lib/zip/output_stream.rb +5 -5
  22. data/lib/zip/pass_thru_decompressor.rb +1 -1
  23. data/lib/zip/streamable_stream.rb +1 -1
  24. data/lib/zip/version.rb +1 -1
  25. data/lib/zip.rb +11 -1
  26. data/samples/example_recursive.rb +14 -15
  27. data/samples/gtk_ruby_zip.rb +1 -1
  28. data/samples/qtzip.rb +1 -1
  29. data/samples/zipfind.rb +2 -2
  30. data/test/central_directory_entry_test.rb +1 -1
  31. data/test/data/gpbit3stored.zip +0 -0
  32. data/test/data/path_traversal/Makefile +10 -0
  33. data/test/data/path_traversal/jwilk/README.md +5 -0
  34. data/test/data/path_traversal/jwilk/absolute1.zip +0 -0
  35. data/test/data/path_traversal/jwilk/absolute2.zip +0 -0
  36. data/test/data/path_traversal/jwilk/dirsymlink.zip +0 -0
  37. data/test/data/path_traversal/jwilk/dirsymlink2a.zip +0 -0
  38. data/test/data/path_traversal/jwilk/dirsymlink2b.zip +0 -0
  39. data/test/data/path_traversal/jwilk/relative0.zip +0 -0
  40. data/test/data/path_traversal/jwilk/relative2.zip +0 -0
  41. data/test/data/path_traversal/jwilk/symlink.zip +0 -0
  42. data/test/data/path_traversal/relative1.zip +0 -0
  43. data/test/data/path_traversal/tilde.zip +0 -0
  44. data/test/data/path_traversal/tuzovakaoff/README.md +3 -0
  45. data/test/data/path_traversal/tuzovakaoff/absolutepath.zip +0 -0
  46. data/test/data/path_traversal/tuzovakaoff/symlink.zip +0 -0
  47. data/test/data/rubycode.zip +0 -0
  48. data/test/errors_test.rb +1 -0
  49. data/test/file_extract_test.rb +62 -0
  50. data/test/file_permissions_test.rb +11 -15
  51. data/test/file_test.rb +92 -9
  52. data/test/filesystem/dir_iterator_test.rb +1 -1
  53. data/test/filesystem/directory_test.rb +29 -11
  54. data/test/filesystem/file_mutating_test.rb +3 -4
  55. data/test/filesystem/file_nonmutating_test.rb +31 -31
  56. data/test/filesystem/file_stat_test.rb +4 -4
  57. data/test/gentestfiles.rb +13 -13
  58. data/test/input_stream_test.rb +6 -6
  59. data/test/ioextras/abstract_output_stream_test.rb +2 -2
  60. data/test/path_traversal_test.rb +141 -0
  61. data/test/test_helper.rb +2 -2
  62. data/test/unicode_file_names_and_comments_test.rb +12 -0
  63. data/test/zip64_full_test.rb +2 -2
  64. metadata +103 -51
@@ -1,9 +1,8 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class FilePermissionsTest < MiniTest::Test
4
-
5
- ZIPNAME = File.join(File.dirname(__FILE__), "umask.zip")
6
- FILENAME = File.join(File.dirname(__FILE__), "umask.txt")
4
+ ZIPNAME = File.join(File.dirname(__FILE__), 'umask.zip')
5
+ FILENAME = File.join(File.dirname(__FILE__), 'umask.txt')
7
6
 
8
7
  def teardown
9
8
  ::File.unlink(ZIPNAME)
@@ -16,7 +15,7 @@ class FilePermissionsTest < MiniTest::Test
16
15
  end
17
16
 
18
17
  def test_umask_000
19
- set_umask(0000) do
18
+ set_umask(0o000) do
20
19
  create_files
21
20
  end
22
21
 
@@ -24,7 +23,7 @@ class FilePermissionsTest < MiniTest::Test
24
23
  end
25
24
 
26
25
  def test_umask_066
27
- set_umask(0066) do
26
+ set_umask(0o066) do
28
27
  create_files
29
28
  end
30
29
 
@@ -32,7 +31,7 @@ class FilePermissionsTest < MiniTest::Test
32
31
  end
33
32
 
34
33
  def test_umask_027
35
- set_umask(0027) do
34
+ set_umask(0o027) do
36
35
  create_files
37
36
  end
38
37
 
@@ -48,7 +47,7 @@ class FilePermissionsTest < MiniTest::Test
48
47
 
49
48
  def create_files
50
49
  ::Zip::File.open(ZIPNAME, ::Zip::File::CREATE) do |zip|
51
- zip.comment = "test"
50
+ zip.comment = 'test'
52
51
  end
53
52
 
54
53
  ::File.open(FILENAME, 'w') do |file|
@@ -57,13 +56,10 @@ class FilePermissionsTest < MiniTest::Test
57
56
  end
58
57
 
59
58
  # If anything goes wrong, make sure the umask is restored.
60
- def set_umask(umask, &block)
61
- begin
62
- saved_umask = ::File.umask(umask)
63
- yield
64
- ensure
65
- ::File.umask(saved_umask)
66
- end
59
+ def set_umask(umask)
60
+ saved_umask = ::File.umask(umask)
61
+ yield
62
+ ensure
63
+ ::File.umask(saved_umask)
67
64
  end
68
-
69
65
  end
data/test/file_test.rb CHANGED
@@ -55,6 +55,12 @@ class ZipFileTest < MiniTest::Test
55
55
  assert_equal(2, zfRead.entries.length)
56
56
  end
57
57
 
58
+ def test_get_input_stream_stored_with_gpflag_bit3
59
+ ::Zip::File.open('test/data/gpbit3stored.zip') do |zf|
60
+ assert_equal("foo\n", zf.read("foo.txt"))
61
+ end
62
+ end
63
+
58
64
  def test_get_output_stream
59
65
  entryCount = nil
60
66
  ::Zip::File.open(TEST_ZIP.zip_name) do |zf|
@@ -97,6 +103,13 @@ class ZipFileTest < MiniTest::Test
97
103
  end
98
104
  end
99
105
 
106
+ def test_open_buffer_with_string
107
+ string = File.read('test/data/rubycode.zip')
108
+ ::Zip::File.open_buffer string do |zf|
109
+ assert zf.entries.map { |e| e.name }.include?('zippedruby1.rb')
110
+ end
111
+ end
112
+
100
113
  def test_open_buffer_with_stringio
101
114
  string_io = StringIO.new File.read('test/data/rubycode.zip')
102
115
  ::Zip::File.open_buffer string_io do |zf|
@@ -104,6 +117,57 @@ class ZipFileTest < MiniTest::Test
104
117
  end
105
118
  end
106
119
 
120
+ def test_close_buffer_with_stringio
121
+ string_io = StringIO.new File.read('test/data/rubycode.zip')
122
+ zf = ::Zip::File.open_buffer string_io
123
+ assert_nil zf.close
124
+ end
125
+
126
+ def test_open_buffer_no_op_does_not_change_file
127
+ Dir.mktmpdir do |tmp|
128
+ test_zip = File.join(tmp, 'test.zip')
129
+ FileUtils.cp 'test/data/rubycode.zip', test_zip
130
+
131
+ # Note: this may change the file if it is opened with r+b instead of rb.
132
+ # The 'extra fields' in this particular zip file get reordered.
133
+ File.open(test_zip, 'rb') do |file|
134
+ Zip::File.open_buffer(file) do |zf|
135
+ nil # do nothing
136
+ end
137
+ end
138
+
139
+ assert_equal \
140
+ File.binread('test/data/rubycode.zip'),
141
+ File.binread(test_zip)
142
+ end
143
+ end
144
+
145
+ def test_open_buffer_close_does_not_change_file
146
+ Dir.mktmpdir do |tmp|
147
+ test_zip = File.join(tmp, 'test.zip')
148
+ FileUtils.cp 'test/data/rubycode.zip', test_zip
149
+
150
+ File.open(test_zip, 'rb') do |file|
151
+ zf = Zip::File.open_buffer(file)
152
+ refute zf.commit_required?
153
+ assert_nil zf.close
154
+ end
155
+
156
+ assert_equal \
157
+ File.binread('test/data/rubycode.zip'),
158
+ File.binread(test_zip)
159
+ end
160
+ end
161
+
162
+ def test_open_buffer_with_io_and_block
163
+ File.open('test/data/rubycode.zip') do |io|
164
+ io.set_encoding(Encoding::BINARY) # not strictly required but can be set
165
+ Zip::File.open_buffer(io) do |zip_io|
166
+ # left empty on purpose
167
+ end
168
+ end
169
+ end
170
+
107
171
  def test_open_buffer_without_block
108
172
  string_io = StringIO.new File.read('test/data/rubycode.zip')
109
173
  zf = ::Zip::File.open_buffer string_io
@@ -140,17 +204,37 @@ class ZipFileTest < MiniTest::Test
140
204
  zfRead.get_input_stream(entryName) { |zis| zis.read })
141
205
  end
142
206
 
207
+ def test_add_stored
208
+ srcFile = 'test/data/file2.txt'
209
+ entryName = 'newEntryName.rb'
210
+ assert(::File.exist?(srcFile))
211
+ zf = ::Zip::File.new(EMPTY_FILENAME, ::Zip::File::CREATE)
212
+ zf.add_stored(entryName, srcFile)
213
+ zf.close
214
+
215
+ zfRead = ::Zip::File.new(EMPTY_FILENAME)
216
+ entry = zfRead.entries.first
217
+ assert_equal('', zfRead.comment)
218
+ assert_equal(1, zfRead.entries.length)
219
+ assert_equal(entryName, entry.name)
220
+ assert_equal(File.size(srcFile), entry.size)
221
+ assert_equal(entry.size, entry.compressed_size)
222
+ assert_equal(::Zip::Entry::STORED, entry.compression_method)
223
+ AssertEntry.assert_contents(srcFile,
224
+ zfRead.get_input_stream(entryName) { |zis| zis.read })
225
+ end
226
+
143
227
  def test_recover_permissions_after_add_files_to_archive
144
228
  srcZip = TEST_ZIP.zip_name
145
- ::File.chmod(0664, srcZip)
229
+ ::File.chmod(0o664, srcZip)
146
230
  srcFile = 'test/data/file2.txt'
147
231
  entryName = 'newEntryName.rb'
148
- assert_equal(::File.stat(srcZip).mode, 0100664)
232
+ assert_equal(::File.stat(srcZip).mode, 0o100664)
149
233
  assert(::File.exist?(srcZip))
150
234
  zf = ::Zip::File.new(srcZip, ::Zip::File::CREATE)
151
235
  zf.add(entryName, srcFile)
152
236
  zf.close
153
- assert_equal(::File.stat(srcZip).mode, 0100664)
237
+ assert_equal(::File.stat(srcZip).mode, 0o100664)
154
238
  end
155
239
 
156
240
  def test_add_existing_entry_name
@@ -234,7 +318,7 @@ class ZipFileTest < MiniTest::Test
234
318
  zf.mkdir('test')
235
319
  arr << 'test/'
236
320
  arr_renamed << 'Ztest/'
237
- %w(a b c d).each do |f|
321
+ %w[a b c d].each do |f|
238
322
  zf.get_output_stream("test/#{f}") { |file| file.puts 'aaaa' }
239
323
  arr << "test/#{f}"
240
324
  arr_renamed << "Ztest/#{f}"
@@ -329,7 +413,7 @@ class ZipFileTest < MiniTest::Test
329
413
 
330
414
  def test_replace_non_entry
331
415
  entryToReplace = 'nonExistingEntryname'
332
- ::Zip::File.open(TEST_ZIP.zip_name) do |zf|
416
+ ::Zip::File.open(TEST_ZIP.zip_name) do |zf|
333
417
  assert_raises(Errno::ENOENT) { zf.replace(entryToReplace, 'test/data/file2.txt') }
334
418
  end
335
419
  end
@@ -347,7 +431,7 @@ class ZipFileTest < MiniTest::Test
347
431
  zfRead.close
348
432
 
349
433
  zf.close
350
- res = system("unzip -t #{TEST_ZIP.zip_name}")
434
+ res = system("unzip -tqq #{TEST_ZIP.zip_name}")
351
435
  assert_equal(res, true)
352
436
  end
353
437
 
@@ -363,7 +447,7 @@ class ZipFileTest < MiniTest::Test
363
447
  zf2 = ::Zip::File.open(filename)
364
448
  assert(zf2.entries.detect { |e| e.name == 'test1.txt' } != nil)
365
449
  assert(zf2.entries.detect { |e| e.name == 'test2.txt' } != nil)
366
- res = system("unzip -t #{filename}")
450
+ res = system("unzip -tqq #{filename}")
367
451
  assert_equal(res, true)
368
452
  end
369
453
 
@@ -434,7 +518,6 @@ class ZipFileTest < MiniTest::Test
434
518
  filename_to_remove = originalEntries.map(&:to_s).find { |name| name.match('longBinary') }
435
519
  zf.remove(filename_to_remove)
436
520
  assert_not_contains(zf, filename_to_remove)
437
-
438
521
  ensure
439
522
  zf.close
440
523
  end
@@ -558,7 +641,7 @@ class ZipFileTest < MiniTest::Test
558
641
  entry_count = 0
559
642
  File.open 'test/data/oddExtraField.zip', 'rb' do |zip_io|
560
643
  Zip::File.open_buffer zip_io.read do |zip|
561
- zip.each do |zip_entry|
644
+ zip.each do |_zip_entry|
562
645
  entry_count += 1
563
646
  end
564
647
  end
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
  require 'zip/filesystem'
3
3
 
4
4
  class ZipFsDirIteratorTest < MiniTest::Test
5
- FILENAME_ARRAY = %w(f1 f2 f3 f4 f5 f6)
5
+ FILENAME_ARRAY = %w[f1 f2 f3 f4 f5 f6]
6
6
 
7
7
  def setup
8
8
  @dirIt = ::Zip::FileSystem::ZipFsDirIterator.new(FILENAME_ARRAY)
@@ -3,6 +3,7 @@ require 'zip/filesystem'
3
3
 
4
4
  class ZipFsDirectoryTest < MiniTest::Test
5
5
  TEST_ZIP = 'test/data/generated/zipWithDirs_copy.zip'
6
+ GLOB_TEST_ZIP = 'test/data/globTest.zip'
6
7
 
7
8
  def setup
8
9
  FileUtils.cp('test/data/zipWithDirs.zip', TEST_ZIP)
@@ -51,10 +52,10 @@ class ZipFsDirectoryTest < MiniTest::Test
51
52
  zf.dir.chdir 'file1'
52
53
  end
53
54
 
54
- assert_equal(%w(dir1 dir2 file1).sort, zf.dir.entries('.').sort)
55
+ assert_equal(%w[dir1 dir2 file1].sort, zf.dir.entries('.').sort)
55
56
  zf.dir.chdir 'dir1'
56
57
  assert_equal('/dir1', zf.dir.pwd)
57
- assert_equal(%w(dir11 file11 file12), zf.dir.entries('.').sort)
58
+ assert_equal(%w[dir11 file11 file12], zf.dir.entries('.').sort)
58
59
 
59
60
  zf.dir.chdir '../dir2/dir21'
60
61
  assert_equal('/dir2/dir21', zf.dir.pwd)
@@ -77,11 +78,11 @@ class ZipFsDirectoryTest < MiniTest::Test
77
78
 
78
79
  entries = []
79
80
  zf.dir.foreach('.') { |e| entries << e }
80
- assert_equal(%w(dir1 dir2 file1).sort, entries.sort)
81
+ assert_equal(%w[dir1 dir2 file1].sort, entries.sort)
81
82
 
82
83
  entries = []
83
84
  zf.dir.foreach('dir1') { |e| entries << e }
84
- assert_equal(%w(dir11 file11 file12), entries.sort)
85
+ assert_equal(%w[dir11 file11 file12], entries.sort)
85
86
  end
86
87
  end
87
88
 
@@ -93,11 +94,28 @@ class ZipFsDirectoryTest < MiniTest::Test
93
94
  end
94
95
  end
95
96
 
96
- # Globbing not supported yet
97
- # def test_glob
98
- # # test alias []-operator too
99
- # fail "implement test"
100
- # end
97
+ def test_glob
98
+ globbed_files = [
99
+ 'globTest/foo/bar/baz/foo.txt',
100
+ 'globTest/foo.txt',
101
+ 'globTest/food.txt'
102
+ ]
103
+
104
+ ::Zip::File.open(GLOB_TEST_ZIP) do |zf|
105
+ zf.dir.glob('**/*.txt') do |f|
106
+ assert globbed_files.include?(f.name)
107
+ end
108
+
109
+ zf.dir.glob('globTest/foo/**/*.txt') do |f|
110
+ assert_equal globbed_files[0], f.name
111
+ end
112
+
113
+ zf.dir.chdir('globTest/foo')
114
+ zf.dir.glob('**/*.txt') do |f|
115
+ assert_equal globbed_files[0], f.name
116
+ end
117
+ end
118
+ end
101
119
 
102
120
  def test_open_new
103
121
  ::Zip::File.open(TEST_ZIP) do |zf|
@@ -110,11 +128,11 @@ class ZipFsDirectoryTest < MiniTest::Test
110
128
  end
111
129
 
112
130
  d = zf.dir.new('.')
113
- assert_equal(%w(file1 dir1 dir2).sort, d.entries.sort)
131
+ assert_equal(%w[file1 dir1 dir2].sort, d.entries.sort)
114
132
  d.close
115
133
 
116
134
  zf.dir.open('dir1') do |dir|
117
- assert_equal(%w(dir11 file11 file12).sort, dir.entries.sort)
135
+ assert_equal(%w[dir11 file11 file12].sort, dir.entries.sort)
118
136
  end
119
137
  end
120
138
  end
@@ -7,8 +7,7 @@ class ZipFsFileMutatingTest < MiniTest::Test
7
7
  FileUtils.cp('test/data/zipWithDirs.zip', TEST_ZIP)
8
8
  end
9
9
 
10
- def teardown
11
- end
10
+ def teardown; end
12
11
 
13
12
  def test_delete
14
13
  do_test_delete_or_unlink(:delete)
@@ -51,11 +50,11 @@ class ZipFsFileMutatingTest < MiniTest::Test
51
50
 
52
51
  def test_chmod
53
52
  ::Zip::File.open(TEST_ZIP) do |zf|
54
- zf.file.chmod(0765, 'file1')
53
+ zf.file.chmod(0o765, 'file1')
55
54
  end
56
55
 
57
56
  ::Zip::File.open(TEST_ZIP) do |zf|
58
- assert_equal(0100765, zf.file.stat('file1').mode)
57
+ assert_equal(0o100765, zf.file.stat('file1').mode)
59
58
  end
60
59
  end
61
60
 
@@ -14,11 +14,11 @@ class ZipFsFileNonmutatingTest < MiniTest::Test
14
14
 
15
15
  def test_umask
16
16
  assert_equal(::File.umask, @zip_file.file.umask)
17
- @zip_file.file.umask(0006)
17
+ @zip_file.file.umask(0o006)
18
18
  end
19
19
 
20
20
  def test_exists?
21
- assert(! @zip_file.file.exists?('notAFile'))
21
+ assert(!@zip_file.file.exists?('notAFile'))
22
22
  assert(@zip_file.file.exists?('file1'))
23
23
  assert(@zip_file.file.exists?('dir1'))
24
24
  assert(@zip_file.file.exists?('dir1/'))
@@ -114,13 +114,13 @@ class ZipFsFileNonmutatingTest < MiniTest::Test
114
114
  def test_file?
115
115
  assert(@zip_file.file.file?('file1'))
116
116
  assert(@zip_file.file.file?('dir2/file21'))
117
- assert(! @zip_file.file.file?('dir1'))
118
- assert(! @zip_file.file.file?('dir1/dir11'))
117
+ assert(!@zip_file.file.file?('dir1'))
118
+ assert(!@zip_file.file.file?('dir1/dir11'))
119
119
 
120
120
  assert(@zip_file.file.stat('file1').file?)
121
121
  assert(@zip_file.file.stat('dir2/file21').file?)
122
- assert(! @zip_file.file.stat('dir1').file?)
123
- assert(! @zip_file.file.stat('dir1/dir11').file?)
122
+ assert(!@zip_file.file.stat('dir1').file?)
123
+ assert(!@zip_file.file.stat('dir1/dir11').file?)
124
124
  end
125
125
 
126
126
  include ExtraAssertions
@@ -160,15 +160,15 @@ class ZipFsFileNonmutatingTest < MiniTest::Test
160
160
  end
161
161
 
162
162
  def assert_always_false(operation)
163
- assert(! @zip_file.file.send(operation, 'noSuchFile'))
164
- assert(! @zip_file.file.send(operation, 'file1'))
165
- assert(! @zip_file.file.send(operation, 'dir1'))
166
- assert(! @zip_file.file.stat('file1').send(operation))
167
- assert(! @zip_file.file.stat('dir1').send(operation))
163
+ assert(!@zip_file.file.send(operation, 'noSuchFile'))
164
+ assert(!@zip_file.file.send(operation, 'file1'))
165
+ assert(!@zip_file.file.send(operation, 'dir1'))
166
+ assert(!@zip_file.file.stat('file1').send(operation))
167
+ assert(!@zip_file.file.stat('dir1').send(operation))
168
168
  end
169
169
 
170
170
  def assert_true_if_entry_exists(operation)
171
- assert(! @zip_file.file.send(operation, 'noSuchFile'))
171
+ assert(!@zip_file.file.send(operation, 'noSuchFile'))
172
172
  assert(@zip_file.file.send(operation, 'file1'))
173
173
  assert(@zip_file.file.send(operation, 'dir1'))
174
174
  assert(@zip_file.file.stat('file1').send(operation))
@@ -221,15 +221,15 @@ class ZipFsFileNonmutatingTest < MiniTest::Test
221
221
  end
222
222
 
223
223
  def test_directory?
224
- assert(! @zip_file.file.directory?('notAFile'))
225
- assert(! @zip_file.file.directory?('file1'))
226
- assert(! @zip_file.file.directory?('dir1/file11'))
224
+ assert(!@zip_file.file.directory?('notAFile'))
225
+ assert(!@zip_file.file.directory?('file1'))
226
+ assert(!@zip_file.file.directory?('dir1/file11'))
227
227
  assert(@zip_file.file.directory?('dir1'))
228
228
  assert(@zip_file.file.directory?('dir1/'))
229
229
  assert(@zip_file.file.directory?('dir2/dir21'))
230
230
 
231
- assert(! @zip_file.file.stat('file1').directory?)
232
- assert(! @zip_file.file.stat('dir1/file11').directory?)
231
+ assert(!@zip_file.file.stat('file1').directory?)
232
+ assert(!@zip_file.file.stat('dir1/file11').directory?)
233
233
  assert(@zip_file.file.stat('dir1').directory?)
234
234
  assert(@zip_file.file.stat('dir1/').directory?)
235
235
  assert(@zip_file.file.stat('dir2/dir21').directory?)
@@ -243,8 +243,8 @@ class ZipFsFileNonmutatingTest < MiniTest::Test
243
243
  end
244
244
 
245
245
  def test_zero?
246
- assert(! @zip_file.file.zero?('notAFile'))
247
- assert(! @zip_file.file.zero?('file1'))
246
+ assert(!@zip_file.file.zero?('notAFile'))
247
+ assert(!@zip_file.file.zero?('file1'))
248
248
  assert(@zip_file.file.zero?('dir1'))
249
249
  blockCalled = false
250
250
  ::Zip::File.open('test/data/generated/5entry.zip') do |zf|
@@ -253,7 +253,7 @@ class ZipFsFileNonmutatingTest < MiniTest::Test
253
253
  end
254
254
  assert(blockCalled)
255
255
 
256
- assert(! @zip_file.file.stat('file1').zero?)
256
+ assert(!@zip_file.file.stat('file1').zero?)
257
257
  assert(@zip_file.file.stat('dir1').zero?)
258
258
  blockCalled = false
259
259
  ::Zip::File.open('test/data/generated/5entry.zip') do |zf|
@@ -309,7 +309,7 @@ class ZipFsFileNonmutatingTest < MiniTest::Test
309
309
  end
310
310
 
311
311
  def test_readable?
312
- assert(! @zip_file.file.readable?('noSuchFile'))
312
+ assert(!@zip_file.file.readable?('noSuchFile'))
313
313
  assert(@zip_file.file.readable?('file1'))
314
314
  assert(@zip_file.file.readable?('dir1'))
315
315
  assert(@zip_file.file.stat('file1').readable?)
@@ -317,7 +317,7 @@ class ZipFsFileNonmutatingTest < MiniTest::Test
317
317
  end
318
318
 
319
319
  def test_readable_real?
320
- assert(! @zip_file.file.readable_real?('noSuchFile'))
320
+ assert(!@zip_file.file.readable_real?('noSuchFile'))
321
321
  assert(@zip_file.file.readable_real?('file1'))
322
322
  assert(@zip_file.file.readable_real?('dir1'))
323
323
  assert(@zip_file.file.stat('file1').readable_real?)
@@ -325,7 +325,7 @@ class ZipFsFileNonmutatingTest < MiniTest::Test
325
325
  end
326
326
 
327
327
  def test_writable?
328
- assert(! @zip_file.file.writable?('noSuchFile'))
328
+ assert(!@zip_file.file.writable?('noSuchFile'))
329
329
  assert(@zip_file.file.writable?('file1'))
330
330
  assert(@zip_file.file.writable?('dir1'))
331
331
  assert(@zip_file.file.stat('file1').writable?)
@@ -333,7 +333,7 @@ class ZipFsFileNonmutatingTest < MiniTest::Test
333
333
  end
334
334
 
335
335
  def test_writable_real?
336
- assert(! @zip_file.file.writable_real?('noSuchFile'))
336
+ assert(!@zip_file.file.writable_real?('noSuchFile'))
337
337
  assert(@zip_file.file.writable_real?('file1'))
338
338
  assert(@zip_file.file.writable_real?('dir1'))
339
339
  assert(@zip_file.file.stat('file1').writable_real?)
@@ -341,18 +341,18 @@ class ZipFsFileNonmutatingTest < MiniTest::Test
341
341
  end
342
342
 
343
343
  def test_executable?
344
- assert(! @zip_file.file.executable?('noSuchFile'))
345
- assert(! @zip_file.file.executable?('file1'))
344
+ assert(!@zip_file.file.executable?('noSuchFile'))
345
+ assert(!@zip_file.file.executable?('file1'))
346
346
  assert(@zip_file.file.executable?('dir1'))
347
- assert(! @zip_file.file.stat('file1').executable?)
347
+ assert(!@zip_file.file.stat('file1').executable?)
348
348
  assert(@zip_file.file.stat('dir1').executable?)
349
349
  end
350
350
 
351
351
  def test_executable_real?
352
- assert(! @zip_file.file.executable_real?('noSuchFile'))
353
- assert(! @zip_file.file.executable_real?('file1'))
352
+ assert(!@zip_file.file.executable_real?('noSuchFile'))
353
+ assert(!@zip_file.file.executable_real?('file1'))
354
354
  assert(@zip_file.file.executable_real?('dir1'))
355
- assert(! @zip_file.file.stat('file1').executable_real?)
355
+ assert(!@zip_file.file.stat('file1').executable_real?)
356
356
  assert(@zip_file.file.stat('dir1').executable_real?)
357
357
  end
358
358
 
@@ -455,7 +455,7 @@ class ZipFsFileNonmutatingTest < MiniTest::Test
455
455
  zf.glob('**/foo.txt') do |match|
456
456
  results << "<#{match.class.name}: #{match}>"
457
457
  end
458
- assert((!results.empty?), 'block not run, or run out of context')
458
+ assert(!results.empty?, 'block not run, or run out of context')
459
459
  assert_equal 2, results.size
460
460
  assert_operator results, :include?, '<Zip::Entry: globTest/foo.txt>'
461
461
  assert_operator results, :include?, '<Zip::Entry: globTest/foo/bar/baz/foo.txt>'
@@ -32,10 +32,10 @@ class ZipFsFileStatTest < MiniTest::Test
32
32
  end
33
33
 
34
34
  def test_mode
35
- assert_equal(0600, @zip_file.file.stat('file1').mode & 0777)
36
- assert_equal(0600, @zip_file.file.stat('file1').mode & 0777)
37
- assert_equal(0755, @zip_file.file.stat('dir1').mode & 0777)
38
- assert_equal(0755, @zip_file.file.stat('dir1').mode & 0777)
35
+ assert_equal(0o600, @zip_file.file.stat('file1').mode & 0o777)
36
+ assert_equal(0o600, @zip_file.file.stat('file1').mode & 0o777)
37
+ assert_equal(0o755, @zip_file.file.stat('dir1').mode & 0o777)
38
+ assert_equal(0o755, @zip_file.file.stat('dir1').mode & 0o777)
39
39
  end
40
40
 
41
41
  def test_dev
data/test/gentestfiles.rb CHANGED
@@ -71,12 +71,12 @@ class TestZipFile
71
71
  end
72
72
 
73
73
  def self.create_test_zips
74
- raise "failed to create test zip '#{TEST_ZIP1.zip_name}'" unless system("/usr/bin/zip #{TEST_ZIP1.zip_name} test/data/file2.txt")
75
- raise "failed to remove entry from '#{TEST_ZIP1.zip_name}'" unless system("/usr/bin/zip #{TEST_ZIP1.zip_name} -d test/data/file2.txt")
74
+ raise "failed to create test zip '#{TEST_ZIP1.zip_name}'" unless system("/usr/bin/zip -q #{TEST_ZIP1.zip_name} test/data/file2.txt")
75
+ raise "failed to remove entry from '#{TEST_ZIP1.zip_name}'" unless system("/usr/bin/zip -q #{TEST_ZIP1.zip_name} -d test/data/file2.txt")
76
76
 
77
77
  File.open('test/data/generated/empty.txt', 'w') {}
78
78
  File.open('test/data/generated/empty_chmod640.txt', 'w') {}
79
- ::File.chmod(0640, 'test/data/generated/empty_chmod640.txt')
79
+ ::File.chmod(0o640, 'test/data/generated/empty_chmod640.txt')
80
80
 
81
81
  File.open('test/data/generated/short.txt', 'w') { |file| file << 'ABCDEF' }
82
82
  ziptestTxt = ''
@@ -93,34 +93,34 @@ class TestZipFile
93
93
  file << testBinaryPattern << rand << "\0" while file.tell < 6E5
94
94
  end
95
95
 
96
- raise "failed to create test zip '#{TEST_ZIP2.zip_name}'" unless system("/usr/bin/zip #{TEST_ZIP2.zip_name} #{TEST_ZIP2.entry_names.join(' ')}")
96
+ raise "failed to create test zip '#{TEST_ZIP2.zip_name}'" unless system("/usr/bin/zip -q #{TEST_ZIP2.zip_name} #{TEST_ZIP2.entry_names.join(' ')}")
97
97
 
98
98
  if RUBY_PLATFORM =~ /mswin|mingw|cygwin/
99
- raise "failed to add comment to test zip '#{TEST_ZIP2.zip_name}'" unless system("echo #{TEST_ZIP2.comment}| /usr/bin/zip -z #{TEST_ZIP2.zip_name}\"")
99
+ raise "failed to add comment to test zip '#{TEST_ZIP2.zip_name}'" unless system("echo #{TEST_ZIP2.comment}| /usr/bin/zip -zq #{TEST_ZIP2.zip_name}\"")
100
100
  else
101
101
  # without bash system interprets everything after echo as parameters to
102
102
  # echo including | zip -z ...
103
- raise "failed to add comment to test zip '#{TEST_ZIP2.zip_name}'" unless system("bash -c \"echo #{TEST_ZIP2.comment} | /usr/bin/zip -z #{TEST_ZIP2.zip_name}\"")
103
+ raise "failed to add comment to test zip '#{TEST_ZIP2.zip_name}'" unless system("bash -c \"echo #{TEST_ZIP2.comment} | /usr/bin/zip -zq #{TEST_ZIP2.zip_name}\"")
104
104
  end
105
105
 
106
- raise "failed to create test zip '#{TEST_ZIP3.zip_name}'" unless system("/usr/bin/zip #{TEST_ZIP3.zip_name} #{TEST_ZIP3.entry_names.join(' ')}")
106
+ raise "failed to create test zip '#{TEST_ZIP3.zip_name}'" unless system("/usr/bin/zip -q #{TEST_ZIP3.zip_name} #{TEST_ZIP3.entry_names.join(' ')}")
107
107
 
108
- raise "failed to create test zip '#{TEST_ZIP4.zip_name}'" unless system("/usr/bin/zip #{TEST_ZIP4.zip_name} #{TEST_ZIP4.entry_names.join(' ')}")
108
+ raise "failed to create test zip '#{TEST_ZIP4.zip_name}'" unless system("/usr/bin/zip -q #{TEST_ZIP4.zip_name} #{TEST_ZIP4.entry_names.join(' ')}")
109
109
  rescue
110
110
  # If there are any Windows developers wanting to use a command line zip.exe
111
111
  # to help create the following files, there's a free one available from
112
112
  # http://stahlworks.com/dev/index.php?tool=zipunzip
113
113
  # that works with the above code
114
114
  raise $!.to_s +
115
- "\n\nziptest.rb requires the Info-ZIP program 'zip' in the path\n" \
116
- "to create test data. If you don't have it you can download\n" \
117
- 'the necessary test files at http://sf.net/projects/rubyzip.'
115
+ "\n\nziptest.rb requires the Info-ZIP program 'zip' in the path\n" \
116
+ "to create test data. If you don't have it you can download\n" \
117
+ 'the necessary test files at http://sf.net/projects/rubyzip.'
118
118
  end
119
119
 
120
120
  TEST_ZIP1 = TestZipFile.new('test/data/generated/empty.zip', [])
121
- TEST_ZIP2 = TestZipFile.new('test/data/generated/5entry.zip', %w(test/data/generated/longAscii.txt test/data/generated/empty.txt test/data/generated/empty_chmod640.txt test/data/generated/short.txt test/data/generated/longBinary.bin),
121
+ TEST_ZIP2 = TestZipFile.new('test/data/generated/5entry.zip', %w[test/data/generated/longAscii.txt test/data/generated/empty.txt test/data/generated/empty_chmod640.txt test/data/generated/short.txt test/data/generated/longBinary.bin],
122
122
  'my zip comment')
123
- TEST_ZIP3 = TestZipFile.new('test/data/generated/test1.zip', %w(test/data/file1.txt))
123
+ TEST_ZIP3 = TestZipFile.new('test/data/generated/test1.zip', %w[test/data/file1.txt])
124
124
  TEST_ZIP4 = TestZipFile.new('test/data/generated/zipWithDir.zip', ['test/data/file1.txt',
125
125
  TestFiles::EMPTY_TEST_DIR])
126
126
  end
@@ -70,7 +70,7 @@ class ZipInputStreamTest < MiniTest::Test
70
70
  entry = zis.get_next_entry # longAscii.txt
71
71
  assert_equal(false, zis.eof?)
72
72
  assert_equal(TestZipFile::TEST_ZIP2.entry_names[0], entry.name)
73
- assert zis.gets.length > 0
73
+ assert !zis.gets.empty?
74
74
  assert_equal(false, zis.eof?)
75
75
  entry = zis.get_next_entry # empty.txt
76
76
  assert_equal(TestZipFile::TEST_ZIP2.entry_names[1], entry.name)
@@ -84,10 +84,10 @@ class ZipInputStreamTest < MiniTest::Test
84
84
  assert_equal(true, zis.eof?)
85
85
  entry = zis.get_next_entry # short.txt
86
86
  assert_equal(TestZipFile::TEST_ZIP2.entry_names[3], entry.name)
87
- assert zis.gets.length > 0
87
+ assert !zis.gets.empty?
88
88
  entry = zis.get_next_entry # longBinary.bin
89
89
  assert_equal(TestZipFile::TEST_ZIP2.entry_names[4], entry.name)
90
- assert zis.gets.length > 0
90
+ assert !zis.gets.empty?
91
91
  end
92
92
  end
93
93
 
@@ -97,7 +97,7 @@ class ZipInputStreamTest < MiniTest::Test
97
97
  entry = zis.get_next_entry # longAscii.txt
98
98
  assert_equal(false, zis.eof?)
99
99
  assert_equal(TestZipFile::TEST_ZIP2.entry_names[0], entry.name)
100
- assert zis.gets.length > 0
100
+ assert !zis.gets.empty?
101
101
  assert_equal(false, zis.eof?)
102
102
  entry = zis.get_next_entry # empty.txt
103
103
  assert_equal(TestZipFile::TEST_ZIP2.entry_names[1], entry.name)
@@ -111,10 +111,10 @@ class ZipInputStreamTest < MiniTest::Test
111
111
  assert_equal(true, zis.eof?)
112
112
  entry = zis.get_next_entry # short.txt
113
113
  assert_equal(TestZipFile::TEST_ZIP2.entry_names[3], entry.name)
114
- assert zis.gets.length > 0
114
+ assert !zis.gets.empty?
115
115
  entry = zis.get_next_entry # longBinary.bin
116
116
  assert_equal(TestZipFile::TEST_ZIP2.entry_names[4], entry.name)
117
- assert zis.gets.length > 0
117
+ assert !zis.gets.empty?
118
118
  end
119
119
  end
120
120
 
@@ -92,11 +92,11 @@ class AbstractOutputStreamTest < MiniTest::Test
92
92
  assert_equal("hello\nworld\n", @output_stream.buffer)
93
93
 
94
94
  @output_stream.buffer = ''
95
- @output_stream.puts(["hello\n", "world\n"])
95
+ @output_stream.puts(%W[hello\n world\n])
96
96
  assert_equal("hello\nworld\n", @output_stream.buffer)
97
97
 
98
98
  @output_stream.buffer = ''
99
- @output_stream.puts(["hello\n", "world\n"], 'bingo')
99
+ @output_stream.puts(%W[hello\n world\n], 'bingo')
100
100
  assert_equal("hello\nworld\nbingo\n", @output_stream.buffer)
101
101
 
102
102
  @output_stream.buffer = ''