rubyzip 1.3.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -8
- data/Rakefile +3 -0
- data/lib/zip.rb +4 -3
- data/lib/zip/central_directory.rb +9 -5
- data/lib/zip/constants.rb +52 -0
- data/lib/zip/crypto/decrypted_io.rb +40 -0
- data/lib/zip/crypto/traditional_encryption.rb +9 -9
- data/lib/zip/decompressor.rb +19 -1
- data/lib/zip/dos_time.rb +12 -7
- data/lib/zip/entry.rb +57 -38
- data/lib/zip/entry_set.rb +2 -0
- data/lib/zip/errors.rb +1 -0
- data/lib/zip/extra_field.rb +11 -9
- data/lib/zip/extra_field/generic.rb +10 -9
- data/lib/zip/extra_field/ntfs.rb +4 -0
- data/lib/zip/extra_field/old_unix.rb +3 -1
- data/lib/zip/extra_field/universal_time.rb +42 -12
- data/lib/zip/extra_field/unix.rb +3 -1
- data/lib/zip/extra_field/zip64.rb +4 -2
- data/lib/zip/file.rb +79 -54
- data/lib/zip/filesystem.rb +193 -177
- data/lib/zip/inflater.rb +24 -36
- data/lib/zip/input_stream.rb +33 -26
- data/lib/zip/ioextras.rb +1 -1
- data/lib/zip/ioextras/abstract_input_stream.rb +19 -8
- data/lib/zip/ioextras/abstract_output_stream.rb +1 -1
- data/lib/zip/null_decompressor.rb +1 -9
- data/lib/zip/output_stream.rb +14 -5
- data/lib/zip/pass_thru_compressor.rb +2 -2
- data/lib/zip/pass_thru_decompressor.rb +13 -22
- data/lib/zip/streamable_directory.rb +3 -3
- data/lib/zip/streamable_stream.rb +6 -10
- data/lib/zip/version.rb +1 -1
- data/samples/example.rb +2 -2
- data/samples/example_filesystem.rb +1 -1
- data/samples/gtk_ruby_zip.rb +19 -19
- data/samples/qtzip.rb +6 -6
- data/samples/write_simple.rb +2 -4
- data/samples/zipfind.rb +23 -22
- metadata +28 -169
- data/test/basic_zip_file_test.rb +0 -60
- data/test/case_sensitivity_test.rb +0 -69
- data/test/central_directory_entry_test.rb +0 -69
- data/test/central_directory_test.rb +0 -100
- data/test/crypto/null_encryption_test.rb +0 -57
- data/test/crypto/traditional_encryption_test.rb +0 -80
- data/test/data/WarnInvalidDate.zip +0 -0
- data/test/data/file1.txt +0 -46
- data/test/data/file1.txt.deflatedData +0 -0
- data/test/data/file2.txt +0 -1504
- data/test/data/globTest.zip +0 -0
- data/test/data/globTest/foo.txt +0 -0
- data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
- data/test/data/globTest/food.txt +0 -0
- data/test/data/gpbit3stored.zip +0 -0
- data/test/data/mimetype +0 -1
- data/test/data/notzippedruby.rb +0 -7
- data/test/data/ntfs.zip +0 -0
- data/test/data/oddExtraField.zip +0 -0
- data/test/data/path_traversal/Makefile +0 -10
- data/test/data/path_traversal/jwilk/README.md +0 -5
- data/test/data/path_traversal/jwilk/absolute1.zip +0 -0
- data/test/data/path_traversal/jwilk/absolute2.zip +0 -0
- data/test/data/path_traversal/jwilk/dirsymlink.zip +0 -0
- data/test/data/path_traversal/jwilk/dirsymlink2a.zip +0 -0
- data/test/data/path_traversal/jwilk/dirsymlink2b.zip +0 -0
- data/test/data/path_traversal/jwilk/relative0.zip +0 -0
- data/test/data/path_traversal/jwilk/relative2.zip +0 -0
- data/test/data/path_traversal/jwilk/symlink.zip +0 -0
- data/test/data/path_traversal/relative1.zip +0 -0
- data/test/data/path_traversal/tilde.zip +0 -0
- data/test/data/path_traversal/tuzovakaoff/README.md +0 -3
- data/test/data/path_traversal/tuzovakaoff/absolutepath.zip +0 -0
- data/test/data/path_traversal/tuzovakaoff/symlink.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 +0 -65
- data/test/encryption_test.rb +0 -42
- data/test/entry_set_test.rb +0 -163
- data/test/entry_test.rb +0 -154
- data/test/errors_test.rb +0 -35
- data/test/extra_field_test.rb +0 -76
- data/test/file_extract_directory_test.rb +0 -54
- data/test/file_extract_test.rb +0 -145
- data/test/file_permissions_test.rb +0 -65
- data/test/file_split_test.rb +0 -57
- data/test/file_test.rb +0 -666
- data/test/filesystem/dir_iterator_test.rb +0 -58
- data/test/filesystem/directory_test.rb +0 -139
- data/test/filesystem/file_mutating_test.rb +0 -87
- data/test/filesystem/file_nonmutating_test.rb +0 -508
- data/test/filesystem/file_stat_test.rb +0 -64
- data/test/gentestfiles.rb +0 -126
- data/test/inflater_test.rb +0 -14
- data/test/input_stream_test.rb +0 -182
- data/test/ioextras/abstract_input_stream_test.rb +0 -102
- data/test/ioextras/abstract_output_stream_test.rb +0 -106
- data/test/ioextras/fake_io_test.rb +0 -18
- data/test/local_entry_test.rb +0 -154
- data/test/output_stream_test.rb +0 -128
- data/test/pass_thru_compressor_test.rb +0 -30
- data/test/pass_thru_decompressor_test.rb +0 -14
- data/test/path_traversal_test.rb +0 -141
- data/test/samples/example_recursive_test.rb +0 -37
- data/test/settings_test.rb +0 -95
- data/test/test_helper.rb +0 -234
- data/test/unicode_file_names_and_comments_test.rb +0 -62
- data/test/zip64_full_test.rb +0 -51
- data/test/zip64_support_test.rb +0 -14
data/test/data/globTest.zip
DELETED
Binary file
|
data/test/data/globTest/foo.txt
DELETED
File without changes
|
File without changes
|
data/test/data/globTest/food.txt
DELETED
File without changes
|
data/test/data/gpbit3stored.zip
DELETED
Binary file
|
data/test/data/mimetype
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
application/epub+zip
|
data/test/data/notzippedruby.rb
DELETED
data/test/data/ntfs.zip
DELETED
Binary file
|
data/test/data/oddExtraField.zip
DELETED
Binary file
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# Based on 'relative2' in https://github.com/jwilk/path-traversal-samples,
|
2
|
-
# but create the local `tmp` folder before adding the symlink. Otherwise
|
3
|
-
# we may bail out before we get to trying to create the file.
|
4
|
-
all: relative1.zip
|
5
|
-
relative1.zip:
|
6
|
-
rm -f $(@)
|
7
|
-
mkdir -p -m 755 tmp/tmp
|
8
|
-
umask 022 && echo moo > moo
|
9
|
-
cd tmp && zip -X ../$(@) tmp tmp/../../moo
|
10
|
-
rm -rf tmp moo
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/test/data/rubycode.zip
DELETED
Binary file
|
data/test/data/rubycode2.zip
DELETED
Binary file
|
data/test/data/test.xls
DELETED
Binary file
|
data/test/data/testDirectory.bin
DELETED
Binary file
|
data/test/data/zip64-sample.zip
DELETED
Binary file
|
data/test/data/zipWithDirs.zip
DELETED
Binary file
|
Binary file
|
data/test/deflater_test.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class DeflaterTest < MiniTest::Test
|
4
|
-
include CrcTest
|
5
|
-
|
6
|
-
DEFLATER_TEST_FILE = 'test/data/generated/deflatertest.bin'
|
7
|
-
BEST_COMP_FILE = 'test/data/generated/compressiontest_best_compression.bin'
|
8
|
-
DEFAULT_COMP_FILE = 'test/data/generated/compressiontest_default_compression.bin'
|
9
|
-
NO_COMP_FILE = 'test/data/generated/compressiontest_no_compression.bin'
|
10
|
-
|
11
|
-
def test_output_operator
|
12
|
-
txt = load_file('test/data/file2.txt')
|
13
|
-
deflate(txt, DEFLATER_TEST_FILE)
|
14
|
-
inflatedTxt = inflate(DEFLATER_TEST_FILE)
|
15
|
-
assert_equal(txt, inflatedTxt)
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_default_compression
|
19
|
-
txt = load_file('test/data/file2.txt')
|
20
|
-
|
21
|
-
Zip.default_compression = ::Zlib::BEST_COMPRESSION
|
22
|
-
deflate(txt, BEST_COMP_FILE)
|
23
|
-
Zip.default_compression = ::Zlib::DEFAULT_COMPRESSION
|
24
|
-
deflate(txt, DEFAULT_COMP_FILE)
|
25
|
-
Zip.default_compression = ::Zlib::NO_COMPRESSION
|
26
|
-
deflate(txt, NO_COMP_FILE)
|
27
|
-
|
28
|
-
best = File.size(BEST_COMP_FILE)
|
29
|
-
default = File.size(DEFAULT_COMP_FILE)
|
30
|
-
no = File.size(NO_COMP_FILE)
|
31
|
-
|
32
|
-
assert(best < default)
|
33
|
-
assert(best < no)
|
34
|
-
assert(default < no)
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def load_file(fileName)
|
40
|
-
txt = nil
|
41
|
-
File.open(fileName, 'rb') { |f| txt = f.read }
|
42
|
-
end
|
43
|
-
|
44
|
-
def deflate(data, fileName)
|
45
|
-
File.open(fileName, 'wb') do |file|
|
46
|
-
deflater = ::Zip::Deflater.new(file)
|
47
|
-
deflater << data
|
48
|
-
deflater.finish
|
49
|
-
assert_equal(deflater.size, data.size)
|
50
|
-
file << 'trailing data for zlib with -MAX_WBITS'
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def inflate(fileName)
|
55
|
-
txt = nil
|
56
|
-
File.open(fileName, 'rb') do |file|
|
57
|
-
inflater = ::Zip::Inflater.new(file)
|
58
|
-
txt = inflater.sysread
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_crc
|
63
|
-
run_crc_test(::Zip::Deflater)
|
64
|
-
end
|
65
|
-
end
|
data/test/encryption_test.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class EncryptionTest < MiniTest::Test
|
4
|
-
ENCRYPT_ZIP_TEST_FILE = 'test/data/zipWithEncryption.zip'
|
5
|
-
INPUT_FILE1 = 'test/data/file1.txt'
|
6
|
-
|
7
|
-
def setup
|
8
|
-
@default_compression = Zip.default_compression
|
9
|
-
Zip.default_compression = ::Zlib::DEFAULT_COMPRESSION
|
10
|
-
end
|
11
|
-
|
12
|
-
def teardown
|
13
|
-
Zip.default_compression = @default_compression
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_encrypt
|
17
|
-
test_file = open(ENCRYPT_ZIP_TEST_FILE, 'rb').read
|
18
|
-
|
19
|
-
@rand = [250, 143, 107, 13, 143, 22, 155, 75, 228, 150, 12]
|
20
|
-
@output = ::Zip::DOSTime.stub(:now, ::Zip::DOSTime.new(2014, 12, 17, 15, 56, 24)) do
|
21
|
-
Random.stub(:rand, ->(_range) { @rand.shift }) do
|
22
|
-
Zip::OutputStream.write_buffer(::StringIO.new(''), Zip::TraditionalEncrypter.new('password')) do |zos|
|
23
|
-
zos.put_next_entry('file1.txt')
|
24
|
-
zos.write open(INPUT_FILE1).read
|
25
|
-
end.string
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
@output.unpack('C*').each_with_index do |c, i|
|
30
|
-
assert_equal test_file[i].ord, c
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_decrypt
|
35
|
-
Zip::InputStream.open(ENCRYPT_ZIP_TEST_FILE, 0, Zip::TraditionalDecrypter.new('password')) do |zis|
|
36
|
-
entry = zis.get_next_entry
|
37
|
-
assert_equal 'file1.txt', entry.name
|
38
|
-
assert_equal 1327, entry.size
|
39
|
-
assert_equal open(INPUT_FILE1, 'r').read, zis.read
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
data/test/entry_set_test.rb
DELETED
@@ -1,163 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ZipEntrySetTest < MiniTest::Test
|
4
|
-
ZIP_ENTRIES = [
|
5
|
-
::Zip::Entry.new('zipfile.zip', 'name1', 'comment1'),
|
6
|
-
::Zip::Entry.new('zipfile.zip', 'name3', 'comment1'),
|
7
|
-
::Zip::Entry.new('zipfile.zip', 'name2', 'comment1'),
|
8
|
-
::Zip::Entry.new('zipfile.zip', 'name4', 'comment1'),
|
9
|
-
::Zip::Entry.new('zipfile.zip', 'name5', 'comment1'),
|
10
|
-
::Zip::Entry.new('zipfile.zip', 'name6', 'comment1')
|
11
|
-
]
|
12
|
-
|
13
|
-
def setup
|
14
|
-
@zipEntrySet = ::Zip::EntrySet.new(ZIP_ENTRIES)
|
15
|
-
end
|
16
|
-
|
17
|
-
def teardown
|
18
|
-
::Zip.reset!
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_include
|
22
|
-
assert(@zipEntrySet.include?(ZIP_ENTRIES.first))
|
23
|
-
assert(!@zipEntrySet.include?(::Zip::Entry.new('different.zip', 'different', 'aComment')))
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_size
|
27
|
-
assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
|
28
|
-
assert_equal(ZIP_ENTRIES.size, @zipEntrySet.length)
|
29
|
-
@zipEntrySet << ::Zip::Entry.new('a', 'b', 'c')
|
30
|
-
assert_equal(ZIP_ENTRIES.size + 1, @zipEntrySet.length)
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_add
|
34
|
-
zes = ::Zip::EntrySet.new
|
35
|
-
entry1 = ::Zip::Entry.new('zf.zip', 'name1')
|
36
|
-
entry2 = ::Zip::Entry.new('zf.zip', 'name2')
|
37
|
-
zes << entry1
|
38
|
-
assert(zes.include?(entry1))
|
39
|
-
zes.push(entry2)
|
40
|
-
assert(zes.include?(entry2))
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_delete
|
44
|
-
assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
|
45
|
-
entry = @zipEntrySet.delete(ZIP_ENTRIES.first)
|
46
|
-
assert_equal(ZIP_ENTRIES.size - 1, @zipEntrySet.size)
|
47
|
-
assert_equal(ZIP_ENTRIES.first, entry)
|
48
|
-
|
49
|
-
entry = @zipEntrySet.delete(ZIP_ENTRIES.first)
|
50
|
-
assert_equal(ZIP_ENTRIES.size - 1, @zipEntrySet.size)
|
51
|
-
assert_nil(entry)
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_each
|
55
|
-
# Used each instead each_with_index due the bug in jRuby
|
56
|
-
count = 0
|
57
|
-
@zipEntrySet.each do |entry|
|
58
|
-
assert(ZIP_ENTRIES.include?(entry))
|
59
|
-
count += 1
|
60
|
-
end
|
61
|
-
assert_equal(ZIP_ENTRIES.size, count)
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_entries
|
65
|
-
assert_equal(ZIP_ENTRIES, @zipEntrySet.entries)
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_find_entry
|
69
|
-
entries = [::Zip::Entry.new('zipfile.zip', 'MiXeDcAsEnAmE', 'comment1')]
|
70
|
-
|
71
|
-
::Zip.case_insensitive_match = true
|
72
|
-
zipEntrySet = ::Zip::EntrySet.new(entries)
|
73
|
-
assert_equal(entries[0], zipEntrySet.find_entry('MiXeDcAsEnAmE'))
|
74
|
-
assert_equal(entries[0], zipEntrySet.find_entry('mixedcasename'))
|
75
|
-
|
76
|
-
::Zip.case_insensitive_match = false
|
77
|
-
zipEntrySet = ::Zip::EntrySet.new(entries)
|
78
|
-
assert_equal(entries[0], zipEntrySet.find_entry('MiXeDcAsEnAmE'))
|
79
|
-
assert_nil(zipEntrySet.find_entry('mixedcasename'))
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_entries_with_sort
|
83
|
-
::Zip.sort_entries = true
|
84
|
-
assert_equal(ZIP_ENTRIES.sort, @zipEntrySet.entries)
|
85
|
-
::Zip.sort_entries = false
|
86
|
-
assert_equal(ZIP_ENTRIES, @zipEntrySet.entries)
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_entries_sorted_in_each
|
90
|
-
::Zip.sort_entries = true
|
91
|
-
arr = []
|
92
|
-
@zipEntrySet.each do |entry|
|
93
|
-
arr << entry
|
94
|
-
end
|
95
|
-
assert_equal(ZIP_ENTRIES.sort, arr)
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_compound
|
99
|
-
newEntry = ::Zip::Entry.new('zf.zip', 'new entry', "new entry's comment")
|
100
|
-
assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
|
101
|
-
@zipEntrySet << newEntry
|
102
|
-
assert_equal(ZIP_ENTRIES.size + 1, @zipEntrySet.size)
|
103
|
-
assert(@zipEntrySet.include?(newEntry))
|
104
|
-
|
105
|
-
@zipEntrySet.delete(newEntry)
|
106
|
-
assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_dup
|
110
|
-
copy = @zipEntrySet.dup
|
111
|
-
assert_equal(@zipEntrySet, copy)
|
112
|
-
|
113
|
-
# demonstrate that this is a deep copy
|
114
|
-
copy.entries[0].name = 'a totally different name'
|
115
|
-
assert(@zipEntrySet != copy)
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_parent
|
119
|
-
entries = [
|
120
|
-
::Zip::Entry.new('zf.zip', 'a/'),
|
121
|
-
::Zip::Entry.new('zf.zip', 'a/b/'),
|
122
|
-
::Zip::Entry.new('zf.zip', 'a/b/c/')
|
123
|
-
]
|
124
|
-
entrySet = ::Zip::EntrySet.new(entries)
|
125
|
-
|
126
|
-
assert_nil(entrySet.parent(entries[0]))
|
127
|
-
assert_equal(entries[0], entrySet.parent(entries[1]))
|
128
|
-
assert_equal(entries[1], entrySet.parent(entries[2]))
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_glob
|
132
|
-
res = @zipEntrySet.glob('name[2-4]')
|
133
|
-
assert_equal(3, res.size)
|
134
|
-
assert_equal(ZIP_ENTRIES[1, 3].sort, res.sort)
|
135
|
-
end
|
136
|
-
|
137
|
-
def test_glob2
|
138
|
-
entries = [
|
139
|
-
::Zip::Entry.new('zf.zip', 'a/'),
|
140
|
-
::Zip::Entry.new('zf.zip', 'a/b/b1'),
|
141
|
-
::Zip::Entry.new('zf.zip', 'a/b/c/'),
|
142
|
-
::Zip::Entry.new('zf.zip', 'a/b/c/c1')
|
143
|
-
]
|
144
|
-
entrySet = ::Zip::EntrySet.new(entries)
|
145
|
-
|
146
|
-
assert_equal(entries[0, 1], entrySet.glob('*'))
|
147
|
-
# assert_equal(entries[FIXME], entrySet.glob("**"))
|
148
|
-
# res = entrySet.glob('a*')
|
149
|
-
# assert_equal(entries.size, res.size)
|
150
|
-
# assert_equal(entrySet.map { |e| e.name }, res.map { |e| e.name })
|
151
|
-
end
|
152
|
-
|
153
|
-
def test_glob3
|
154
|
-
entries = [
|
155
|
-
::Zip::Entry.new('zf.zip', 'a/a'),
|
156
|
-
::Zip::Entry.new('zf.zip', 'a/b'),
|
157
|
-
::Zip::Entry.new('zf.zip', 'a/c')
|
158
|
-
]
|
159
|
-
entrySet = ::Zip::EntrySet.new(entries)
|
160
|
-
|
161
|
-
assert_equal(entries[0, 2].sort, entrySet.glob('a/{a,b}').sort)
|
162
|
-
end
|
163
|
-
end
|
data/test/entry_test.rb
DELETED
@@ -1,154 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ZipEntryTest < MiniTest::Test
|
4
|
-
include ZipEntryData
|
5
|
-
|
6
|
-
def test_constructor_and_getters
|
7
|
-
entry = ::Zip::Entry.new(TEST_ZIPFILE,
|
8
|
-
TEST_NAME,
|
9
|
-
TEST_COMMENT,
|
10
|
-
TEST_EXTRA,
|
11
|
-
TEST_COMPRESSED_SIZE,
|
12
|
-
TEST_CRC,
|
13
|
-
TEST_COMPRESSIONMETHOD,
|
14
|
-
TEST_SIZE,
|
15
|
-
TEST_TIME)
|
16
|
-
|
17
|
-
assert_equal(TEST_COMMENT, entry.comment)
|
18
|
-
assert_equal(TEST_COMPRESSED_SIZE, entry.compressed_size)
|
19
|
-
assert_equal(TEST_CRC, entry.crc)
|
20
|
-
assert_instance_of(::Zip::ExtraField, entry.extra)
|
21
|
-
assert_equal(TEST_COMPRESSIONMETHOD, entry.compression_method)
|
22
|
-
assert_equal(TEST_NAME, entry.name)
|
23
|
-
assert_equal(TEST_SIZE, entry.size)
|
24
|
-
assert_equal(TEST_TIME, entry.time)
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_is_directory_and_is_file
|
28
|
-
assert(::Zip::Entry.new(TEST_ZIPFILE, 'hello').file?)
|
29
|
-
assert(!::Zip::Entry.new(TEST_ZIPFILE, 'hello').directory?)
|
30
|
-
|
31
|
-
assert(::Zip::Entry.new(TEST_ZIPFILE, 'dir/hello').file?)
|
32
|
-
assert(!::Zip::Entry.new(TEST_ZIPFILE, 'dir/hello').directory?)
|
33
|
-
|
34
|
-
assert(::Zip::Entry.new(TEST_ZIPFILE, 'hello/').directory?)
|
35
|
-
assert(!::Zip::Entry.new(TEST_ZIPFILE, 'hello/').file?)
|
36
|
-
|
37
|
-
assert(::Zip::Entry.new(TEST_ZIPFILE, 'dir/hello/').directory?)
|
38
|
-
assert(!::Zip::Entry.new(TEST_ZIPFILE, 'dir/hello/').file?)
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_equality
|
42
|
-
entry1 = ::Zip::Entry.new('file.zip', 'name', 'isNotCompared',
|
43
|
-
'something extra', 123, 1234,
|
44
|
-
::Zip::Entry::DEFLATED, 10_000)
|
45
|
-
entry2 = ::Zip::Entry.new('file.zip', 'name', 'isNotComparedXXX',
|
46
|
-
'something extra', 123, 1234,
|
47
|
-
::Zip::Entry::DEFLATED, 10_000)
|
48
|
-
entry3 = ::Zip::Entry.new('file.zip', 'name2', 'isNotComparedXXX',
|
49
|
-
'something extra', 123, 1234,
|
50
|
-
::Zip::Entry::DEFLATED, 10_000)
|
51
|
-
entry4 = ::Zip::Entry.new('file.zip', 'name2', 'isNotComparedXXX',
|
52
|
-
'something extraXX', 123, 1234,
|
53
|
-
::Zip::Entry::DEFLATED, 10_000)
|
54
|
-
entry5 = ::Zip::Entry.new('file.zip', 'name2', 'isNotComparedXXX',
|
55
|
-
'something extraXX', 12, 1234,
|
56
|
-
::Zip::Entry::DEFLATED, 10_000)
|
57
|
-
entry6 = ::Zip::Entry.new('file.zip', 'name2', 'isNotComparedXXX',
|
58
|
-
'something extraXX', 12, 123,
|
59
|
-
::Zip::Entry::DEFLATED, 10_000)
|
60
|
-
entry7 = ::Zip::Entry.new('file.zip', 'name2', 'isNotComparedXXX',
|
61
|
-
'something extraXX', 12, 123,
|
62
|
-
::Zip::Entry::STORED, 10_000)
|
63
|
-
entry8 = ::Zip::Entry.new('file.zip', 'name2', 'isNotComparedXXX',
|
64
|
-
'something extraXX', 12, 123,
|
65
|
-
::Zip::Entry::STORED, 100_000)
|
66
|
-
|
67
|
-
assert_equal(entry1, entry1)
|
68
|
-
assert_equal(entry1, entry2)
|
69
|
-
|
70
|
-
assert(entry2 != entry3)
|
71
|
-
assert(entry3 != entry4)
|
72
|
-
assert(entry4 != entry5)
|
73
|
-
assert(entry5 != entry6)
|
74
|
-
assert(entry6 != entry7)
|
75
|
-
assert(entry7 != entry8)
|
76
|
-
|
77
|
-
assert(entry7 != 'hello')
|
78
|
-
assert(entry7 != 12)
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_compare
|
82
|
-
assert_equal(0, (::Zip::Entry.new('zf.zip', 'a') <=> ::Zip::Entry.new('zf.zip', 'a')))
|
83
|
-
assert_equal(1, (::Zip::Entry.new('zf.zip', 'b') <=> ::Zip::Entry.new('zf.zip', 'a')))
|
84
|
-
assert_equal(-1, (::Zip::Entry.new('zf.zip', 'a') <=> ::Zip::Entry.new('zf.zip', 'b')))
|
85
|
-
|
86
|
-
entries = [
|
87
|
-
::Zip::Entry.new('zf.zip', '5'),
|
88
|
-
::Zip::Entry.new('zf.zip', '1'),
|
89
|
-
::Zip::Entry.new('zf.zip', '3'),
|
90
|
-
::Zip::Entry.new('zf.zip', '4'),
|
91
|
-
::Zip::Entry.new('zf.zip', '0'),
|
92
|
-
::Zip::Entry.new('zf.zip', '2')
|
93
|
-
]
|
94
|
-
|
95
|
-
entries.sort!
|
96
|
-
assert_equal('0', entries[0].to_s)
|
97
|
-
assert_equal('1', entries[1].to_s)
|
98
|
-
assert_equal('2', entries[2].to_s)
|
99
|
-
assert_equal('3', entries[3].to_s)
|
100
|
-
assert_equal('4', entries[4].to_s)
|
101
|
-
assert_equal('5', entries[5].to_s)
|
102
|
-
end
|
103
|
-
|
104
|
-
def test_parent_as_string
|
105
|
-
entry1 = ::Zip::Entry.new('zf.zip', 'aa')
|
106
|
-
entry2 = ::Zip::Entry.new('zf.zip', 'aa/')
|
107
|
-
entry3 = ::Zip::Entry.new('zf.zip', 'aa/bb')
|
108
|
-
entry4 = ::Zip::Entry.new('zf.zip', 'aa/bb/')
|
109
|
-
entry5 = ::Zip::Entry.new('zf.zip', 'aa/bb/cc')
|
110
|
-
entry6 = ::Zip::Entry.new('zf.zip', 'aa/bb/cc/')
|
111
|
-
|
112
|
-
assert_nil(entry1.parent_as_string)
|
113
|
-
assert_nil(entry2.parent_as_string)
|
114
|
-
assert_equal('aa/', entry3.parent_as_string)
|
115
|
-
assert_equal('aa/', entry4.parent_as_string)
|
116
|
-
assert_equal('aa/bb/', entry5.parent_as_string)
|
117
|
-
assert_equal('aa/bb/', entry6.parent_as_string)
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_entry_name_cannot_start_with_slash
|
121
|
-
assert_raises(::Zip::EntryNameError) { ::Zip::Entry.new('zf.zip', '/hej/der') }
|
122
|
-
end
|
123
|
-
|
124
|
-
def test_store_file_without_compression
|
125
|
-
File.delete('/tmp/no_compress.zip') if File.exist?('/tmp/no_compress.zip')
|
126
|
-
files = Dir[File.join('test/data/globTest', '**', '**')]
|
127
|
-
|
128
|
-
Zip.setup do |z|
|
129
|
-
z.write_zip64_support = false
|
130
|
-
end
|
131
|
-
|
132
|
-
zipfile = Zip::File.open('/tmp/no_compress.zip', Zip::File::CREATE)
|
133
|
-
mimetype_entry = Zip::Entry.new(zipfile, # @zipfile
|
134
|
-
'mimetype', # @name
|
135
|
-
'', # @comment
|
136
|
-
'', # @extra
|
137
|
-
0, # @compressed_size
|
138
|
-
0, # @crc
|
139
|
-
Zip::Entry::STORED) # @comppressed_method
|
140
|
-
|
141
|
-
zipfile.add(mimetype_entry, 'test/data/mimetype')
|
142
|
-
|
143
|
-
files.each do |file|
|
144
|
-
zipfile.add(file.sub('test/data/globTest/', ''), file)
|
145
|
-
end
|
146
|
-
zipfile.close
|
147
|
-
|
148
|
-
f = File.open('/tmp/no_compress.zip', 'rb')
|
149
|
-
first_100_bytes = f.read(100)
|
150
|
-
f.close
|
151
|
-
|
152
|
-
assert_match(/mimetypeapplication\/epub\+zip/, first_100_bytes)
|
153
|
-
end
|
154
|
-
end
|