rubyzip 1.3.0 → 2.0.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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -8
  3. data/lib/zip.rb +1 -1
  4. data/lib/zip/version.rb +1 -1
  5. metadata +6 -154
  6. data/test/basic_zip_file_test.rb +0 -60
  7. data/test/case_sensitivity_test.rb +0 -69
  8. data/test/central_directory_entry_test.rb +0 -69
  9. data/test/central_directory_test.rb +0 -100
  10. data/test/crypto/null_encryption_test.rb +0 -57
  11. data/test/crypto/traditional_encryption_test.rb +0 -80
  12. data/test/data/WarnInvalidDate.zip +0 -0
  13. data/test/data/file1.txt +0 -46
  14. data/test/data/file1.txt.deflatedData +0 -0
  15. data/test/data/file2.txt +0 -1504
  16. data/test/data/globTest.zip +0 -0
  17. data/test/data/globTest/foo.txt +0 -0
  18. data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
  19. data/test/data/globTest/food.txt +0 -0
  20. data/test/data/gpbit3stored.zip +0 -0
  21. data/test/data/mimetype +0 -1
  22. data/test/data/notzippedruby.rb +0 -7
  23. data/test/data/ntfs.zip +0 -0
  24. data/test/data/oddExtraField.zip +0 -0
  25. data/test/data/path_traversal/Makefile +0 -10
  26. data/test/data/path_traversal/jwilk/README.md +0 -5
  27. data/test/data/path_traversal/jwilk/absolute1.zip +0 -0
  28. data/test/data/path_traversal/jwilk/absolute2.zip +0 -0
  29. data/test/data/path_traversal/jwilk/dirsymlink.zip +0 -0
  30. data/test/data/path_traversal/jwilk/dirsymlink2a.zip +0 -0
  31. data/test/data/path_traversal/jwilk/dirsymlink2b.zip +0 -0
  32. data/test/data/path_traversal/jwilk/relative0.zip +0 -0
  33. data/test/data/path_traversal/jwilk/relative2.zip +0 -0
  34. data/test/data/path_traversal/jwilk/symlink.zip +0 -0
  35. data/test/data/path_traversal/relative1.zip +0 -0
  36. data/test/data/path_traversal/tilde.zip +0 -0
  37. data/test/data/path_traversal/tuzovakaoff/README.md +0 -3
  38. data/test/data/path_traversal/tuzovakaoff/absolutepath.zip +0 -0
  39. data/test/data/path_traversal/tuzovakaoff/symlink.zip +0 -0
  40. data/test/data/rubycode.zip +0 -0
  41. data/test/data/rubycode2.zip +0 -0
  42. data/test/data/test.xls +0 -0
  43. data/test/data/testDirectory.bin +0 -0
  44. data/test/data/zip64-sample.zip +0 -0
  45. data/test/data/zipWithDirs.zip +0 -0
  46. data/test/data/zipWithEncryption.zip +0 -0
  47. data/test/deflater_test.rb +0 -65
  48. data/test/encryption_test.rb +0 -42
  49. data/test/entry_set_test.rb +0 -163
  50. data/test/entry_test.rb +0 -154
  51. data/test/errors_test.rb +0 -35
  52. data/test/extra_field_test.rb +0 -76
  53. data/test/file_extract_directory_test.rb +0 -54
  54. data/test/file_extract_test.rb +0 -145
  55. data/test/file_permissions_test.rb +0 -65
  56. data/test/file_split_test.rb +0 -57
  57. data/test/file_test.rb +0 -666
  58. data/test/filesystem/dir_iterator_test.rb +0 -58
  59. data/test/filesystem/directory_test.rb +0 -139
  60. data/test/filesystem/file_mutating_test.rb +0 -87
  61. data/test/filesystem/file_nonmutating_test.rb +0 -508
  62. data/test/filesystem/file_stat_test.rb +0 -64
  63. data/test/gentestfiles.rb +0 -126
  64. data/test/inflater_test.rb +0 -14
  65. data/test/input_stream_test.rb +0 -182
  66. data/test/ioextras/abstract_input_stream_test.rb +0 -102
  67. data/test/ioextras/abstract_output_stream_test.rb +0 -106
  68. data/test/ioextras/fake_io_test.rb +0 -18
  69. data/test/local_entry_test.rb +0 -154
  70. data/test/output_stream_test.rb +0 -128
  71. data/test/pass_thru_compressor_test.rb +0 -30
  72. data/test/pass_thru_decompressor_test.rb +0 -14
  73. data/test/path_traversal_test.rb +0 -141
  74. data/test/samples/example_recursive_test.rb +0 -37
  75. data/test/settings_test.rb +0 -95
  76. data/test/test_helper.rb +0 -234
  77. data/test/unicode_file_names_and_comments_test.rb +0 -62
  78. data/test/zip64_full_test.rb +0 -51
  79. data/test/zip64_support_test.rb +0 -14
Binary file
File without changes
File without changes
File without changes
Binary file
@@ -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
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
@@ -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
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
@@ -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