rubyzip 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +95 -43
  3. data/lib/zip.rb +11 -1
  4. data/lib/zip/central_directory.rb +3 -3
  5. data/lib/zip/compressor.rb +1 -2
  6. data/lib/zip/constants.rb +3 -3
  7. data/lib/zip/crypto/null_encryption.rb +2 -4
  8. data/lib/zip/decompressor.rb +1 -1
  9. data/lib/zip/dos_time.rb +1 -1
  10. data/lib/zip/entry.rb +70 -54
  11. data/lib/zip/entry_set.rb +4 -4
  12. data/lib/zip/errors.rb +1 -0
  13. data/lib/zip/extra_field.rb +2 -2
  14. data/lib/zip/extra_field/generic.rb +1 -1
  15. data/lib/zip/extra_field/zip64_placeholder.rb +1 -2
  16. data/lib/zip/file.rb +62 -51
  17. data/lib/zip/filesystem.rb +17 -13
  18. data/lib/zip/inflater.rb +2 -2
  19. data/lib/zip/input_stream.rb +10 -7
  20. data/lib/zip/ioextras/abstract_input_stream.rb +1 -1
  21. data/lib/zip/ioextras/abstract_output_stream.rb +3 -3
  22. data/lib/zip/output_stream.rb +5 -5
  23. data/lib/zip/pass_thru_decompressor.rb +1 -1
  24. data/lib/zip/streamable_stream.rb +1 -1
  25. data/lib/zip/version.rb +1 -1
  26. data/samples/example_recursive.rb +15 -18
  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 +2 -2
  31. data/test/crypto/null_encryption_test.rb +6 -2
  32. data/test/data/gpbit3stored.zip +0 -0
  33. data/test/data/path_traversal/Makefile +10 -0
  34. data/test/data/path_traversal/jwilk/README.md +5 -0
  35. data/test/data/path_traversal/jwilk/absolute1.zip +0 -0
  36. data/test/data/path_traversal/jwilk/absolute2.zip +0 -0
  37. data/test/data/path_traversal/jwilk/dirsymlink.zip +0 -0
  38. data/test/data/path_traversal/jwilk/dirsymlink2a.zip +0 -0
  39. data/test/data/path_traversal/jwilk/dirsymlink2b.zip +0 -0
  40. data/test/data/path_traversal/jwilk/relative0.zip +0 -0
  41. data/test/data/path_traversal/jwilk/relative2.zip +0 -0
  42. data/test/data/path_traversal/jwilk/symlink.zip +0 -0
  43. data/test/data/path_traversal/relative1.zip +0 -0
  44. data/test/data/path_traversal/tilde.zip +0 -0
  45. data/test/data/path_traversal/tuzovakaoff/README.md +3 -0
  46. data/test/data/path_traversal/tuzovakaoff/absolutepath.zip +0 -0
  47. data/test/data/path_traversal/tuzovakaoff/symlink.zip +0 -0
  48. data/test/data/rubycode.zip +0 -0
  49. data/test/entry_set_test.rb +13 -2
  50. data/test/entry_test.rb +3 -12
  51. data/test/errors_test.rb +1 -0
  52. data/test/file_extract_test.rb +62 -0
  53. data/test/file_permissions_test.rb +39 -43
  54. data/test/file_test.rb +115 -12
  55. data/test/filesystem/dir_iterator_test.rb +1 -1
  56. data/test/filesystem/directory_test.rb +29 -11
  57. data/test/filesystem/file_mutating_test.rb +3 -4
  58. data/test/filesystem/file_nonmutating_test.rb +34 -34
  59. data/test/filesystem/file_stat_test.rb +5 -5
  60. data/test/gentestfiles.rb +17 -13
  61. data/test/input_stream_test.rb +10 -10
  62. data/test/ioextras/abstract_input_stream_test.rb +1 -1
  63. data/test/ioextras/abstract_output_stream_test.rb +2 -2
  64. data/test/ioextras/fake_io_test.rb +1 -1
  65. data/test/local_entry_test.rb +1 -1
  66. data/test/path_traversal_test.rb +141 -0
  67. data/test/test_helper.rb +16 -3
  68. data/test/unicode_file_names_and_comments_test.rb +12 -0
  69. data/test/zip64_full_test.rb +2 -2
  70. metadata +103 -51
@@ -2,6 +2,7 @@ require 'test_helper'
2
2
 
3
3
  class ZipFileTest < MiniTest::Test
4
4
  include CommonZipFileFixture
5
+ include ZipEntryData
5
6
 
6
7
  OK_DELETE_FILE = 'test/data/generated/okToDelete.txt'
7
8
  OK_DELETE_MOVED_FILE = 'test/data/generated/okToDeleteMoved.txt'
@@ -40,6 +41,26 @@ class ZipFileTest < MiniTest::Test
40
41
  assert_equal(2, zfRead.entries.length)
41
42
  end
42
43
 
44
+ def test_create_from_scratch_with_old_create_parameter
45
+ comment = 'a short comment'
46
+
47
+ zf = ::Zip::File.new(EMPTY_FILENAME, 1)
48
+ zf.get_output_stream('myFile') { |os| os.write 'myFile contains just this' }
49
+ zf.mkdir('dir1')
50
+ zf.comment = comment
51
+ zf.close
52
+
53
+ zfRead = ::Zip::File.new(EMPTY_FILENAME)
54
+ assert_equal(comment, zfRead.comment)
55
+ assert_equal(2, zfRead.entries.length)
56
+ end
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
+
43
64
  def test_get_output_stream
44
65
  entryCount = nil
45
66
  ::Zip::File.open(TEST_ZIP.zip_name) do |zf|
@@ -56,7 +77,7 @@ class ZipFileTest < MiniTest::Test
56
77
  assert_equal(entryCount + 1, zf.size)
57
78
  assert_equal('Putting stuff in data/generated/empty.txt', zf.read('test/data/generated/empty.txt'))
58
79
 
59
- custom_entry_args = [ZipEntryTest::TEST_COMMENT, ZipEntryTest::TEST_EXTRA, ZipEntryTest::TEST_COMPRESSED_SIZE, ZipEntryTest::TEST_CRC, ::Zip::Entry::STORED, ZipEntryTest::TEST_SIZE, ZipEntryTest::TEST_TIME]
80
+ custom_entry_args = [TEST_COMMENT, TEST_EXTRA, TEST_COMPRESSED_SIZE, TEST_CRC, ::Zip::Entry::STORED, TEST_SIZE, TEST_TIME]
60
81
  zf.get_output_stream('entry_with_custom_args.txt', nil, *custom_entry_args) do |os|
61
82
  os.write 'Some data'
62
83
  end
@@ -82,6 +103,13 @@ class ZipFileTest < MiniTest::Test
82
103
  end
83
104
  end
84
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
+
85
113
  def test_open_buffer_with_stringio
86
114
  string_io = StringIO.new File.read('test/data/rubycode.zip')
87
115
  ::Zip::File.open_buffer string_io do |zf|
@@ -89,6 +117,63 @@ class ZipFileTest < MiniTest::Test
89
117
  end
90
118
  end
91
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
+
171
+ def test_open_buffer_without_block
172
+ string_io = StringIO.new File.read('test/data/rubycode.zip')
173
+ zf = ::Zip::File.open_buffer string_io
174
+ assert zf.entries.map { |e| e.name }.include?('zippedruby1.rb')
175
+ end
176
+
92
177
  def test_cleans_up_tempfiles_after_close
93
178
  zf = ::Zip::File.new(EMPTY_FILENAME, ::Zip::File::CREATE)
94
179
  zf.get_output_stream('myFile') do |os|
@@ -119,17 +204,37 @@ class ZipFileTest < MiniTest::Test
119
204
  zfRead.get_input_stream(entryName) { |zis| zis.read })
120
205
  end
121
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
+
122
227
  def test_recover_permissions_after_add_files_to_archive
123
228
  srcZip = TEST_ZIP.zip_name
124
- ::File.chmod(0664, srcZip)
229
+ ::File.chmod(0o664, srcZip)
125
230
  srcFile = 'test/data/file2.txt'
126
231
  entryName = 'newEntryName.rb'
127
- assert_equal(::File.stat(srcZip).mode, 0100664)
232
+ assert_equal(::File.stat(srcZip).mode, 0o100664)
128
233
  assert(::File.exist?(srcZip))
129
234
  zf = ::Zip::File.new(srcZip, ::Zip::File::CREATE)
130
235
  zf.add(entryName, srcFile)
131
236
  zf.close
132
- assert_equal(::File.stat(srcZip).mode, 0100664)
237
+ assert_equal(::File.stat(srcZip).mode, 0o100664)
133
238
  end
134
239
 
135
240
  def test_add_existing_entry_name
@@ -213,7 +318,7 @@ class ZipFileTest < MiniTest::Test
213
318
  zf.mkdir('test')
214
319
  arr << 'test/'
215
320
  arr_renamed << 'Ztest/'
216
- %w(a b c d).each do |f|
321
+ %w[a b c d].each do |f|
217
322
  zf.get_output_stream("test/#{f}") { |file| file.puts 'aaaa' }
218
323
  arr << "test/#{f}"
219
324
  arr_renamed << "Ztest/#{f}"
@@ -308,7 +413,7 @@ class ZipFileTest < MiniTest::Test
308
413
 
309
414
  def test_replace_non_entry
310
415
  entryToReplace = 'nonExistingEntryname'
311
- ::Zip::File.open(TEST_ZIP.zip_name) do |zf|
416
+ ::Zip::File.open(TEST_ZIP.zip_name) do |zf|
312
417
  assert_raises(Errno::ENOENT) { zf.replace(entryToReplace, 'test/data/file2.txt') }
313
418
  end
314
419
  end
@@ -326,7 +431,7 @@ class ZipFileTest < MiniTest::Test
326
431
  zfRead.close
327
432
 
328
433
  zf.close
329
- res = system("unzip -t #{TEST_ZIP.zip_name}")
434
+ res = system("unzip -tqq #{TEST_ZIP.zip_name}")
330
435
  assert_equal(res, true)
331
436
  end
332
437
 
@@ -342,7 +447,7 @@ class ZipFileTest < MiniTest::Test
342
447
  zf2 = ::Zip::File.open(filename)
343
448
  assert(zf2.entries.detect { |e| e.name == 'test1.txt' } != nil)
344
449
  assert(zf2.entries.detect { |e| e.name == 'test2.txt' } != nil)
345
- res = system("unzip -t #{filename}")
450
+ res = system("unzip -tqq #{filename}")
346
451
  assert_equal(res, true)
347
452
  end
348
453
 
@@ -413,7 +518,6 @@ class ZipFileTest < MiniTest::Test
413
518
  filename_to_remove = originalEntries.map(&:to_s).find { |name| name.match('longBinary') }
414
519
  zf.remove(filename_to_remove)
415
520
  assert_not_contains(zf, filename_to_remove)
416
-
417
521
  ensure
418
522
  zf.close
419
523
  end
@@ -528,9 +632,8 @@ class ZipFileTest < MiniTest::Test
528
632
  end
529
633
 
530
634
  def test_empty_zip
531
- puts `touch empty.zip`
532
635
  assert_raises(::Zip::Error) do
533
- ::Zip::File.open('empty.zip')
636
+ ::Zip::File.open(TestFiles::NULL_FILE)
534
637
  end
535
638
  end
536
639
 
@@ -538,7 +641,7 @@ class ZipFileTest < MiniTest::Test
538
641
  entry_count = 0
539
642
  File.open 'test/data/oddExtraField.zip', 'rb' do |zip_io|
540
643
  Zip::File.open_buffer zip_io.read do |zip|
541
- zip.each do |zip_entry|
644
+ zip.each do |_zip_entry|
542
645
  entry_count += 1
543
646
  end
544
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/'))
@@ -103,24 +103,24 @@ class ZipFsFileNonmutatingTest < MiniTest::Test
103
103
  end
104
104
 
105
105
  def test_size?
106
- assert_equal(nil, @zip_file.file.size?('notAFile'))
106
+ assert_nil(@zip_file.file.size?('notAFile'))
107
107
  assert_equal(72, @zip_file.file.size?('file1'))
108
- assert_equal(nil, @zip_file.file.size?('dir2/dir21'))
108
+ assert_nil(@zip_file.file.size?('dir2/dir21'))
109
109
 
110
110
  assert_equal(72, @zip_file.file.stat('file1').size?)
111
- assert_equal(nil, @zip_file.file.stat('dir2/dir21').size?)
111
+ assert_nil(@zip_file.file.stat('dir2/dir21').size?)
112
112
  end
113
113
 
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>'