zip-container 3.0.2 → 4.0.1
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 +5 -5
- data/Gemfile +1 -1
- data/Licence.rdoc +1 -1
- data/Rakefile +15 -12
- data/examples/create-zip-container +7 -8
- data/examples/zip-container-info +4 -4
- data/lib/zip-container/container.rb +5 -7
- data/lib/zip-container/dir.rb +8 -11
- data/lib/zip-container/entries/directory.rb +5 -5
- data/lib/zip-container/entries/entry.rb +19 -15
- data/lib/zip-container/entries/file.rb +10 -9
- data/lib/zip-container/entries/managed.rb +11 -11
- data/lib/zip-container/entries/reserved.rb +2 -2
- data/lib/zip-container/exceptions.rb +4 -2
- data/lib/zip-container/file.rb +16 -16
- data/lib/zip-container/util.rb +3 -3
- data/lib/zip-container/version.rb +4 -3
- data/version.yml +2 -2
- data/zip-container.gemspec +30 -27
- metadata +41 -83
- data/.gitignore +0 -9
- data/.ruby-env +0 -1
- data/.ruby-gemset +0 -1
- data/.ruby-version +0 -1
- data/.travis.yml +0 -19
- data/test/data/compressed_mimetype.container +0 -0
- data/test/data/dirs/dir-mimetype/mimetype/.gitkeep +0 -1
- data/test/data/dirs/empty/mimetype +0 -1
- data/test/data/dirs/managed/dir/.gitkeep +0 -0
- data/test/data/dirs/managed/greeting.txt +0 -1
- data/test/data/dirs/managed/mimetype +0 -1
- data/test/data/dirs/null/.gitkeep +0 -1
- data/test/data/empty.container +0 -0
- data/test/data/empty.zip +0 -0
- data/test/data/example.container +0 -0
- data/test/data/null.file +0 -0
- data/test/data/subclassed.container +0 -0
- data/test/helpers/entry_lists.rb +0 -35
- data/test/tc_create_dir.rb +0 -56
- data/test/tc_create_file.rb +0 -140
- data/test/tc_exceptions.rb +0 -105
- data/test/tc_managed_entries.rb +0 -446
- data/test/tc_read_dir.rb +0 -90
- data/test/tc_read_file.rb +0 -118
- data/test/tc_reserved_names.rb +0 -334
- data/test/tc_util.rb +0 -67
- data/test/ts_container.rb +0 -59
data/test/tc_read_dir.rb
DELETED
@@ -1,90 +0,0 @@
|
|
1
|
-
# Copyright (c) 2014 The University of Manchester, UK.
|
2
|
-
#
|
3
|
-
# All rights reserved.
|
4
|
-
#
|
5
|
-
# Redistribution and use in source and binary forms, with or without
|
6
|
-
# modification, are permitted provided that the following conditions are met:
|
7
|
-
#
|
8
|
-
# * Redistributions of source code must retain the above copyright notice,
|
9
|
-
# this list of conditions and the following disclaimer.
|
10
|
-
#
|
11
|
-
# * Redistributions in binary form must reproduce the above copyright notice,
|
12
|
-
# this list of conditions and the following disclaimer in the documentation
|
13
|
-
# and/or other materials provided with the distribution.
|
14
|
-
#
|
15
|
-
# * Neither the names of The University of Manchester nor the names of its
|
16
|
-
# contributors may be used to endorse or promote products derived from this
|
17
|
-
# software without specific prior written permission.
|
18
|
-
#
|
19
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
20
|
-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
-
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
23
|
-
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
24
|
-
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
25
|
-
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
26
|
-
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
27
|
-
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
-
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
29
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
30
|
-
#
|
31
|
-
# Author: Robert Haines
|
32
|
-
|
33
|
-
require 'test/unit'
|
34
|
-
require 'tmpdir'
|
35
|
-
require 'zip-container'
|
36
|
-
|
37
|
-
class TestReadDir < Test::Unit::TestCase
|
38
|
-
|
39
|
-
# Check that the empty directory does not verify.
|
40
|
-
def test_verify_empty_directory
|
41
|
-
assert_raise(ZipContainer::MalformedContainerError) do
|
42
|
-
ZipContainer::Dir.verify!($dir_null)
|
43
|
-
end
|
44
|
-
|
45
|
-
refute(ZipContainer::Dir.verify($dir_null).empty?)
|
46
|
-
refute(ZipContainer::Dir.verify?($dir_null))
|
47
|
-
end
|
48
|
-
|
49
|
-
# Check that the empty container directory does verify.
|
50
|
-
def test_verify_empty_container
|
51
|
-
assert_nothing_raised(ZipContainer::MalformedContainerError) do
|
52
|
-
ZipContainer::Dir.verify!($dir_empty)
|
53
|
-
end
|
54
|
-
|
55
|
-
assert(ZipContainer::Dir.verify($dir_empty).empty?)
|
56
|
-
assert(ZipContainer::Dir.verify?($dir_empty))
|
57
|
-
end
|
58
|
-
|
59
|
-
# Check that a mimetype entry that is a directory does not verify.
|
60
|
-
def test_verify_mimetype_directory
|
61
|
-
assert_raise(ZipContainer::MalformedContainerError) do
|
62
|
-
ZipContainer::Dir.verify!($dir_dir_mimetype)
|
63
|
-
end
|
64
|
-
|
65
|
-
refute(ZipContainer::Dir.verify($dir_dir_mimetype).empty?)
|
66
|
-
refute(ZipContainer::Dir.verify?($dir_dir_mimetype))
|
67
|
-
end
|
68
|
-
|
69
|
-
# Check that a mimetype which is not readable does not verify. We have to
|
70
|
-
# build this fixture programmatically as there's no way to add a file
|
71
|
-
# without read permissions into git.
|
72
|
-
def test_verify_unreadable_mimetype
|
73
|
-
Dir.mktmpdir do |dir|
|
74
|
-
container = File.join(dir, "unreadable.container")
|
75
|
-
Dir.mkdir(container)
|
76
|
-
mime_path = File.join(container, ZipContainer::Container::MIMETYPE_FILE)
|
77
|
-
File.open(mime_path, "w") { |file| file.write "MIMETYPE" }
|
78
|
-
File.chmod(0000, mime_path)
|
79
|
-
|
80
|
-
refute File.readable?(mime_path)
|
81
|
-
assert_raise(ZipContainer::MalformedContainerError) do
|
82
|
-
ZipContainer::Dir.verify!(container)
|
83
|
-
end
|
84
|
-
|
85
|
-
refute(ZipContainer::Dir.verify(container).empty?)
|
86
|
-
refute(ZipContainer::Dir.verify?(container))
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
data/test/tc_read_file.rb
DELETED
@@ -1,118 +0,0 @@
|
|
1
|
-
# Copyright (c) 2013, 2014 The University of Manchester, UK.
|
2
|
-
#
|
3
|
-
# All rights reserved.
|
4
|
-
#
|
5
|
-
# Redistribution and use in source and binary forms, with or without
|
6
|
-
# modification, are permitted provided that the following conditions are met:
|
7
|
-
#
|
8
|
-
# * Redistributions of source code must retain the above copyright notice,
|
9
|
-
# this list of conditions and the following disclaimer.
|
10
|
-
#
|
11
|
-
# * Redistributions in binary form must reproduce the above copyright notice,
|
12
|
-
# this list of conditions and the following disclaimer in the documentation
|
13
|
-
# and/or other materials provided with the distribution.
|
14
|
-
#
|
15
|
-
# * Neither the names of The University of Manchester nor the names of its
|
16
|
-
# contributors may be used to endorse or promote products derived from this
|
17
|
-
# software without specific prior written permission.
|
18
|
-
#
|
19
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
20
|
-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
-
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
23
|
-
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
24
|
-
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
25
|
-
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
26
|
-
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
27
|
-
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
-
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
29
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
30
|
-
#
|
31
|
-
# Author: Robert Haines
|
32
|
-
|
33
|
-
require 'test/unit'
|
34
|
-
require 'zip-container'
|
35
|
-
|
36
|
-
class TestReadFile < Test::Unit::TestCase
|
37
|
-
|
38
|
-
# Check that the null file does not verify.
|
39
|
-
def test_verify_null_file
|
40
|
-
assert_raise(ZipContainer::ZipError) do
|
41
|
-
ZipContainer::File.verify($file_null)
|
42
|
-
end
|
43
|
-
|
44
|
-
assert_raise(ZipContainer::ZipError) do
|
45
|
-
ZipContainer::File.verify!($file_null)
|
46
|
-
end
|
47
|
-
|
48
|
-
assert_raise(ZipContainer::ZipError) do
|
49
|
-
ZipContainer::File.verify?($file_null)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
# Check that the empty container file does verify.
|
54
|
-
def test_verify_empty_container
|
55
|
-
assert_nothing_raised(ZipContainer::MalformedContainerError, ZipContainer::ZipError) do
|
56
|
-
ZipContainer::File.verify!($empty)
|
57
|
-
end
|
58
|
-
|
59
|
-
assert(ZipContainer::File.verify($empty).empty?)
|
60
|
-
assert(ZipContainer::File.verify?($empty))
|
61
|
-
end
|
62
|
-
|
63
|
-
# Check that the empty zip file does not verify.
|
64
|
-
def test_verify_empty_zip
|
65
|
-
assert_raise(ZipContainer::MalformedContainerError) do
|
66
|
-
ZipContainer::File.verify!($empty_zip)
|
67
|
-
end
|
68
|
-
|
69
|
-
refute(ZipContainer::File.verify($empty_zip).empty?)
|
70
|
-
refute(ZipContainer::File.verify?($empty_zip))
|
71
|
-
end
|
72
|
-
|
73
|
-
# Check that a compressed mimetype file is detected.
|
74
|
-
def test_verify_compressed_mimetype
|
75
|
-
assert_raise(ZipContainer::MalformedContainerError) do
|
76
|
-
ZipContainer::File.verify!($compressed_mimetype)
|
77
|
-
end
|
78
|
-
|
79
|
-
refute(ZipContainer::File.verify($compressed_mimetype).empty?)
|
80
|
-
refute(ZipContainer::File.verify?($compressed_mimetype))
|
81
|
-
end
|
82
|
-
|
83
|
-
# Check the raw mimetype bytes
|
84
|
-
def test_raw_mimetypes
|
85
|
-
empty_container = File.read($empty)
|
86
|
-
assert_equal("application/epub+zip", empty_container[38..57])
|
87
|
-
|
88
|
-
compressed_mimetype = File.read($compressed_mimetype)
|
89
|
-
assert_not_equal("application/epub+zip", compressed_mimetype[38..57])
|
90
|
-
end
|
91
|
-
|
92
|
-
# Check reading files out of a container file and make sure we don't change
|
93
|
-
# it.
|
94
|
-
def test_read_files_from_container
|
95
|
-
assert_nothing_raised(ZipContainer::MalformedContainerError, ZipContainer::ZipError) do
|
96
|
-
ZipContainer::File.open($example) do |c|
|
97
|
-
assert(c.on_disk?)
|
98
|
-
refute(c.in_memory?)
|
99
|
-
|
100
|
-
assert(c.file.exists?("greeting.txt"))
|
101
|
-
|
102
|
-
greeting = c.file.read("greeting.txt")
|
103
|
-
assert_equal("Hello, World!\n", greeting)
|
104
|
-
|
105
|
-
assert(c.file.exists?("dir"))
|
106
|
-
assert(c.file.directory?("dir"))
|
107
|
-
|
108
|
-
assert(c.file.exists?("dir/code.rb"))
|
109
|
-
|
110
|
-
assert_equal("This is an example Container file!", c.comment)
|
111
|
-
|
112
|
-
refute(c.commit_required?)
|
113
|
-
refute(c.commit)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
end
|
data/test/tc_reserved_names.rb
DELETED
@@ -1,334 +0,0 @@
|
|
1
|
-
# Copyright (c) 2013 The University of Manchester, UK.
|
2
|
-
#
|
3
|
-
# All rights reserved.
|
4
|
-
#
|
5
|
-
# Redistribution and use in source and binary forms, with or without
|
6
|
-
# modification, are permitted provided that the following conditions are met:
|
7
|
-
#
|
8
|
-
# * Redistributions of source code must retain the above copyright notice,
|
9
|
-
# this list of conditions and the following disclaimer.
|
10
|
-
#
|
11
|
-
# * Redistributions in binary form must reproduce the above copyright notice,
|
12
|
-
# this list of conditions and the following disclaimer in the documentation
|
13
|
-
# and/or other materials provided with the distribution.
|
14
|
-
#
|
15
|
-
# * Neither the names of The University of Manchester nor the names of its
|
16
|
-
# contributors may be used to endorse or promote products derived from this
|
17
|
-
# software without specific prior written permission.
|
18
|
-
#
|
19
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
20
|
-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
-
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
23
|
-
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
24
|
-
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
25
|
-
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
26
|
-
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
27
|
-
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
-
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
29
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
30
|
-
#
|
31
|
-
# Author: Robert Haines
|
32
|
-
|
33
|
-
require 'test/unit'
|
34
|
-
require 'zip-container'
|
35
|
-
|
36
|
-
# A class to test the overriding of reserved and managed names.
|
37
|
-
class NewZipContainer < ZipContainer::File
|
38
|
-
|
39
|
-
private_class_method :new
|
40
|
-
|
41
|
-
def initialize(filename)
|
42
|
-
super(filename)
|
43
|
-
register_managed_entry(ZipContainer::ManagedDirectory.new("src"))
|
44
|
-
register_managed_entry(ZipContainer::ManagedDirectory.new("test"))
|
45
|
-
register_managed_entry(ZipContainer::ManagedDirectory.new("lib"))
|
46
|
-
register_managed_entry(ZipContainer::ManagedFile.new("index.html"))
|
47
|
-
register_managed_entry(ZipContainer::ManagedFile.new("greeting.txt"))
|
48
|
-
|
49
|
-
register_reserved_name("META-INF")
|
50
|
-
register_reserved_name("reserved_dir")
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
class TestReservedNames < Test::Unit::TestCase
|
56
|
-
|
57
|
-
# Check that the reserved names verify correctly.
|
58
|
-
def test_verify_reserved_name
|
59
|
-
assert(NewZipContainer.verify?($example))
|
60
|
-
|
61
|
-
assert_nothing_raised(ZipContainer::MalformedContainerError) do
|
62
|
-
NewZipContainer.verify!($example)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
# Check the reserved names stuff all works correctly, baring in mind that
|
67
|
-
# such comparisons for ZipContainer file should be case sensitive.
|
68
|
-
def test_reserved_names
|
69
|
-
ZipContainer::File.open($example) do |c|
|
70
|
-
assert_equal(1, c.reserved_names.length)
|
71
|
-
assert_equal(["mimetype"], c.reserved_names)
|
72
|
-
|
73
|
-
assert_equal(0, c.managed_files.length)
|
74
|
-
assert_equal([], c.managed_file_names)
|
75
|
-
assert(c.reserved_entry?("mimetype"))
|
76
|
-
assert(c.reserved_entry?("mimetype/"))
|
77
|
-
assert(c.reserved_entry?("MimeType"))
|
78
|
-
|
79
|
-
assert_equal(0, c.managed_directories.length)
|
80
|
-
assert_equal([], c.managed_directory_names)
|
81
|
-
refute(c.reserved_entry?("META-INF"))
|
82
|
-
|
83
|
-
assert_equal(0, c.managed_entries.length)
|
84
|
-
assert_equal([], c.managed_entry_names)
|
85
|
-
refute(c.managed_entry?("This_should_fail"))
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
# Check that overriding the reserved names in a sub-class works correctly
|
90
|
-
def test_subclass_reserved_names
|
91
|
-
NewZipContainer.open($example) do |c|
|
92
|
-
assert_equal(3, c.reserved_names.length)
|
93
|
-
assert_equal(["mimetype", "META-INF", "reserved_dir"],
|
94
|
-
c.reserved_names)
|
95
|
-
|
96
|
-
assert_equal(2, c.managed_files.length)
|
97
|
-
assert_equal(["index.html", "greeting.txt"], c.managed_file_names)
|
98
|
-
assert(c.reserved_entry?("mimetype"))
|
99
|
-
assert(c.reserved_entry?("mimetype/"))
|
100
|
-
assert(c.reserved_entry?("MimeType"))
|
101
|
-
assert(c.managed_entry?("index.html"))
|
102
|
-
assert(c.managed_entry?("Index.HTML"))
|
103
|
-
refute(c.reserved_entry?("index.html"))
|
104
|
-
|
105
|
-
assert_equal(3, c.managed_directories.length)
|
106
|
-
assert_equal(["src", "test", "lib"], c.managed_directory_names)
|
107
|
-
assert(c.managed_entry?("src"))
|
108
|
-
assert(c.managed_entry?("SRC"))
|
109
|
-
assert(c.managed_entry?("test"))
|
110
|
-
assert(c.managed_entry?("lib"))
|
111
|
-
assert(c.managed_entry?("lIb/"))
|
112
|
-
refute(c.managed_entry?("META-INF"))
|
113
|
-
assert(c.reserved_entry?("META-INF"))
|
114
|
-
refute(c.reserved_entry?("src"))
|
115
|
-
refute(c.reserved_entry?("test"))
|
116
|
-
refute(c.reserved_entry?("lib"))
|
117
|
-
|
118
|
-
assert_equal(5, c.managed_entries.length)
|
119
|
-
assert_equal(["index.html", "greeting.txt", "src", "test", "lib"],
|
120
|
-
c.managed_entry_names)
|
121
|
-
|
122
|
-
refute(c.managed_entry?("This_should_fail"))
|
123
|
-
refute(c.reserved_entry?("META_INF"))
|
124
|
-
refute(c.reserved_entry?("META_INF/"))
|
125
|
-
refute(c.managed_entry?("index.htm"))
|
126
|
-
refute(c.reserved_entry?("index.html"))
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
# Check that nothing happens when trying to delete the mimetype file.
|
131
|
-
def test_delete_mimetype
|
132
|
-
ZipContainer::File.open($example) do |c|
|
133
|
-
assert(c.file.exists?("mimetype"))
|
134
|
-
assert_nil(c.remove("mimetype"))
|
135
|
-
assert(c.file.exists?("mimetype"))
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
# Check that nothing happens when trying to rename the mimetype file.
|
140
|
-
def test_rename_mimetype
|
141
|
-
ZipContainer::File.open($example) do |c|
|
142
|
-
assert(c.file.exists?("mimetype"))
|
143
|
-
assert_nil(c.rename("mimetype", "something-else"))
|
144
|
-
assert(c.file.exists?("mimetype"))
|
145
|
-
refute(c.file.exists?("something-else"))
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
# Check that nothing happens when trying to replace the contents of the
|
150
|
-
# mimetype file.
|
151
|
-
def test_replace_mimetype
|
152
|
-
ZipContainer::File.open($example) do |c|
|
153
|
-
assert(c.file.exists?("mimetype"))
|
154
|
-
assert_nil(c.replace("mimetype", $zip_empty))
|
155
|
-
assert_equal("application/epub+zip", c.file.read("mimetype"))
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
# Check that an exception is raised when trying to add file with a reserved
|
160
|
-
# name.
|
161
|
-
def test_add_reserved
|
162
|
-
ZipContainer::File.open($empty) do |c|
|
163
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
164
|
-
c.add("mimetype", $zip_empty)
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
# Check that an exception is raised when trying to add file with a reserved
|
170
|
-
# name to a subclassed container.
|
171
|
-
def test_subclass_add_reserved
|
172
|
-
NewZipContainer.open($empty) do |c|
|
173
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
174
|
-
c.add("mimetype", $zip_empty)
|
175
|
-
end
|
176
|
-
|
177
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
178
|
-
c.add("reserved_dir", $zip_empty)
|
179
|
-
end
|
180
|
-
|
181
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
182
|
-
c.add("MimeType", $zip_empty)
|
183
|
-
end
|
184
|
-
|
185
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
186
|
-
c.add("Reserved_Dir", $zip_empty)
|
187
|
-
end
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
# Check that the META-INF directory is detected as non-existent when trying
|
192
|
-
# to delete it.
|
193
|
-
def test_delete_metainf
|
194
|
-
ZipContainer::File.open($example) do |c|
|
195
|
-
assert_raises(Errno::ENOENT) do
|
196
|
-
c.remove("META-INF")
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
# Check that the META-INF directory is detected as non-existent when trying
|
202
|
-
# to rename it.
|
203
|
-
def test_rename_metainf
|
204
|
-
ZipContainer::File.open($example) do |c|
|
205
|
-
assert_raises(Errno::ENOENT) do
|
206
|
-
c.rename("META-INF", "something-else")
|
207
|
-
end
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
# Check that an exception is raised when trying to create a directory with a
|
212
|
-
# reserved name.
|
213
|
-
def test_mkdir_reserved
|
214
|
-
ZipContainer::File.open($empty) do |c|
|
215
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
216
|
-
c.mkdir("mimetype")
|
217
|
-
end
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
# Check that an exception is raised when trying to create a directory with a
|
222
|
-
# reserved name in a subclassed container.
|
223
|
-
def test_subclass_mkdir_reserved
|
224
|
-
NewZipContainer.open($empty) do |c|
|
225
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
226
|
-
c.mkdir("mimetype")
|
227
|
-
end
|
228
|
-
|
229
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
230
|
-
c.mkdir("index.html")
|
231
|
-
end
|
232
|
-
|
233
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
234
|
-
c.mkdir("reserved_dir")
|
235
|
-
end
|
236
|
-
|
237
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
238
|
-
c.mkdir("Reserved_Dir")
|
239
|
-
end
|
240
|
-
|
241
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
242
|
-
c.mkdir("META-INF")
|
243
|
-
end
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
# Check that a file cannot be renamed to one of the reserved names.
|
248
|
-
def test_rename_to_reserved
|
249
|
-
ZipContainer::File.open($example) do |c|
|
250
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
251
|
-
c.rename("dir/code.rb", "mimetype")
|
252
|
-
end
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
# Check that a file cannot be renamed to one of the reserved names in a
|
257
|
-
# subclassed container.
|
258
|
-
def test_subclass_rename_to_reserved
|
259
|
-
NewZipContainer.open($example) do |c|
|
260
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
261
|
-
c.rename("dir/code.rb", "mimetype")
|
262
|
-
end
|
263
|
-
|
264
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
265
|
-
c.rename("dir", "reserved_dir")
|
266
|
-
end
|
267
|
-
end
|
268
|
-
end
|
269
|
-
|
270
|
-
# Check that the ruby-like File and Dir classes respect reserved and managed
|
271
|
-
# names.
|
272
|
-
def test_file_dir_ops_reserved
|
273
|
-
ZipContainer::File.open($empty) do |c|
|
274
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
275
|
-
c.file.open("mimetype", "w") do |f|
|
276
|
-
f.puts "TESTING"
|
277
|
-
end
|
278
|
-
end
|
279
|
-
|
280
|
-
assert_nothing_raised(ZipContainer::ReservedNameClashError) do
|
281
|
-
c.file.open("mimetype") do |f|
|
282
|
-
assert_equal("application/epub+zip", f.read)
|
283
|
-
end
|
284
|
-
end
|
285
|
-
|
286
|
-
assert_nothing_raised(ZipContainer::ReservedNameClashError) do
|
287
|
-
c.file.delete("mimetype")
|
288
|
-
assert(c.file.exists?("mimetype"))
|
289
|
-
end
|
290
|
-
end
|
291
|
-
end
|
292
|
-
|
293
|
-
# Check that the ruby-like File and Dir classes respect reserved names in a
|
294
|
-
# subclassed container.
|
295
|
-
def test_subclass_file_dir_ops_reserved
|
296
|
-
NewZipContainer.open($empty) do |c|
|
297
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
298
|
-
c.file.open("META-INF", "w") do |f|
|
299
|
-
f.puts "TESTING"
|
300
|
-
end
|
301
|
-
end
|
302
|
-
|
303
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
304
|
-
c.file.open("TEST", "w") do |f|
|
305
|
-
f.puts "TESTING"
|
306
|
-
end
|
307
|
-
end
|
308
|
-
|
309
|
-
assert_nothing_raised(ZipContainer::ReservedNameClashError) do
|
310
|
-
c.file.open("mimetype") do |f|
|
311
|
-
assert_equal("application/epub+zip", f.read)
|
312
|
-
end
|
313
|
-
end
|
314
|
-
|
315
|
-
assert_nothing_raised(ZipContainer::ReservedNameClashError) do
|
316
|
-
c.file.delete("mimetype")
|
317
|
-
assert(c.file.exists?("mimetype"))
|
318
|
-
end
|
319
|
-
|
320
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
321
|
-
c.dir.mkdir("index.html")
|
322
|
-
end
|
323
|
-
|
324
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
325
|
-
c.dir.mkdir("reserved_dir")
|
326
|
-
end
|
327
|
-
|
328
|
-
assert_raises(ZipContainer::ReservedNameClashError) do
|
329
|
-
c.dir.mkdir("Reserved_Dir")
|
330
|
-
end
|
331
|
-
end
|
332
|
-
end
|
333
|
-
|
334
|
-
end
|