zip_tricks 4.3.0 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 18e1b263b59742dc2a50c28b7074691aed53728f
4
- data.tar.gz: c1c6b01370b806478e85ecb5a2299efd4005fbf4
3
+ metadata.gz: 9b0120891ce2e0dd56729a82b77e629ccef17370
4
+ data.tar.gz: 1b991e7fed1e10bc6ea477d43bc833913b0092ae
5
5
  SHA512:
6
- metadata.gz: a0d0386b54c8bc0d54fc57e4e79ff2dc962651defbfe60ca7789bf6d30e83e4fdcdb5ba099179a9643a138175e1b87e6e070df3f5918da549d9b1e4193c5d851
7
- data.tar.gz: b6528fc6683c2db784a5845acef9073b74aa7ea5c86c6718b9109315d7c72e7f18ad9f6a8b1f46f95b56442714a72d3a3849b90dfd5d37cfef431fd21ab2b850
6
+ metadata.gz: 76588911904aaa0384621f418215dfe9dc0b7025cccd27ba49ce0260809aed3623240d6859b62f86a4c1a9994ac38a60ca354e770fe87af5a52a5c05970661c9
7
+ data.tar.gz: b7ffc3a65e09750a8a1458f73329690df3401550b5e31cb1d573c20a807f0f46ba60f21de817281b22201f954e9dc4df5012abbf148cf08db7aa2b213ac1a427
@@ -91,8 +91,7 @@ https://commons.apache.org/proper/commons-compress/zip.html
91
91
 
92
92
  ## Directory support
93
93
 
94
- ZIP makes it possible to store empty directories (folders). For our purposes, however, we are going
95
- to store only the files. If you store a file, called, say, `docs/item.doc` then the unarchiver will
96
- automatically create the `docs` directory if it doesn't exist already. You can also store an entry
97
- with a length of 0 and set it's external attributes to be an empty directory, but we do not need
98
- that functionality - so it is also omitted.
94
+ ZIP offers the possibility to store empty directories (folders). The directories that contain files, however, get
95
+ created automatically at unarchive time. If you store a file, called, say, `docs/item.doc` then the unarchiver will
96
+ automatically create the `docs` directory if it doesn't exist already. So you need to use the directory creation
97
+ methods only if you do not have any files in those directories.
data/Rakefile CHANGED
@@ -1,6 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
+ require 'yard'
3
4
 
4
- RSpec::Core::RakeTask.new(:spec)
5
+ YARD::Rake::YardocTask.new(:doc) do |t|
6
+ t.files = ['lib/**/*.rb', 'README.md', 'LICENSE.txt', 'IMPLEMENTATION_DETAILS.md']
7
+ end
5
8
 
9
+ RSpec::Core::RakeTask.new(:spec)
6
10
  task :default => :spec
@@ -61,4 +61,14 @@ class ZipTricks::SizeEstimator
61
61
  @streamer.write_data_descriptor_for_last_entry if udd
62
62
  self
63
63
  end
64
+
65
+ # Add an empty directory to the archive.
66
+ #
67
+ # @param dirname [String] the name of the directory
68
+ # @return self
69
+ def add_empty_directory_entry(dirname:)
70
+ @streamer.add_file_and_write_local_header(filename: "#{dirname}" + "/", crc32: 0, storage_mode: 8,
71
+ compressed_size: 0, uncompressed_size: 0)
72
+ self
73
+ end
64
74
  end
@@ -158,6 +158,16 @@ class ZipTricks::Streamer
158
158
  @out.tell
159
159
  end
160
160
 
161
+ # Adds an empty directory to the archive with a size of 0 and permissions of 755.
162
+ #
163
+ # @param dirname [String] the name of the directory in the archive
164
+ # @return [Fixnum] the offset the output IO is at after writing the entry header
165
+ def add_empty_directory(dirname:)
166
+ add_file_and_write_local_header(filename: "#{dirname}" + "/", crc32: 0, storage_mode: STORED,
167
+ compressed_size: 0, uncompressed_size: 0)
168
+ @out.tell
169
+ end
170
+
161
171
  # Opens the stream for a stored file in the archive, and yields a writer for that file to the block.
162
172
  # Once the write completes, a data descriptor will be written with the actual compressed/uncompressed
163
173
  # sizes and the CRC32 checksum.
@@ -202,7 +212,7 @@ class ZipTricks::Streamer
202
212
  last_entry.uncompressed_size = uncomp
203
213
  write_data_descriptor_for_last_entry
204
214
  end
205
-
215
+
206
216
  # Closes the archive. Writes the central directory, and switches the writer into
207
217
  # a state where it can no longer be written to.
208
218
  #
@@ -258,7 +268,7 @@ class ZipTricks::Streamer
258
268
  @writer.write_local_file_header(io: @out, gp_flags: e.gp_flags, crc32: e.crc32, compressed_size: e.compressed_size,
259
269
  uncompressed_size: e.uncompressed_size, mtime: e.mtime, filename: e.filename, storage_mode: e.storage_mode)
260
270
  end
261
-
271
+
262
272
  def write_data_descriptor_for_last_entry
263
273
  e = @files.fetch(-1)
264
274
  @writer.write_data_descriptor(io: @out, crc32: 0, compressed_size: e.compressed_size, uncompressed_size: e.uncompressed_size)
@@ -18,4 +18,5 @@ class ZipTricks::Streamer::Entry < Struct.new(:filename, :crc32, :compressed_siz
18
18
  flag |= 0x0008 if use_data_descriptor # bit 3
19
19
  flag
20
20
  end
21
+
21
22
  end
@@ -1,3 +1,3 @@
1
1
  module ZipTricks
2
- VERSION = '4.3.0'
2
+ VERSION = '4.4.0'
3
3
  end
@@ -39,6 +39,12 @@ class ZipTricks::ZipWriter
39
39
  file_type_file = 010
40
40
  external_attrs = (file_type_file << 12 | (unix_perms & 07777)) << 16
41
41
  end
42
+ EMPTY_DIRECTORY_EXTERNAL_ATTRS = begin
43
+ # Applies permissions to an empty directory.
44
+ unix_perms = 0755
45
+ file_type_dir = 004
46
+ external_attrs = (file_type_file << 12 | (unix_perms & 07777)) << 16
47
+ end
42
48
  MADE_BY_SIGNATURE = begin
43
49
  # A combination of the VERSION_MADE_BY low byte and the OS type high byte
44
50
  os_type = 3 # UNIX
@@ -120,11 +126,10 @@ class ZipTricks::ZipWriter
120
126
  # @param uncompressed_size[Fixnum] The size of the file once extracted
121
127
  # @param crc32[Fixnum] The CRC32 checksum of the file
122
128
  # @param mtime[Time] the modification time to be recorded in the ZIP
123
- # @param external_attrs[Fixnum] bit-packed external attributes (defaults to UNIX file with 0644 permissions set)
124
129
  # @param gp_flags[Fixnum] bit-packed general purpose flags
125
130
  # @return [void]
126
131
  def write_central_directory_file_header(io:, local_file_header_location:, gp_flags:, storage_mode:, compressed_size:, uncompressed_size:, mtime:, crc32:,
127
- filename:, external_attrs: DEFAULT_EXTERNAL_ATTRS)
132
+ filename:)
128
133
  # At this point if the header begins somewhere beyound 0xFFFFFFFF we _have_ to record the offset
129
134
  # of the local file header as a zip64 extra field, so we give up, give in, you loose, love will always win...
130
135
  add_zip64 = (local_file_header_location > FOUR_BYTE_MAX_UINT) ||
@@ -137,7 +142,7 @@ class ZipTricks::ZipWriter
137
142
  else
138
143
  io << [VERSION_NEEDED_TO_EXTRACT].pack(C_v) # version needed to extract 2 bytes
139
144
  end
140
-
145
+
141
146
  io << [gp_flags].pack(C_v) # general purpose bit flag 2 bytes
142
147
  io << [storage_mode].pack(C_v) # compression method 2 bytes
143
148
  io << [to_binary_dos_time(mtime)].pack(C_v) # last mod file time 2 bytes
@@ -176,7 +181,14 @@ class ZipTricks::ZipWriter
176
181
  io << [0].pack(C_v)
177
182
  end
178
183
  io << [0].pack(C_v) # internal file attributes 2 bytes
179
- io << [DEFAULT_EXTERNAL_ATTRS].pack(C_V) # external file attributes 4 bytes
184
+
185
+ # Because the add_empty_directory method will create a directory with a trailing "/",
186
+ # this check can be used to assign proper permissions to the created directory.
187
+ if filename.end_with?("/")
188
+ io << [EMPTY_DIRECTORY_EXTERNAL_ATTRS].pack(C_V)
189
+ else
190
+ io << [DEFAULT_EXTERNAL_ATTRS].pack(C_V) # external file attributes 4 bytes
191
+ end
180
192
 
181
193
  if add_zip64 # relative offset of local header 4 bytes
182
194
  io << [FOUR_BYTE_MAX_UINT].pack(C_V)
@@ -8,6 +8,16 @@ build_test "Two small stored files" do |zip|
8
8
  zip << $image_file
9
9
  end
10
10
 
11
+ build_test "Two small stored files and an empty directory" do |zip|
12
+ zip.add_stored_entry(filename: 'text.txt', size: $war_and_peace.bytesize, crc32: $war_and_peace_crc)
13
+ zip << $war_and_peace
14
+
15
+ zip.add_stored_entry(filename: 'image.jpg', size: $image_file.bytesize, crc32: $image_file_crc)
16
+ zip << $image_file
17
+
18
+ zip.add_empty_directory(dirname: "Chekov")
19
+ end
20
+
11
21
  build_test "Filename with diacritics" do |zip|
12
22
  zip.add_stored_entry(filename: 'Kungälv.txt', size: $war_and_peace.bytesize, crc32: $war_and_peace_crc)
13
23
  zip << $war_and_peace
@@ -0,0 +1,168 @@
1
+
2
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
3
+ | OSX 10.11 - Archive Utility (builtin) |
4
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
5
+ | Test | Outcome |
6
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
7
+ | 01-two_small_stored_files.zip | Works |
8
+ | Two small stored files | |
9
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
10
+ | 02-two_small_stored_files_and_an_empty_directory.zip | Works |
11
+ | Two small stored files and an empty directory | |
12
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
13
+ | 03-filename_with_diacritics.zip | Works |
14
+ | Filename with diacritics | |
15
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
16
+ | 04-purely_utf8_filename.zip | Works |
17
+ | Purely UTF-8 filename | |
18
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
19
+ | 05-two_entries_larger_than_the_overall_zip64_offset.zip | Pending |
20
+ | Two entries larger than the overall Zip64 offset | |
21
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
22
+ | 06-one_entry_that_requires_zip64_and_a_tiny_entry_following_it.zip | Pending |
23
+ | One entry that requires Zip64 and a tiny entry following it | |
24
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
25
+ | 07-one_tiny_entry_followed_by_second_that_requires_zip64.zip | Pending |
26
+ | One tiny entry followed by second that requires Zip64 | |
27
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
28
+ | 08-two_entries_both_requiring_zip64.zip | Pending |
29
+ | Two entries both requiring Zip64 | |
30
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
31
+ | 09-two_stored_entries_using_data_descriptors.zip | Works |
32
+ | Two stored entries using data descriptors | |
33
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
34
+ | 10-one_entry_deflated_using_data_descriptors.zip | Works |
35
+ | One entry deflated using data descriptors | |
36
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
37
+ | 11-two_entries_larger_than_the_overall_zip64_offset_using_data_descriptors.zip | Pending |
38
+ | Two entries larger than the overall Zip64 offset using data descriptors | |
39
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
40
+ | 12-one_stored_entry_larger_than_zip64_threshold_using_data_descriptors.zip | Pending |
41
+ | One stored entry larger than Zip64 threshold using data descriptors | |
42
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
43
+
44
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
45
+ | OSX - The Unarchiver 3.10 |
46
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
47
+ | Test | Outcome |
48
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
49
+ | 01-two_small_stored_files.zip | Works |
50
+ | Two small stored files | |
51
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
52
+ | 02-two_small_stored_files_and_an_empty_directory.zip | Works |
53
+ | Two small stored files and an empty directory | |
54
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
55
+ | 03-filename_with_diacritics.zip | Works |
56
+ | Filename with diacritics | |
57
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
58
+ | 04-purely_utf8_filename.zip | Works |
59
+ | Purely UTF-8 filename | |
60
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
61
+ | 05-two_entries_larger_than_the_overall_zip64_offset.zip | Pending |
62
+ | Two entries larger than the overall Zip64 offset | |
63
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
64
+ | 06-one_entry_that_requires_zip64_and_a_tiny_entry_following_it.zip | Pending |
65
+ | One entry that requires Zip64 and a tiny entry following it | |
66
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
67
+ | 07-one_tiny_entry_followed_by_second_that_requires_zip64.zip | Pending |
68
+ | One tiny entry followed by second that requires Zip64 | |
69
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
70
+ | 08-two_entries_both_requiring_zip64.zip | Pending |
71
+ | Two entries both requiring Zip64 | |
72
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
73
+ | 09-two_stored_entries_using_data_descriptors.zip | Works |
74
+ | Two stored entries using data descriptors | |
75
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
76
+ | 10-one_entry_deflated_using_data_descriptors.zip | Works |
77
+ | One entry deflated using data descriptors | |
78
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
79
+ | 11-two_entries_larger_than_the_overall_zip64_offset_using_data_descriptors.zip | Pending |
80
+ | Two entries larger than the overall Zip64 offset using data descriptors | |
81
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
82
+ | 12-one_stored_entry_larger_than_zip64_threshold_using_data_descriptors.zip | Pending |
83
+ | One stored entry larger than Zip64 threshold using data descriptors | |
84
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
85
+
86
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
87
+ | Windows7 x64 - Builtin Explorer ZIP opener |
88
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
89
+ | Test | Outcome |
90
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
91
+ | 01-two_small_stored_files.zip | Pending |
92
+ | Two small stored files | |
93
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
94
+ | 02-two_small_stored_files_and_an_empty_directory.zip | Works |
95
+ | Two small stored files and an empty directory | |
96
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
97
+ | 03-filename_with_diacritics.zip | Pending |
98
+ | Filename with diacritics | |
99
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
100
+ | 04-purely_utf8_filename.zip | Pending |
101
+ | Purely UTF-8 filename | |
102
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
103
+ | 05-two_entries_larger_than_the_overall_zip64_offset.zip | Pending |
104
+ | Two entries larger than the overall Zip64 offset | |
105
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
106
+ | 06-one_entry_that_requires_zip64_and_a_tiny_entry_following_it.zip | Pending |
107
+ | One entry that requires Zip64 and a tiny entry following it | |
108
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
109
+ | 07-one_tiny_entry_followed_by_second_that_requires_zip64.zip | Pending |
110
+ | One tiny entry followed by second that requires Zip64 | |
111
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
112
+ | 08-two_entries_both_requiring_zip64.zip | Pending |
113
+ | Two entries both requiring Zip64 | |
114
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
115
+ | 09-two_stored_entries_using_data_descriptors.zip | Pending |
116
+ | Two stored entries using data descriptors | |
117
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
118
+ | 10-one_entry_deflated_using_data_descriptors.zip | Pending |
119
+ | One entry deflated using data descriptors | |
120
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
121
+ | 11-two_entries_larger_than_the_overall_zip64_offset_using_data_descriptors.zip | Pending |
122
+ | Two entries larger than the overall Zip64 offset using data descriptors | |
123
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
124
+ | 12-one_stored_entry_larger_than_zip64_threshold_using_data_descriptors.zip | Pending |
125
+ | One stored entry larger than Zip64 threshold using data descriptors | |
126
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
127
+
128
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
129
+ | Windows7 x64 - 7Zip 9.20 |
130
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
131
+ | Test | Outcome |
132
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
133
+ | 01-two_small_stored_files.zip | Pending |
134
+ | Two small stored files | |
135
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
136
+ | 02-two_small_stored_files_and_an_empty_directory.zip | Works |
137
+ | Two small stored files and an empty directory | |
138
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
139
+ | 03-filename_with_diacritics.zip | Pending |
140
+ | Filename with diacritics | |
141
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
142
+ | 04-purely_utf8_filename.zip | Pending |
143
+ | Purely UTF-8 filename | |
144
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
145
+ | 05-two_entries_larger_than_the_overall_zip64_offset.zip | Pending |
146
+ | Two entries larger than the overall Zip64 offset | |
147
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
148
+ | 06-one_entry_that_requires_zip64_and_a_tiny_entry_following_it.zip | Pending |
149
+ | One entry that requires Zip64 and a tiny entry following it | |
150
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
151
+ | 07-one_tiny_entry_followed_by_second_that_requires_zip64.zip | Pending |
152
+ | One tiny entry followed by second that requires Zip64 | |
153
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
154
+ | 08-two_entries_both_requiring_zip64.zip | Pending |
155
+ | Two entries both requiring Zip64 | |
156
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
157
+ | 09-two_stored_entries_using_data_descriptors.zip | Pending |
158
+ | Two stored entries using data descriptors | |
159
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
160
+ | 10-one_entry_deflated_using_data_descriptors.zip | Pending |
161
+ | One entry deflated using data descriptors | |
162
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
163
+ | 11-two_entries_larger_than_the_overall_zip64_offset_using_data_descriptors.zip | Pending |
164
+ | Two entries larger than the overall Zip64 offset using data descriptors | |
165
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
166
+ | 12-one_stored_entry_larger_than_zip64_threshold_using_data_descriptors.zip | Pending |
167
+ | One stored entry larger than Zip64 threshold using data descriptors | |
168
+ +--------------------------------------------------------------------------------+------------------------------------------------------------------+
@@ -37,6 +37,6 @@ Gem::Specification.new do |spec|
37
37
  spec.add_development_dependency 'rake', '~> 10.4'
38
38
  spec.add_development_dependency "rspec", "~> 3.2.0", '< 3.3'
39
39
  spec.add_development_dependency 'coderay'
40
- spec.add_development_dependency "yard", "~> 0.8"
40
+ spec.add_development_dependency "yard", "~> 0.9"
41
41
 
42
42
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zip_tricks
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.0
4
+ version: 4.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-31 00:00:00.000000000 Z
11
+ date: 2017-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -134,14 +134,14 @@ dependencies:
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: '0.8'
137
+ version: '0.9'
138
138
  type: :development
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '0.8'
144
+ version: '0.9'
145
145
  description: Stream out ZIP files from Ruby
146
146
  email:
147
147
  - me@julik.nl
@@ -191,7 +191,7 @@ files:
191
191
  - testing/support.rb
192
192
  - testing/test-report-2016-07-28.txt
193
193
  - testing/test-report-2016-12-12.txt
194
- - testing/test-report.txt
194
+ - testing/test-report-2017-04-2.txt
195
195
  - zip_tricks.gemspec
196
196
  homepage: http://github.com/wetransfer/zip_tricks
197
197
  licenses: []
@@ -218,4 +218,3 @@ signing_key:
218
218
  specification_version: 4
219
219
  summary: Stream out ZIP files from Ruby
220
220
  test_files: []
221
- has_rdoc:
@@ -1,28 +0,0 @@
1
-
2
- +-------------------+-------------------+
3
- | OSX 10.11 - Archive Utility (builtin) |
4
- +-------------------+-------------------+
5
- | Test | Outcome |
6
- +-------------------+-------------------+
7
- +-------------------+-------------------+
8
-
9
- +-------------+-------------+
10
- | OSX - The Unarchiver 3.10 |
11
- +-------------+-------------+
12
- | Test | Outcome |
13
- +-------------+-------------+
14
- +-------------+-------------+
15
-
16
- +----------------------+----------------------+
17
- | Windows7 x64 - Builtin Explorer ZIP opener |
18
- +----------------------+----------------------+
19
- | Test | Outcome |
20
- +----------------------+----------------------+
21
- +----------------------+----------------------+
22
-
23
- +-------------+-------------+
24
- | Windows7 x64 - 7Zip 9.20 |
25
- +-------------+-------------+
26
- | Test | Outcome |
27
- +-------------+-------------+
28
- +-------------+-------------+