zip_tricks 4.3.0 → 4.4.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.
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
- +-------------+-------------+