rubyzip 1.0.0 → 1.2.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.

Potentially problematic release.


This version of rubyzip might be problematic. Click here for more details.

Files changed (107) hide show
  1. checksums.yaml +6 -14
  2. data/README.md +173 -42
  3. data/Rakefile +10 -5
  4. data/TODO +0 -1
  5. data/lib/zip/central_directory.rb +55 -24
  6. data/lib/zip/compressor.rb +0 -0
  7. data/lib/zip/constants.rb +4 -2
  8. data/lib/zip/crypto/encryption.rb +11 -0
  9. data/lib/zip/crypto/null_encryption.rb +45 -0
  10. data/lib/zip/crypto/traditional_encryption.rb +99 -0
  11. data/lib/zip/decompressor.rb +2 -2
  12. data/lib/zip/deflater.rb +11 -6
  13. data/lib/zip/dos_time.rb +4 -5
  14. data/lib/zip/entry.rb +159 -97
  15. data/lib/zip/entry_set.rb +18 -18
  16. data/lib/zip/errors.rb +15 -6
  17. data/lib/zip/extra_field/generic.rb +8 -8
  18. data/lib/zip/extra_field/ntfs.rb +90 -0
  19. data/lib/zip/extra_field/old_unix.rb +44 -0
  20. data/lib/zip/extra_field/universal_time.rb +14 -14
  21. data/lib/zip/extra_field/unix.rb +8 -9
  22. data/lib/zip/extra_field/zip64.rb +44 -6
  23. data/lib/zip/extra_field/zip64_placeholder.rb +16 -0
  24. data/lib/zip/extra_field.rb +20 -8
  25. data/lib/zip/file.rb +126 -114
  26. data/lib/zip/filesystem.rb +140 -139
  27. data/lib/zip/inflater.rb +10 -9
  28. data/lib/zip/input_stream.rb +105 -80
  29. data/lib/zip/ioextras/abstract_input_stream.rb +15 -12
  30. data/lib/zip/ioextras/abstract_output_stream.rb +0 -2
  31. data/lib/zip/ioextras.rb +1 -3
  32. data/lib/zip/null_compressor.rb +2 -2
  33. data/lib/zip/null_decompressor.rb +4 -4
  34. data/lib/zip/null_input_stream.rb +2 -1
  35. data/lib/zip/output_stream.rb +57 -43
  36. data/lib/zip/pass_thru_compressor.rb +4 -4
  37. data/lib/zip/pass_thru_decompressor.rb +4 -5
  38. data/lib/zip/streamable_directory.rb +2 -2
  39. data/lib/zip/streamable_stream.rb +22 -13
  40. data/lib/zip/version.rb +1 -1
  41. data/lib/zip.rb +11 -2
  42. data/samples/example.rb +30 -40
  43. data/samples/example_filesystem.rb +16 -18
  44. data/samples/example_recursive.rb +35 -27
  45. data/samples/{gtkRubyzip.rb → gtk_ruby_zip.rb} +25 -27
  46. data/samples/qtzip.rb +19 -28
  47. data/samples/write_simple.rb +12 -13
  48. data/samples/zipfind.rb +29 -37
  49. data/test/basic_zip_file_test.rb +60 -0
  50. data/test/case_sensitivity_test.rb +69 -0
  51. data/test/central_directory_entry_test.rb +69 -0
  52. data/test/central_directory_test.rb +100 -0
  53. data/test/crypto/null_encryption_test.rb +53 -0
  54. data/test/crypto/traditional_encryption_test.rb +80 -0
  55. data/test/data/WarnInvalidDate.zip +0 -0
  56. data/test/data/file1.txt +46 -0
  57. data/test/data/file1.txt.deflatedData +0 -0
  58. data/test/data/file2.txt +1504 -0
  59. data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
  60. data/test/data/globTest/foo.txt +0 -0
  61. data/test/data/globTest/food.txt +0 -0
  62. data/test/data/globTest.zip +0 -0
  63. data/test/data/mimetype +1 -0
  64. data/test/data/notzippedruby.rb +7 -0
  65. data/test/data/ntfs.zip +0 -0
  66. data/test/data/oddExtraField.zip +0 -0
  67. data/test/data/rubycode.zip +0 -0
  68. data/test/data/rubycode2.zip +0 -0
  69. data/test/data/test.xls +0 -0
  70. data/test/data/testDirectory.bin +0 -0
  71. data/test/data/zip64-sample.zip +0 -0
  72. data/test/data/zipWithDirs.zip +0 -0
  73. data/test/data/zipWithEncryption.zip +0 -0
  74. data/test/deflater_test.rb +65 -0
  75. data/test/encryption_test.rb +42 -0
  76. data/test/entry_set_test.rb +152 -0
  77. data/test/entry_test.rb +163 -0
  78. data/test/errors_test.rb +34 -0
  79. data/test/extra_field_test.rb +76 -0
  80. data/test/file_extract_directory_test.rb +54 -0
  81. data/test/file_extract_test.rb +83 -0
  82. data/test/file_permissions_test.rb +69 -0
  83. data/test/file_split_test.rb +57 -0
  84. data/test/file_test.rb +563 -0
  85. data/test/filesystem/dir_iterator_test.rb +58 -0
  86. data/test/filesystem/directory_test.rb +121 -0
  87. data/test/filesystem/file_mutating_test.rb +88 -0
  88. data/test/filesystem/file_nonmutating_test.rb +508 -0
  89. data/test/filesystem/file_stat_test.rb +64 -0
  90. data/test/gentestfiles.rb +122 -0
  91. data/test/inflater_test.rb +14 -0
  92. data/test/input_stream_test.rb +182 -0
  93. data/test/ioextras/abstract_input_stream_test.rb +102 -0
  94. data/test/ioextras/abstract_output_stream_test.rb +106 -0
  95. data/test/ioextras/fake_io_test.rb +18 -0
  96. data/test/local_entry_test.rb +154 -0
  97. data/test/output_stream_test.rb +128 -0
  98. data/test/pass_thru_compressor_test.rb +30 -0
  99. data/test/pass_thru_decompressor_test.rb +14 -0
  100. data/test/samples/example_recursive_test.rb +37 -0
  101. data/test/settings_test.rb +95 -0
  102. data/test/test_helper.rb +221 -0
  103. data/test/unicode_file_names_and_comments_test.rb +50 -0
  104. data/test/zip64_full_test.rb +51 -0
  105. data/test/zip64_support_test.rb +14 -0
  106. metadata +198 -22
  107. data/NEWS +0 -182
@@ -0,0 +1,121 @@
1
+ require 'test_helper'
2
+ require 'zip/filesystem'
3
+
4
+ class ZipFsDirectoryTest < MiniTest::Test
5
+ TEST_ZIP = 'test/data/generated/zipWithDirs_copy.zip'
6
+
7
+ def setup
8
+ FileUtils.cp('test/data/zipWithDirs.zip', TEST_ZIP)
9
+ end
10
+
11
+ def test_delete
12
+ ::Zip::File.open(TEST_ZIP) do |zf|
13
+ assert_raises(Errno::ENOENT, 'No such file or directory - NoSuchFile.txt') do
14
+ zf.dir.delete('NoSuchFile.txt')
15
+ end
16
+ assert_raises(Errno::EINVAL, 'Invalid argument - file1') do
17
+ zf.dir.delete('file1')
18
+ end
19
+ assert(zf.file.exists?('dir1'))
20
+ zf.dir.delete('dir1')
21
+ assert(!zf.file.exists?('dir1'))
22
+ end
23
+ end
24
+
25
+ def test_mkdir
26
+ ::Zip::File.open(TEST_ZIP) do |zf|
27
+ assert_raises(Errno::EEXIST, 'File exists - dir1') do
28
+ zf.dir.mkdir('file1')
29
+ end
30
+ assert_raises(Errno::EEXIST, 'File exists - dir1') do
31
+ zf.dir.mkdir('dir1')
32
+ end
33
+ assert(!zf.file.exists?('newDir'))
34
+ zf.dir.mkdir('newDir')
35
+ assert(zf.file.directory?('newDir'))
36
+ assert(!zf.file.exists?('newDir2'))
37
+ zf.dir.mkdir('newDir2', 3485)
38
+ assert(zf.file.directory?('newDir2'))
39
+ end
40
+ end
41
+
42
+ def test_pwd_chdir_entries
43
+ ::Zip::File.open(TEST_ZIP) do |zf|
44
+ assert_equal('/', zf.dir.pwd)
45
+
46
+ assert_raises(Errno::ENOENT, 'No such file or directory - no such dir') do
47
+ zf.dir.chdir 'no such dir'
48
+ end
49
+
50
+ assert_raises(Errno::EINVAL, 'Invalid argument - file1') do
51
+ zf.dir.chdir 'file1'
52
+ end
53
+
54
+ assert_equal(%w(dir1 dir2 file1).sort, zf.dir.entries('.').sort)
55
+ zf.dir.chdir 'dir1'
56
+ assert_equal('/dir1', zf.dir.pwd)
57
+ assert_equal(%w(dir11 file11 file12), zf.dir.entries('.').sort)
58
+
59
+ zf.dir.chdir '../dir2/dir21'
60
+ assert_equal('/dir2/dir21', zf.dir.pwd)
61
+ assert_equal(['dir221'].sort, zf.dir.entries('.').sort)
62
+ end
63
+ end
64
+
65
+ def test_foreach
66
+ ::Zip::File.open(TEST_ZIP) do |zf|
67
+ blockCalled = false
68
+ assert_raises(Errno::ENOENT, 'No such file or directory - noSuchDir') do
69
+ zf.dir.foreach('noSuchDir') { |_e| blockCalled = true }
70
+ end
71
+ assert(!blockCalled)
72
+
73
+ assert_raises(Errno::ENOTDIR, 'Not a directory - file1') do
74
+ zf.dir.foreach('file1') { |_e| blockCalled = true }
75
+ end
76
+ assert(!blockCalled)
77
+
78
+ entries = []
79
+ zf.dir.foreach('.') { |e| entries << e }
80
+ assert_equal(%w(dir1 dir2 file1).sort, entries.sort)
81
+
82
+ entries = []
83
+ zf.dir.foreach('dir1') { |e| entries << e }
84
+ assert_equal(%w(dir11 file11 file12), entries.sort)
85
+ end
86
+ end
87
+
88
+ def test_chroot
89
+ ::Zip::File.open(TEST_ZIP) do |zf|
90
+ assert_raises(NotImplementedError) do
91
+ zf.dir.chroot
92
+ end
93
+ end
94
+ end
95
+
96
+ # Globbing not supported yet
97
+ # def test_glob
98
+ # # test alias []-operator too
99
+ # fail "implement test"
100
+ # end
101
+
102
+ def test_open_new
103
+ ::Zip::File.open(TEST_ZIP) do |zf|
104
+ assert_raises(Errno::ENOTDIR, 'Not a directory - file1') do
105
+ zf.dir.new('file1')
106
+ end
107
+
108
+ assert_raises(Errno::ENOENT, 'No such file or directory - noSuchFile') do
109
+ zf.dir.new('noSuchFile')
110
+ end
111
+
112
+ d = zf.dir.new('.')
113
+ assert_equal(%w(file1 dir1 dir2).sort, d.entries.sort)
114
+ d.close
115
+
116
+ zf.dir.open('dir1') do |dir|
117
+ assert_equal(%w(dir11 file11 file12).sort, dir.entries.sort)
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,88 @@
1
+ require 'test_helper'
2
+ require 'zip/filesystem'
3
+
4
+ class ZipFsFileMutatingTest < MiniTest::Test
5
+ TEST_ZIP = 'test/data/generated/zipWithDirs_copy.zip'
6
+ def setup
7
+ FileUtils.cp('test/data/zipWithDirs.zip', TEST_ZIP)
8
+ end
9
+
10
+ def teardown
11
+ end
12
+
13
+ def test_delete
14
+ do_test_delete_or_unlink(:delete)
15
+ end
16
+
17
+ def test_unlink
18
+ do_test_delete_or_unlink(:unlink)
19
+ end
20
+
21
+ def test_open_write
22
+ ::Zip::File.open(TEST_ZIP) do |zf|
23
+ zf.file.open('test_open_write_entry', 'w') do |f|
24
+ f.write "This is what I'm writing"
25
+ end
26
+ assert_equal("This is what I'm writing",
27
+ zf.file.read('test_open_write_entry'))
28
+
29
+ # Test with existing entry
30
+ zf.file.open('file1', 'wb') do |f| # also check that 'b' option is ignored
31
+ f.write "This is what I'm writing too"
32
+ end
33
+ assert_equal("This is what I'm writing too",
34
+ zf.file.read('file1'))
35
+ end
36
+ end
37
+
38
+ def test_rename
39
+ ::Zip::File.open(TEST_ZIP) do |zf|
40
+ assert_raises(Errno::ENOENT, '') do
41
+ zf.file.rename('NoSuchFile', 'bimse')
42
+ end
43
+ zf.file.rename('file1', 'newNameForFile1')
44
+ end
45
+
46
+ ::Zip::File.open(TEST_ZIP) do |zf|
47
+ assert(!zf.file.exists?('file1'))
48
+ assert(zf.file.exists?('newNameForFile1'))
49
+ end
50
+ end
51
+
52
+ def test_chmod
53
+ ::Zip::File.open(TEST_ZIP) do |zf|
54
+ zf.file.chmod(0765, 'file1')
55
+ end
56
+
57
+ ::Zip::File.open(TEST_ZIP) do |zf|
58
+ assert_equal(0100765, zf.file.stat('file1').mode)
59
+ end
60
+ end
61
+
62
+ def do_test_delete_or_unlink(symbol)
63
+ ::Zip::File.open(TEST_ZIP) do |zf|
64
+ assert(zf.file.exists?('dir2/dir21/dir221/file2221'))
65
+ zf.file.send(symbol, 'dir2/dir21/dir221/file2221')
66
+ assert(!zf.file.exists?('dir2/dir21/dir221/file2221'))
67
+
68
+ assert(zf.file.exists?('dir1/file11'))
69
+ assert(zf.file.exists?('dir1/file12'))
70
+ zf.file.send(symbol, 'dir1/file11', 'dir1/file12')
71
+ assert(!zf.file.exists?('dir1/file11'))
72
+ assert(!zf.file.exists?('dir1/file12'))
73
+
74
+ assert_raises(Errno::ENOENT) { zf.file.send(symbol, 'noSuchFile') }
75
+ assert_raises(Errno::EISDIR) { zf.file.send(symbol, 'dir1/dir11') }
76
+ assert_raises(Errno::EISDIR) { zf.file.send(symbol, 'dir1/dir11/') }
77
+ end
78
+
79
+ ::Zip::File.open(TEST_ZIP) do |zf|
80
+ assert(!zf.file.exists?('dir2/dir21/dir221/file2221'))
81
+ assert(!zf.file.exists?('dir1/file11'))
82
+ assert(!zf.file.exists?('dir1/file12'))
83
+
84
+ assert(zf.file.exists?('dir1/dir11'))
85
+ assert(zf.file.exists?('dir1/dir11/'))
86
+ end
87
+ end
88
+ end