rubyzip 1.3.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -8
  3. data/Rakefile +3 -0
  4. data/lib/zip.rb +4 -3
  5. data/lib/zip/central_directory.rb +9 -5
  6. data/lib/zip/constants.rb +52 -0
  7. data/lib/zip/crypto/decrypted_io.rb +40 -0
  8. data/lib/zip/crypto/traditional_encryption.rb +9 -9
  9. data/lib/zip/decompressor.rb +19 -1
  10. data/lib/zip/dos_time.rb +12 -7
  11. data/lib/zip/entry.rb +57 -38
  12. data/lib/zip/entry_set.rb +2 -0
  13. data/lib/zip/errors.rb +1 -0
  14. data/lib/zip/extra_field.rb +11 -9
  15. data/lib/zip/extra_field/generic.rb +10 -9
  16. data/lib/zip/extra_field/ntfs.rb +4 -0
  17. data/lib/zip/extra_field/old_unix.rb +3 -1
  18. data/lib/zip/extra_field/universal_time.rb +42 -12
  19. data/lib/zip/extra_field/unix.rb +3 -1
  20. data/lib/zip/extra_field/zip64.rb +4 -2
  21. data/lib/zip/file.rb +79 -54
  22. data/lib/zip/filesystem.rb +193 -177
  23. data/lib/zip/inflater.rb +24 -36
  24. data/lib/zip/input_stream.rb +33 -26
  25. data/lib/zip/ioextras.rb +1 -1
  26. data/lib/zip/ioextras/abstract_input_stream.rb +19 -8
  27. data/lib/zip/ioextras/abstract_output_stream.rb +1 -1
  28. data/lib/zip/null_decompressor.rb +1 -9
  29. data/lib/zip/output_stream.rb +14 -5
  30. data/lib/zip/pass_thru_compressor.rb +2 -2
  31. data/lib/zip/pass_thru_decompressor.rb +13 -22
  32. data/lib/zip/streamable_directory.rb +3 -3
  33. data/lib/zip/streamable_stream.rb +6 -10
  34. data/lib/zip/version.rb +1 -1
  35. data/samples/example.rb +2 -2
  36. data/samples/example_filesystem.rb +1 -1
  37. data/samples/gtk_ruby_zip.rb +19 -19
  38. data/samples/qtzip.rb +6 -6
  39. data/samples/write_simple.rb +2 -4
  40. data/samples/zipfind.rb +23 -22
  41. metadata +28 -169
  42. data/test/basic_zip_file_test.rb +0 -60
  43. data/test/case_sensitivity_test.rb +0 -69
  44. data/test/central_directory_entry_test.rb +0 -69
  45. data/test/central_directory_test.rb +0 -100
  46. data/test/crypto/null_encryption_test.rb +0 -57
  47. data/test/crypto/traditional_encryption_test.rb +0 -80
  48. data/test/data/WarnInvalidDate.zip +0 -0
  49. data/test/data/file1.txt +0 -46
  50. data/test/data/file1.txt.deflatedData +0 -0
  51. data/test/data/file2.txt +0 -1504
  52. data/test/data/globTest.zip +0 -0
  53. data/test/data/globTest/foo.txt +0 -0
  54. data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
  55. data/test/data/globTest/food.txt +0 -0
  56. data/test/data/gpbit3stored.zip +0 -0
  57. data/test/data/mimetype +0 -1
  58. data/test/data/notzippedruby.rb +0 -7
  59. data/test/data/ntfs.zip +0 -0
  60. data/test/data/oddExtraField.zip +0 -0
  61. data/test/data/path_traversal/Makefile +0 -10
  62. data/test/data/path_traversal/jwilk/README.md +0 -5
  63. data/test/data/path_traversal/jwilk/absolute1.zip +0 -0
  64. data/test/data/path_traversal/jwilk/absolute2.zip +0 -0
  65. data/test/data/path_traversal/jwilk/dirsymlink.zip +0 -0
  66. data/test/data/path_traversal/jwilk/dirsymlink2a.zip +0 -0
  67. data/test/data/path_traversal/jwilk/dirsymlink2b.zip +0 -0
  68. data/test/data/path_traversal/jwilk/relative0.zip +0 -0
  69. data/test/data/path_traversal/jwilk/relative2.zip +0 -0
  70. data/test/data/path_traversal/jwilk/symlink.zip +0 -0
  71. data/test/data/path_traversal/relative1.zip +0 -0
  72. data/test/data/path_traversal/tilde.zip +0 -0
  73. data/test/data/path_traversal/tuzovakaoff/README.md +0 -3
  74. data/test/data/path_traversal/tuzovakaoff/absolutepath.zip +0 -0
  75. data/test/data/path_traversal/tuzovakaoff/symlink.zip +0 -0
  76. data/test/data/rubycode.zip +0 -0
  77. data/test/data/rubycode2.zip +0 -0
  78. data/test/data/test.xls +0 -0
  79. data/test/data/testDirectory.bin +0 -0
  80. data/test/data/zip64-sample.zip +0 -0
  81. data/test/data/zipWithDirs.zip +0 -0
  82. data/test/data/zipWithEncryption.zip +0 -0
  83. data/test/deflater_test.rb +0 -65
  84. data/test/encryption_test.rb +0 -42
  85. data/test/entry_set_test.rb +0 -163
  86. data/test/entry_test.rb +0 -154
  87. data/test/errors_test.rb +0 -35
  88. data/test/extra_field_test.rb +0 -76
  89. data/test/file_extract_directory_test.rb +0 -54
  90. data/test/file_extract_test.rb +0 -145
  91. data/test/file_permissions_test.rb +0 -65
  92. data/test/file_split_test.rb +0 -57
  93. data/test/file_test.rb +0 -666
  94. data/test/filesystem/dir_iterator_test.rb +0 -58
  95. data/test/filesystem/directory_test.rb +0 -139
  96. data/test/filesystem/file_mutating_test.rb +0 -87
  97. data/test/filesystem/file_nonmutating_test.rb +0 -508
  98. data/test/filesystem/file_stat_test.rb +0 -64
  99. data/test/gentestfiles.rb +0 -126
  100. data/test/inflater_test.rb +0 -14
  101. data/test/input_stream_test.rb +0 -182
  102. data/test/ioextras/abstract_input_stream_test.rb +0 -102
  103. data/test/ioextras/abstract_output_stream_test.rb +0 -106
  104. data/test/ioextras/fake_io_test.rb +0 -18
  105. data/test/local_entry_test.rb +0 -154
  106. data/test/output_stream_test.rb +0 -128
  107. data/test/pass_thru_compressor_test.rb +0 -30
  108. data/test/pass_thru_decompressor_test.rb +0 -14
  109. data/test/path_traversal_test.rb +0 -141
  110. data/test/samples/example_recursive_test.rb +0 -37
  111. data/test/settings_test.rb +0 -95
  112. data/test/test_helper.rb +0 -234
  113. data/test/unicode_file_names_and_comments_test.rb +0 -62
  114. data/test/zip64_full_test.rb +0 -51
  115. data/test/zip64_support_test.rb +0 -14
Binary file
File without changes
File without changes
File without changes
Binary file
data/test/data/mimetype DELETED
@@ -1 +0,0 @@
1
- application/epub+zip
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- class NotZippedRuby
4
- def return_true
5
- true
6
- end
7
- end
data/test/data/ntfs.zip DELETED
Binary file
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
@@ -1,5 +0,0 @@
1
- # Path Traversal Samples
2
-
3
- Copied from https://github.com/jwilk/path-traversal-samples on 2018-08-26.
4
-
5
- License: MIT
Binary file
Binary file
@@ -1,3 +0,0 @@
1
- # Path Traversal Samples
2
-
3
- Copied from https://github.com/tuzovakaoff/zip_path_traversal on 2018-08-25.
Binary file
Binary file
data/test/data/test.xls DELETED
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -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
@@ -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
@@ -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