rubyzip 1.3.0 → 3.0.0.alpha

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 (134) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +368 -0
  3. data/README.md +123 -46
  4. data/Rakefile +13 -6
  5. data/lib/zip/central_directory.rb +166 -116
  6. data/lib/zip/compressor.rb +3 -1
  7. data/lib/zip/constants.rb +77 -21
  8. data/lib/zip/crypto/decrypted_io.rb +42 -0
  9. data/lib/zip/crypto/encryption.rb +4 -2
  10. data/lib/zip/crypto/null_encryption.rb +5 -3
  11. data/lib/zip/crypto/traditional_encryption.rb +14 -12
  12. data/lib/zip/decompressor.rb +21 -2
  13. data/lib/zip/deflater.rb +10 -8
  14. data/lib/zip/dirtyable.rb +32 -0
  15. data/lib/zip/dos_time.rb +53 -12
  16. data/lib/zip/entry.rb +306 -184
  17. data/lib/zip/entry_set.rb +11 -7
  18. data/lib/zip/errors.rb +115 -15
  19. data/lib/zip/extra_field/generic.rb +11 -17
  20. data/lib/zip/extra_field/ntfs.rb +8 -2
  21. data/lib/zip/extra_field/old_unix.rb +6 -2
  22. data/lib/zip/extra_field/universal_time.rb +45 -13
  23. data/lib/zip/extra_field/unix.rb +7 -3
  24. data/lib/zip/extra_field/unknown.rb +33 -0
  25. data/lib/zip/extra_field/zip64.rb +16 -7
  26. data/lib/zip/extra_field.rb +22 -26
  27. data/lib/zip/file.rb +196 -240
  28. data/lib/zip/file_split.rb +97 -0
  29. data/lib/zip/filesystem/dir.rb +86 -0
  30. data/lib/zip/filesystem/directory_iterator.rb +48 -0
  31. data/lib/zip/filesystem/file.rb +262 -0
  32. data/lib/zip/filesystem/file_stat.rb +110 -0
  33. data/lib/zip/filesystem/zip_file_name_mapper.rb +81 -0
  34. data/lib/zip/filesystem.rb +31 -584
  35. data/lib/zip/inflater.rb +27 -37
  36. data/lib/zip/input_stream.rb +67 -42
  37. data/lib/zip/ioextras/abstract_input_stream.rb +32 -16
  38. data/lib/zip/ioextras/abstract_output_stream.rb +5 -3
  39. data/lib/zip/ioextras.rb +7 -7
  40. data/lib/zip/null_compressor.rb +3 -1
  41. data/lib/zip/null_decompressor.rb +4 -10
  42. data/lib/zip/null_input_stream.rb +3 -1
  43. data/lib/zip/output_stream.rb +58 -43
  44. data/lib/zip/pass_thru_compressor.rb +5 -3
  45. data/lib/zip/pass_thru_decompressor.rb +16 -23
  46. data/lib/zip/streamable_directory.rb +6 -4
  47. data/lib/zip/streamable_stream.rb +9 -10
  48. data/lib/zip/version.rb +3 -1
  49. data/lib/zip.rb +19 -4
  50. data/rubyzip.gemspec +38 -0
  51. data/samples/example.rb +9 -4
  52. data/samples/example_filesystem.rb +3 -2
  53. data/samples/example_recursive.rb +3 -1
  54. data/samples/gtk_ruby_zip.rb +22 -20
  55. data/samples/qtzip.rb +12 -11
  56. data/samples/write_simple.rb +3 -4
  57. data/samples/zipfind.rb +24 -22
  58. metadata +86 -179
  59. data/TODO +0 -15
  60. data/lib/zip/extra_field/zip64_placeholder.rb +0 -15
  61. data/test/basic_zip_file_test.rb +0 -60
  62. data/test/case_sensitivity_test.rb +0 -69
  63. data/test/central_directory_entry_test.rb +0 -69
  64. data/test/central_directory_test.rb +0 -100
  65. data/test/crypto/null_encryption_test.rb +0 -57
  66. data/test/crypto/traditional_encryption_test.rb +0 -80
  67. data/test/data/WarnInvalidDate.zip +0 -0
  68. data/test/data/file1.txt +0 -46
  69. data/test/data/file1.txt.deflatedData +0 -0
  70. data/test/data/file2.txt +0 -1504
  71. data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
  72. data/test/data/globTest/foo.txt +0 -0
  73. data/test/data/globTest/food.txt +0 -0
  74. data/test/data/globTest.zip +0 -0
  75. data/test/data/gpbit3stored.zip +0 -0
  76. data/test/data/mimetype +0 -1
  77. data/test/data/notzippedruby.rb +0 -7
  78. data/test/data/ntfs.zip +0 -0
  79. data/test/data/oddExtraField.zip +0 -0
  80. data/test/data/path_traversal/Makefile +0 -10
  81. data/test/data/path_traversal/jwilk/README.md +0 -5
  82. data/test/data/path_traversal/jwilk/absolute1.zip +0 -0
  83. data/test/data/path_traversal/jwilk/absolute2.zip +0 -0
  84. data/test/data/path_traversal/jwilk/dirsymlink.zip +0 -0
  85. data/test/data/path_traversal/jwilk/dirsymlink2a.zip +0 -0
  86. data/test/data/path_traversal/jwilk/dirsymlink2b.zip +0 -0
  87. data/test/data/path_traversal/jwilk/relative0.zip +0 -0
  88. data/test/data/path_traversal/jwilk/relative2.zip +0 -0
  89. data/test/data/path_traversal/jwilk/symlink.zip +0 -0
  90. data/test/data/path_traversal/relative1.zip +0 -0
  91. data/test/data/path_traversal/tilde.zip +0 -0
  92. data/test/data/path_traversal/tuzovakaoff/README.md +0 -3
  93. data/test/data/path_traversal/tuzovakaoff/absolutepath.zip +0 -0
  94. data/test/data/path_traversal/tuzovakaoff/symlink.zip +0 -0
  95. data/test/data/rubycode.zip +0 -0
  96. data/test/data/rubycode2.zip +0 -0
  97. data/test/data/test.xls +0 -0
  98. data/test/data/testDirectory.bin +0 -0
  99. data/test/data/zip64-sample.zip +0 -0
  100. data/test/data/zipWithDirs.zip +0 -0
  101. data/test/data/zipWithEncryption.zip +0 -0
  102. data/test/deflater_test.rb +0 -65
  103. data/test/encryption_test.rb +0 -42
  104. data/test/entry_set_test.rb +0 -163
  105. data/test/entry_test.rb +0 -154
  106. data/test/errors_test.rb +0 -35
  107. data/test/extra_field_test.rb +0 -76
  108. data/test/file_extract_directory_test.rb +0 -54
  109. data/test/file_extract_test.rb +0 -145
  110. data/test/file_permissions_test.rb +0 -65
  111. data/test/file_split_test.rb +0 -57
  112. data/test/file_test.rb +0 -666
  113. data/test/filesystem/dir_iterator_test.rb +0 -58
  114. data/test/filesystem/directory_test.rb +0 -139
  115. data/test/filesystem/file_mutating_test.rb +0 -87
  116. data/test/filesystem/file_nonmutating_test.rb +0 -508
  117. data/test/filesystem/file_stat_test.rb +0 -64
  118. data/test/gentestfiles.rb +0 -126
  119. data/test/inflater_test.rb +0 -14
  120. data/test/input_stream_test.rb +0 -182
  121. data/test/ioextras/abstract_input_stream_test.rb +0 -102
  122. data/test/ioextras/abstract_output_stream_test.rb +0 -106
  123. data/test/ioextras/fake_io_test.rb +0 -18
  124. data/test/local_entry_test.rb +0 -154
  125. data/test/output_stream_test.rb +0 -128
  126. data/test/pass_thru_compressor_test.rb +0 -30
  127. data/test/pass_thru_decompressor_test.rb +0 -14
  128. data/test/path_traversal_test.rb +0 -141
  129. data/test/samples/example_recursive_test.rb +0 -37
  130. data/test/settings_test.rb +0 -95
  131. data/test/test_helper.rb +0 -234
  132. data/test/unicode_file_names_and_comments_test.rb +0 -62
  133. data/test/zip64_full_test.rb +0 -51
  134. data/test/zip64_support_test.rb +0 -14
File without changes
File without changes
File without changes
Binary file
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
data/test/errors_test.rb DELETED
@@ -1,35 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'test_helper'
4
-
5
- class ErrorsTest < MiniTest::Test
6
- def test_rescue_legacy_zip_error
7
- raise ::Zip::Error
8
- rescue ::Zip::ZipError
9
- end
10
-
11
- def test_rescue_legacy_zip_entry_exists_error
12
- raise ::Zip::EntryExistsError
13
- rescue ::Zip::ZipEntryExistsError
14
- end
15
-
16
- def test_rescue_legacy_zip_destination_file_exists_error
17
- raise ::Zip::DestinationFileExistsError
18
- rescue ::Zip::ZipDestinationFileExistsError
19
- end
20
-
21
- def test_rescue_legacy_zip_compression_method_error
22
- raise ::Zip::CompressionMethodError
23
- rescue ::Zip::ZipCompressionMethodError
24
- end
25
-
26
- def test_rescue_legacy_zip_entry_name_error
27
- raise ::Zip::EntryNameError
28
- rescue ::Zip::ZipEntryNameError
29
- end
30
-
31
- def test_rescue_legacy_zip_internal_error
32
- raise ::Zip::InternalError
33
- rescue ::Zip::ZipInternalError
34
- end
35
- end
@@ -1,76 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ZipExtraFieldTest < MiniTest::Test
4
- def test_new
5
- extra_pure = ::Zip::ExtraField.new('')
6
- extra_withstr = ::Zip::ExtraField.new('foo')
7
- assert_instance_of(::Zip::ExtraField, extra_pure)
8
- assert_instance_of(::Zip::ExtraField, extra_withstr)
9
- end
10
-
11
- def test_unknownfield
12
- extra = ::Zip::ExtraField.new('foo')
13
- assert_equal(extra['Unknown'], 'foo')
14
- extra.merge('a')
15
- assert_equal(extra['Unknown'], 'fooa')
16
- extra.merge('barbaz')
17
- assert_equal(extra.to_s, 'fooabarbaz')
18
- end
19
-
20
- def test_ntfs
21
- str = "\x0A\x00 \x00\x00\x00\x00\x00\x01\x00\x18\x00\xC0\x81\x17\xE8B\xCE\xCF\x01\xC0\x81\x17\xE8B\xCE\xCF\x01\xC0\x81\x17\xE8B\xCE\xCF\x01"
22
- extra = ::Zip::ExtraField.new(str)
23
- assert(extra.member?('NTFS'))
24
- t = ::Zip::DOSTime.at(1_410_496_497.405178)
25
- assert_equal(t, extra['NTFS'].mtime)
26
- assert_equal(t, extra['NTFS'].atime)
27
- assert_equal(t, extra['NTFS'].ctime)
28
- end
29
-
30
- def test_merge
31
- str = "UT\x5\0\x3\250$\r@Ux\0\0"
32
- extra1 = ::Zip::ExtraField.new('')
33
- extra2 = ::Zip::ExtraField.new(str)
34
- assert(!extra1.member?('UniversalTime'))
35
- assert(extra2.member?('UniversalTime'))
36
- extra1.merge(str)
37
- assert_equal(extra1['UniversalTime'].mtime, extra2['UniversalTime'].mtime)
38
- end
39
-
40
- def test_length
41
- str = "UT\x5\0\x3\250$\r@Ux\0\0Te\0\0testit"
42
- extra = ::Zip::ExtraField.new(str)
43
- assert_equal(extra.local_size, extra.to_local_bin.size)
44
- assert_equal(extra.c_dir_size, extra.to_c_dir_bin.size)
45
- extra.merge('foo')
46
- assert_equal(extra.local_size, extra.to_local_bin.size)
47
- assert_equal(extra.c_dir_size, extra.to_c_dir_bin.size)
48
- end
49
-
50
- def test_to_s
51
- str = "UT\x5\0\x3\250$\r@Ux\0\0Te\0\0testit"
52
- extra = ::Zip::ExtraField.new(str)
53
- assert_instance_of(String, extra.to_s)
54
-
55
- s = extra.to_s
56
- extra.merge('foo')
57
- assert_equal(s.length + 3, extra.to_s.length)
58
- end
59
-
60
- def test_equality
61
- str = "UT\x5\0\x3\250$\r@"
62
- extra1 = ::Zip::ExtraField.new(str)
63
- extra2 = ::Zip::ExtraField.new(str)
64
- extra3 = ::Zip::ExtraField.new(str)
65
- assert_equal(extra1, extra2)
66
-
67
- extra2['UniversalTime'].mtime = ::Zip::DOSTime.now
68
- assert(extra1 != extra2)
69
-
70
- extra3.create('IUnix')
71
- assert(extra1 != extra3)
72
-
73
- extra1.create('IUnix')
74
- assert_equal(extra1, extra3)
75
- end
76
- end