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.
- checksums.yaml +6 -14
- data/README.md +173 -42
- data/Rakefile +10 -5
- data/TODO +0 -1
- data/lib/zip/central_directory.rb +55 -24
- data/lib/zip/compressor.rb +0 -0
- data/lib/zip/constants.rb +4 -2
- data/lib/zip/crypto/encryption.rb +11 -0
- data/lib/zip/crypto/null_encryption.rb +45 -0
- data/lib/zip/crypto/traditional_encryption.rb +99 -0
- data/lib/zip/decompressor.rb +2 -2
- data/lib/zip/deflater.rb +11 -6
- data/lib/zip/dos_time.rb +4 -5
- data/lib/zip/entry.rb +159 -97
- data/lib/zip/entry_set.rb +18 -18
- data/lib/zip/errors.rb +15 -6
- data/lib/zip/extra_field/generic.rb +8 -8
- data/lib/zip/extra_field/ntfs.rb +90 -0
- data/lib/zip/extra_field/old_unix.rb +44 -0
- data/lib/zip/extra_field/universal_time.rb +14 -14
- data/lib/zip/extra_field/unix.rb +8 -9
- data/lib/zip/extra_field/zip64.rb +44 -6
- data/lib/zip/extra_field/zip64_placeholder.rb +16 -0
- data/lib/zip/extra_field.rb +20 -8
- data/lib/zip/file.rb +126 -114
- data/lib/zip/filesystem.rb +140 -139
- data/lib/zip/inflater.rb +10 -9
- data/lib/zip/input_stream.rb +105 -80
- data/lib/zip/ioextras/abstract_input_stream.rb +15 -12
- data/lib/zip/ioextras/abstract_output_stream.rb +0 -2
- data/lib/zip/ioextras.rb +1 -3
- data/lib/zip/null_compressor.rb +2 -2
- data/lib/zip/null_decompressor.rb +4 -4
- data/lib/zip/null_input_stream.rb +2 -1
- data/lib/zip/output_stream.rb +57 -43
- data/lib/zip/pass_thru_compressor.rb +4 -4
- data/lib/zip/pass_thru_decompressor.rb +4 -5
- data/lib/zip/streamable_directory.rb +2 -2
- data/lib/zip/streamable_stream.rb +22 -13
- data/lib/zip/version.rb +1 -1
- data/lib/zip.rb +11 -2
- data/samples/example.rb +30 -40
- data/samples/example_filesystem.rb +16 -18
- data/samples/example_recursive.rb +35 -27
- data/samples/{gtkRubyzip.rb → gtk_ruby_zip.rb} +25 -27
- data/samples/qtzip.rb +19 -28
- data/samples/write_simple.rb +12 -13
- data/samples/zipfind.rb +29 -37
- data/test/basic_zip_file_test.rb +60 -0
- data/test/case_sensitivity_test.rb +69 -0
- data/test/central_directory_entry_test.rb +69 -0
- data/test/central_directory_test.rb +100 -0
- data/test/crypto/null_encryption_test.rb +53 -0
- data/test/crypto/traditional_encryption_test.rb +80 -0
- data/test/data/WarnInvalidDate.zip +0 -0
- data/test/data/file1.txt +46 -0
- data/test/data/file1.txt.deflatedData +0 -0
- data/test/data/file2.txt +1504 -0
- data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
- data/test/data/globTest/foo.txt +0 -0
- data/test/data/globTest/food.txt +0 -0
- data/test/data/globTest.zip +0 -0
- data/test/data/mimetype +1 -0
- data/test/data/notzippedruby.rb +7 -0
- data/test/data/ntfs.zip +0 -0
- data/test/data/oddExtraField.zip +0 -0
- data/test/data/rubycode.zip +0 -0
- data/test/data/rubycode2.zip +0 -0
- data/test/data/test.xls +0 -0
- data/test/data/testDirectory.bin +0 -0
- data/test/data/zip64-sample.zip +0 -0
- data/test/data/zipWithDirs.zip +0 -0
- data/test/data/zipWithEncryption.zip +0 -0
- data/test/deflater_test.rb +65 -0
- data/test/encryption_test.rb +42 -0
- data/test/entry_set_test.rb +152 -0
- data/test/entry_test.rb +163 -0
- data/test/errors_test.rb +34 -0
- data/test/extra_field_test.rb +76 -0
- data/test/file_extract_directory_test.rb +54 -0
- data/test/file_extract_test.rb +83 -0
- data/test/file_permissions_test.rb +69 -0
- data/test/file_split_test.rb +57 -0
- data/test/file_test.rb +563 -0
- data/test/filesystem/dir_iterator_test.rb +58 -0
- data/test/filesystem/directory_test.rb +121 -0
- data/test/filesystem/file_mutating_test.rb +88 -0
- data/test/filesystem/file_nonmutating_test.rb +508 -0
- data/test/filesystem/file_stat_test.rb +64 -0
- data/test/gentestfiles.rb +122 -0
- data/test/inflater_test.rb +14 -0
- data/test/input_stream_test.rb +182 -0
- data/test/ioextras/abstract_input_stream_test.rb +102 -0
- data/test/ioextras/abstract_output_stream_test.rb +106 -0
- data/test/ioextras/fake_io_test.rb +18 -0
- data/test/local_entry_test.rb +154 -0
- data/test/output_stream_test.rb +128 -0
- data/test/pass_thru_compressor_test.rb +30 -0
- data/test/pass_thru_decompressor_test.rb +14 -0
- data/test/samples/example_recursive_test.rb +37 -0
- data/test/settings_test.rb +95 -0
- data/test/test_helper.rb +221 -0
- data/test/unicode_file_names_and_comments_test.rb +50 -0
- data/test/zip64_full_test.rb +51 -0
- data/test/zip64_support_test.rb +14 -0
- metadata +198 -22
- 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
|