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.
- 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
|