mime-types 1.25.1 → 2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.autotest +5 -0
- data/.minitest.rb +2 -0
- data/.travis.yml +0 -4
- data/Contributing.rdoc +13 -14
- data/Gemfile +1 -0
- data/History.rdoc +100 -7
- data/Licence.rdoc +1 -1
- data/Manifest.txt +17 -24
- data/README.rdoc +26 -47
- data/Rakefile +42 -185
- data/data/mime-types.json +1 -0
- data/docs/COPYING.txt +339 -339
- data/docs/artistic.txt +127 -127
- data/lib/mime.rb +50 -0
- data/lib/mime/type.rb +634 -0
- data/lib/mime/types.rb +254 -912
- data/lib/mime/types/cache.rb +73 -0
- data/lib/mime/types/loader.rb +248 -0
- data/lib/mime/types/loader_path.rb +16 -0
- data/support/benchmarker.rb +55 -0
- data/support/convert.rb +130 -0
- data/support/iana_downloader.rb +201 -0
- data/test/fixture/json.json +1 -0
- data/test/fixture/old-data +9 -0
- data/test/fixture/yaml.yaml +75 -0
- data/test/minitest_helper.rb +22 -0
- data/test/test_mime_type.rb +337 -143
- data/test/test_mime_types.rb +75 -84
- data/test/test_mime_types_cache.rb +30 -29
- data/test/test_mime_types_class.rb +135 -0
- data/test/test_mime_types_lazy.rb +3 -2
- data/test/test_mime_types_loader.rb +42 -0
- metadata +61 -90
- metadata.gz.sig +0 -0
- data/lib/mime/types/application +0 -1010
- data/lib/mime/types/application.mac +0 -3
- data/lib/mime/types/application.nonstandard +0 -132
- data/lib/mime/types/application.obsolete +0 -41
- data/lib/mime/types/audio +0 -138
- data/lib/mime/types/audio.nonstandard +0 -11
- data/lib/mime/types/audio.obsolete +0 -1
- data/lib/mime/types/image +0 -46
- data/lib/mime/types/image.nonstandard +0 -20
- data/lib/mime/types/image.obsolete +0 -5
- data/lib/mime/types/message +0 -18
- data/lib/mime/types/message.obsolete +0 -2
- data/lib/mime/types/model +0 -15
- data/lib/mime/types/multipart +0 -14
- data/lib/mime/types/multipart.nonstandard +0 -1
- data/lib/mime/types/multipart.obsolete +0 -7
- data/lib/mime/types/other.nonstandard +0 -8
- data/lib/mime/types/text +0 -61
- data/lib/mime/types/text.nonstandard +0 -7
- data/lib/mime/types/text.obsolete +0 -8
- data/lib/mime/types/text.vms +0 -1
- data/lib/mime/types/video +0 -75
- data/lib/mime/types/video.nonstandard +0 -16
- data/lib/mime/types/video.obsolete +0 -3
@@ -0,0 +1,201 @@
|
|
1
|
+
# -*- ruby encoding: utf-8 -*-
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
4
|
+
|
5
|
+
require 'open-uri'
|
6
|
+
require 'nokogiri'
|
7
|
+
require 'cgi'
|
8
|
+
require 'fileutils'
|
9
|
+
require 'yaml'
|
10
|
+
|
11
|
+
ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = 'yes'
|
12
|
+
require 'mime/types'
|
13
|
+
|
14
|
+
class IANADownloader
|
15
|
+
INDEX_URL = %q(https://www.iana.org/assignments/media-types/)
|
16
|
+
MIME_HREF = %r{/assignments/media-types/(.+)/?$}
|
17
|
+
|
18
|
+
def self.download_to(destination)
|
19
|
+
new(destination).download_all
|
20
|
+
end
|
21
|
+
|
22
|
+
attr_reader :destination
|
23
|
+
|
24
|
+
def initialize(destination = nil)
|
25
|
+
@destination =
|
26
|
+
File.expand_path(destination ||
|
27
|
+
File.expand_path('../../type-lists', __FILE__))
|
28
|
+
end
|
29
|
+
|
30
|
+
def download_all
|
31
|
+
puts "Downloading index of MIME types from #{INDEX_URL}."
|
32
|
+
index = Nokogiri::HTML(open(INDEX_URL) { |f| f.read })
|
33
|
+
index.xpath('//a').each do |tag|
|
34
|
+
next unless tag['href']
|
35
|
+
href_match = MIME_HREF.match(tag['href'])
|
36
|
+
next unless href_match
|
37
|
+
href = href_match.captures.first
|
38
|
+
next if tag.content == 'example'
|
39
|
+
download_one(href, tag.content, href)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def download_one(url, name = url, type = nil)
|
44
|
+
if url =~ %r{^https?://}
|
45
|
+
name = File.basename(url) if name == url
|
46
|
+
else
|
47
|
+
url = File.join(INDEX_URL, url)
|
48
|
+
end
|
49
|
+
|
50
|
+
Parser.download(name, from: url, to: @destination, type: type)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class IANADownloader::Parser
|
55
|
+
def self.download(name, options = {})
|
56
|
+
new(name, options) do |parser|
|
57
|
+
parser.parse(parser.download)
|
58
|
+
parser.save
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def initialize(name, options = {})
|
63
|
+
raise ArgumentError, ":from not specified" unless options[:from]
|
64
|
+
raise ArgumentError, ":to not specified" unless options[:to]
|
65
|
+
|
66
|
+
@name = "#{File.basename(name, '.yml')}.yml"
|
67
|
+
@from = options[:from]
|
68
|
+
@to = File.expand_path(options[:to])
|
69
|
+
@type = File.basename(options[:type] || name, '.yml')
|
70
|
+
@file = File.join(@to, @name)
|
71
|
+
@types = load_mime_types || MIME::Types.new
|
72
|
+
|
73
|
+
yield self if block_given?
|
74
|
+
end
|
75
|
+
|
76
|
+
def download
|
77
|
+
puts "Downloading #{@name} from #{@from}"
|
78
|
+
Nokogiri::HTML(open(@from) { |f| f.read })
|
79
|
+
end
|
80
|
+
|
81
|
+
def parse(html)
|
82
|
+
nodes = html.xpath('//table//table//tr')
|
83
|
+
|
84
|
+
# How many <td> children does the first node have?
|
85
|
+
node_count = child_elems(nodes.first).size
|
86
|
+
|
87
|
+
if node_count == 1
|
88
|
+
# The title node doesn't have what we expect. Let's try it based on
|
89
|
+
# the first real node.
|
90
|
+
node_count = child_elems(nodes.first.next).size
|
91
|
+
end
|
92
|
+
|
93
|
+
nodes.each do |node|
|
94
|
+
next if node == nodes.first
|
95
|
+
|
96
|
+
elems = child_elems(node)
|
97
|
+
next if elems.size.zero?
|
98
|
+
|
99
|
+
if elems.size != node_count
|
100
|
+
warn "size mismatch (#{elems.size} != #{node_count}) in node: #{node}"
|
101
|
+
next
|
102
|
+
end
|
103
|
+
|
104
|
+
sub_ix, ref_ix = case elems.size
|
105
|
+
when 3
|
106
|
+
[ 1, 2 ]
|
107
|
+
when 4
|
108
|
+
[ 1, 3 ]
|
109
|
+
else
|
110
|
+
warn "size error (#{elems.size} != {3,4}) in node: #{node}"
|
111
|
+
raise
|
112
|
+
end
|
113
|
+
subtype = elems[sub_ix].content.chomp.strip
|
114
|
+
refs = child_elems(elems[ref_ix]).map { |ref|
|
115
|
+
ref = ref.xpath('a') unless ref.name == 'a'
|
116
|
+
[ ref ].flatten.map { |r| href_to_ref(r) }
|
117
|
+
|
118
|
+
}.flatten
|
119
|
+
|
120
|
+
content_type = [ @type, subtype].join('/')
|
121
|
+
use_instead = nil
|
122
|
+
obsolete = false
|
123
|
+
|
124
|
+
if content_type =~ OBSOLETE
|
125
|
+
content_type = $1
|
126
|
+
obsolete = true
|
127
|
+
elsif content_type =~ DEPRECATED
|
128
|
+
content_type = $1
|
129
|
+
use_instead = [ $2 ]
|
130
|
+
obsolete = true
|
131
|
+
end
|
132
|
+
|
133
|
+
types = @types.select { |t|
|
134
|
+
(t.content_type == content_type)
|
135
|
+
}
|
136
|
+
|
137
|
+
if types.empty?
|
138
|
+
MIME::Type.new(content_type) do |mt|
|
139
|
+
mt.references = %w(IANA) + refs
|
140
|
+
mt.registered = true
|
141
|
+
mt.obsolete = obsolete if obsolete
|
142
|
+
mt.use_instead = use_instead if use_instead
|
143
|
+
@types << mt
|
144
|
+
end
|
145
|
+
else
|
146
|
+
types.each { |mt|
|
147
|
+
mt.references = %w(IANA) + refs
|
148
|
+
mt.registered = true
|
149
|
+
mt.obsolete = obsolete if obsolete
|
150
|
+
mt.use_instead = use_instead if use_instead
|
151
|
+
}
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
def save
|
157
|
+
FileUtils.mkdir_p(@to)
|
158
|
+
File.open(@file, 'wb') { |f|
|
159
|
+
f.puts @types.map.to_a.sort.to_yaml
|
160
|
+
}
|
161
|
+
end
|
162
|
+
|
163
|
+
private
|
164
|
+
def child_elems(node)
|
165
|
+
node.children.select { |n| n.elem? }
|
166
|
+
end
|
167
|
+
|
168
|
+
def load_mime_types
|
169
|
+
if File.exist?(@file)
|
170
|
+
MIME::Types::Loader.load_from_yaml(@file)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def href_to_ref(ref)
|
175
|
+
case ref['href']
|
176
|
+
when CONTACT_PEOPLE
|
177
|
+
tag = CGI::unescape($1).chomp.strip
|
178
|
+
if tag == ref.content
|
179
|
+
"[#{ref.content}]"
|
180
|
+
else
|
181
|
+
"[#{ref.content}=#{tag}]"
|
182
|
+
end
|
183
|
+
when RFC_EDITOR, IETF_RFC, IETF_RFC_TOOLS
|
184
|
+
"RFC#$1"
|
185
|
+
when RFC_BAD_EDITOR
|
186
|
+
ref.content
|
187
|
+
when %r{(https?://.*)}
|
188
|
+
"{#{ref.content}=#$1}"
|
189
|
+
else
|
190
|
+
ref
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
CONTACT_PEOPLE = %r{https?://www.iana.org/assignments/contact-people.html?l?#(.*)}
|
195
|
+
RFC_EDITOR = %r{https?://www.rfc-editor.org/rfc/rfc(\d+).txt}
|
196
|
+
RFC_BAD_EDITOR = %r{https?://www.rfc-editor.org/rfc/rfcxxxx.txt}
|
197
|
+
IETF_RFC = %r{https?://www.ietf.org/rfc/rfc(\d+).txt}
|
198
|
+
IETF_RFC_TOOLS = %r{https?://tools.ietf.org/html/rfc(\d+)}
|
199
|
+
OBSOLETE = %r{(.+)\s+\((?:obsolete|deprecated)\)}i
|
200
|
+
DEPRECATED = %r{(.+)\s+-\s+DEPRECATED\s+-\s+Please\s+use\s+(.+)}
|
201
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"content-type":"application/smil","encoding":"8bit","extensions":["smi","smil"],"obsolete":true,"use-instead":["application/smil+xml"],"references":["IANA","RFC4536"],"registered":true},{"content-type":"audio/vnd.qcelp","encoding":"base64","extensions":["qcp"],"obsolete":true,"use-instead":["audio/QCELP"],"references":["IANA","RFC3625"],"registered":true},{"content-type":"image/bmp","encoding":"base64","extensions":["bmp"],"obsolete":true,"use-instead":["image/x-bmp"],"registered":false},{"content-type":"application/acad","encoding":"base64","references":["LTSW"],"registered":false},{"content-type":"audio/webm","encoding":"base64","extensions":["webm"],"references":["{WebM=http://www.webmproject.org/code/specs/container/}"],"registered":false},{"content-type":"image/pjpeg","docs":"Fixes a bug with IE6 and progressive JPEGs","encoding":"base64","registered":false},{"content-type":"application/1d-interleaved-parityfec","encoding":"base64","references":["IANA","RFC6015"],"registered":true},{"content-type":"audio/1d-interleaved-parityfec","encoding":"base64","references":["IANA","RFC6015"],"registered":true},{"content-type":"application/x-apple-diskimage","encoding":"base64","extensions":["dmg"],"registered":false,"system":"mac"}]
|
@@ -0,0 +1,9 @@
|
|
1
|
+
!application/smil @smi,smil :8bit 'IANA,RFC4536 =use-instead:application/smil+xml
|
2
|
+
!audio/vnd.qcelp @qcp 'IANA,RFC3625 =use-instead:audio/QCELP
|
3
|
+
*!image/bmp @bmp =use-instead:image/x-bmp
|
4
|
+
*application/acad 'LTSW
|
5
|
+
*audio/webm @webm '{WebM=http://www.webmproject.org/code/specs/container/}
|
6
|
+
*image/pjpeg :base64 =Fixes a bug with IE6 and progressive JPEGs
|
7
|
+
application/1d-interleaved-parityfec 'IANA,RFC6015
|
8
|
+
audio/1d-interleaved-parityfec 'IANA,RFC6015
|
9
|
+
mac:application/x-apple-diskimage @dmg
|
@@ -0,0 +1,75 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/object:MIME::Type
|
3
|
+
content-type: application/smil
|
4
|
+
encoding: 8bit
|
5
|
+
extensions:
|
6
|
+
- smi
|
7
|
+
- smil
|
8
|
+
obsolete: true
|
9
|
+
use-instead:
|
10
|
+
- application/smil+xml
|
11
|
+
references:
|
12
|
+
- IANA
|
13
|
+
- RFC4536
|
14
|
+
registered: true
|
15
|
+
- !ruby/object:MIME::Type
|
16
|
+
content-type: audio/vnd.qcelp
|
17
|
+
encoding: base64
|
18
|
+
extensions:
|
19
|
+
- qcp
|
20
|
+
obsolete: true
|
21
|
+
use-instead:
|
22
|
+
- audio/QCELP
|
23
|
+
references:
|
24
|
+
- IANA
|
25
|
+
- RFC3625
|
26
|
+
registered: true
|
27
|
+
- !ruby/object:MIME::Type
|
28
|
+
content-type: image/bmp
|
29
|
+
encoding: base64
|
30
|
+
extensions:
|
31
|
+
- bmp
|
32
|
+
obsolete: true
|
33
|
+
use-instead:
|
34
|
+
- image/x-bmp
|
35
|
+
registered: false
|
36
|
+
- !ruby/object:MIME::Type
|
37
|
+
content-type: application/acad
|
38
|
+
encoding: base64
|
39
|
+
references:
|
40
|
+
- LTSW
|
41
|
+
registered: false
|
42
|
+
- !ruby/object:MIME::Type
|
43
|
+
content-type: audio/webm
|
44
|
+
encoding: base64
|
45
|
+
extensions:
|
46
|
+
- webm
|
47
|
+
references:
|
48
|
+
- ! '{WebM=http://www.webmproject.org/code/specs/container/}'
|
49
|
+
registered: false
|
50
|
+
- !ruby/object:MIME::Type
|
51
|
+
content-type: image/pjpeg
|
52
|
+
docs: Fixes a bug with IE6 and progressive JPEGs
|
53
|
+
encoding: base64
|
54
|
+
registered: false
|
55
|
+
- !ruby/object:MIME::Type
|
56
|
+
content-type: application/1d-interleaved-parityfec
|
57
|
+
encoding: base64
|
58
|
+
references:
|
59
|
+
- IANA
|
60
|
+
- RFC6015
|
61
|
+
registered: true
|
62
|
+
- !ruby/object:MIME::Type
|
63
|
+
content-type: audio/1d-interleaved-parityfec
|
64
|
+
encoding: base64
|
65
|
+
references:
|
66
|
+
- IANA
|
67
|
+
- RFC6015
|
68
|
+
registered: true
|
69
|
+
- !ruby/object:MIME::Type
|
70
|
+
content-type: application/x-apple-diskimage
|
71
|
+
encoding: base64
|
72
|
+
extensions:
|
73
|
+
- dmg
|
74
|
+
registered: false
|
75
|
+
system: !ruby/regexp /mac/
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- ruby encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'mime/type'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
gem 'minitest'
|
7
|
+
require 'minitest/autorun'
|
8
|
+
|
9
|
+
module MIME
|
10
|
+
@__deprecated = Hash.new { |h, k| h[k] = true }
|
11
|
+
|
12
|
+
class << self
|
13
|
+
attr_reader :__deprecated
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def assert_deprecated(name, message = "and will be removed")
|
18
|
+
MIME.__deprecated[name] = false
|
19
|
+
assert_output(nil, /#{Regexp.escape(name)} is deprecated #{Regexp.escape(message)}./) { yield }
|
20
|
+
ensure
|
21
|
+
MIME.__deprecated[name] = true
|
22
|
+
end
|
data/test/test_mime_type.rb
CHANGED
@@ -1,46 +1,77 @@
|
|
1
1
|
# -*- ruby encoding: utf-8 -*-
|
2
2
|
|
3
3
|
require 'mime/types'
|
4
|
+
require 'minitest_helper'
|
4
5
|
|
5
6
|
class TestMIMEType < Minitest::Test
|
6
|
-
def
|
7
|
-
MIME::Type.
|
7
|
+
def make(content_type)
|
8
|
+
MIME::Type.new(content_type) { |mt| yield mt if block_given? }
|
9
|
+
end
|
10
|
+
|
11
|
+
def make_yaml_mime_type
|
12
|
+
make('text/x-yaml') do |yaml|
|
13
|
+
yaml.extensions = %w(yaml yml)
|
14
|
+
yaml.encoding = '8bit'
|
15
|
+
yaml.system = 'd9d172f608'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def make_yaml_mime_type_with_docs
|
20
|
+
make('text/x-yaml') do |yaml|
|
21
|
+
yaml.extensions = %w(yaml yml)
|
22
|
+
yaml.encoding = '8bit'
|
23
|
+
yaml.system = 'd9d172f608'
|
24
|
+
yaml.docs = 'Test YAML'
|
25
|
+
end
|
8
26
|
end
|
9
27
|
|
10
28
|
def setup
|
11
|
-
@
|
29
|
+
@applzip = MIME::Type.new('x-appl/x-zip') { |t|
|
30
|
+
t.extensions = ['zip', 'zp']
|
31
|
+
}
|
12
32
|
end
|
13
33
|
|
14
34
|
def test_class_from_array
|
15
|
-
yaml =
|
35
|
+
yaml = nil
|
36
|
+
assert_deprecated("MIME::Type.from_array") do
|
37
|
+
yaml = MIME::Type.from_array('text/x-yaml', %w(yaml yml), '8bit',
|
38
|
+
'd9d172f608')
|
39
|
+
end
|
16
40
|
assert_instance_of(MIME::Type, yaml)
|
17
41
|
assert_equal('text/yaml', yaml.simplified)
|
42
|
+
assert_raises(ArgumentError) { MIME::Type.from_array }
|
18
43
|
end
|
19
44
|
|
20
45
|
def test_class_from_hash
|
21
|
-
yaml =
|
22
|
-
|
23
|
-
|
24
|
-
|
46
|
+
yaml = nil
|
47
|
+
assert_deprecated("MIME::Type.from_hash") do
|
48
|
+
yaml = MIME::Type.from_hash('Content-Type' => 'text/x-yaml',
|
49
|
+
'Content-Transfer-Encoding' => '8bit',
|
50
|
+
'System' => 'd9d172f608',
|
51
|
+
'Extensions' => %w(yaml yml))
|
52
|
+
end
|
25
53
|
assert_instance_of(MIME::Type, yaml)
|
26
54
|
assert_equal('text/yaml', yaml.simplified)
|
27
55
|
end
|
28
56
|
|
29
57
|
def test_class_from_mime_type
|
30
|
-
zip2 =
|
31
|
-
|
32
|
-
|
33
|
-
|
58
|
+
zip2 = nil
|
59
|
+
assert_deprecated("MIME::Type.from_mime_type") do
|
60
|
+
zip2 = MIME::Type.from_mime_type(@applzip)
|
61
|
+
end
|
62
|
+
assert_instance_of(MIME::Type, @applzip)
|
63
|
+
assert_equal('appl/zip', @applzip.simplified)
|
64
|
+
refute_equal(@applzip.object_id, zip2.object_id)
|
34
65
|
end
|
35
66
|
|
36
67
|
def test_class_simplified
|
37
|
-
assert_equal(
|
38
|
-
assert_equal(
|
39
|
-
assert_equal(MIME::Type.simplified('application/x-msword')
|
40
|
-
assert_equal(MIME::Type.simplified('text/vCard')
|
41
|
-
assert_equal(
|
42
|
-
assert_equal(
|
43
|
-
|
68
|
+
assert_equal('text/plain', MIME::Type.simplified('text/plain'))
|
69
|
+
assert_equal('image/jpeg', MIME::Type.simplified('image/jpeg'))
|
70
|
+
assert_equal('application/msword', MIME::Type.simplified('application/x-msword'))
|
71
|
+
assert_equal('text/vcard', MIME::Type.simplified('text/vCard'))
|
72
|
+
assert_equal('application/pkcs7-mime', MIME::Type.simplified('application/pkcs7-mime'))
|
73
|
+
assert_equal('xyz/abc', MIME::Type.simplified('x-xyz/abc'))
|
74
|
+
assert_nil(MIME::Type.simplified('text'))
|
44
75
|
end
|
45
76
|
|
46
77
|
def test_CMP # '<=>'
|
@@ -63,7 +94,7 @@ class TestMIMEType < Minitest::Test
|
|
63
94
|
refute(MIME::Type.new('application/x-msword').ascii?)
|
64
95
|
assert(MIME::Type.new('text/vCard').ascii?)
|
65
96
|
refute(MIME::Type.new('application/pkcs7-mime').ascii?)
|
66
|
-
refute(@
|
97
|
+
refute(@applzip.ascii?)
|
67
98
|
end
|
68
99
|
|
69
100
|
def test_binary_eh
|
@@ -72,52 +103,69 @@ class TestMIMEType < Minitest::Test
|
|
72
103
|
assert(MIME::Type.new('application/x-msword').binary?)
|
73
104
|
refute(MIME::Type.new('text/vCard').binary?)
|
74
105
|
assert(MIME::Type.new('application/pkcs7-mime').binary?)
|
75
|
-
assert(@
|
106
|
+
assert(@applzip.binary?)
|
76
107
|
end
|
77
108
|
|
78
109
|
def test_complete_eh
|
79
|
-
yaml =
|
110
|
+
yaml = make_yaml_mime_type
|
80
111
|
assert(yaml.complete?)
|
81
112
|
yaml.extensions = nil
|
82
113
|
refute(yaml.complete?)
|
83
114
|
end
|
84
115
|
|
85
116
|
def test_content_type
|
86
|
-
assert_equal(MIME::Type.new('text/plain').content_type
|
87
|
-
assert_equal(MIME::Type.new('image/jpeg').content_type
|
88
|
-
assert_equal(
|
89
|
-
|
90
|
-
assert_equal(MIME::Type.new('
|
91
|
-
assert_equal(
|
117
|
+
assert_equal('text/plain', MIME::Type.new('text/plain').content_type)
|
118
|
+
assert_equal('image/jpeg', MIME::Type.new('image/jpeg').content_type)
|
119
|
+
assert_equal('application/x-msword',
|
120
|
+
MIME::Type.new('application/x-msword').content_type)
|
121
|
+
assert_equal('text/vCard', MIME::Type.new('text/vCard').content_type)
|
122
|
+
assert_equal('application/pkcs7-mime',
|
123
|
+
MIME::Type.new('application/pkcs7-mime').content_type)
|
124
|
+
assert_equal('x-appl/x-zip', @applzip.content_type);
|
125
|
+
assert_equal('base64', @applzip.encoding)
|
92
126
|
end
|
93
127
|
|
94
128
|
def test_encoding
|
95
|
-
assert_equal(MIME::Type.new('text/plain').encoding
|
96
|
-
assert_equal(MIME::Type.new('image/jpeg').encoding
|
97
|
-
assert_equal(MIME::Type.new('application/x-msword').encoding
|
98
|
-
assert_equal(MIME::Type.new('text/vCard').encoding
|
99
|
-
assert_equal(MIME::Type.new('application/pkcs7-mime').encoding
|
100
|
-
|
101
|
-
|
102
|
-
|
129
|
+
assert_equal('quoted-printable', MIME::Type.new('text/plain').encoding)
|
130
|
+
assert_equal('base64', MIME::Type.new('image/jpeg').encoding)
|
131
|
+
assert_equal('base64', MIME::Type.new('application/x-msword').encoding)
|
132
|
+
assert_equal('quoted-printable', MIME::Type.new('text/vCard').encoding)
|
133
|
+
assert_equal('base64', MIME::Type.new('application/pkcs7-mime').encoding)
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_encoding_equals
|
137
|
+
yaml = make_yaml_mime_type
|
138
|
+
assert_equal('8bit', yaml.encoding)
|
103
139
|
yaml.encoding = 'base64'
|
104
|
-
assert_equal(yaml.encoding
|
140
|
+
assert_equal('base64', yaml.encoding)
|
105
141
|
yaml.encoding = :default
|
106
|
-
assert_equal(
|
107
|
-
|
108
|
-
|
142
|
+
assert_equal('quoted-printable', yaml.encoding)
|
143
|
+
begin
|
144
|
+
yaml.encoding = 'binary'
|
145
|
+
rescue MIME::Type::InvalidEncoding => ex
|
146
|
+
assert_equal('Invalid Encoding "binary" (valid values are [nil, :default, "base64", "8bit", "7bit", "quoted-printable"]).', ex.message)
|
147
|
+
end
|
109
148
|
end
|
110
149
|
|
111
|
-
def
|
112
|
-
|
150
|
+
def test_default_encoding
|
151
|
+
%w(text/plain text/html).each { |mt|
|
152
|
+
assert_equal('quoted-printable', MIME::Type.new(mt).default_encoding)
|
153
|
+
}
|
154
|
+
%w(image/jpeg applicatoin/pkcs7-mime).each { |mt|
|
155
|
+
assert_equal('base64', MIME::Type.new(mt).default_encoding)
|
156
|
+
}
|
113
157
|
end
|
114
158
|
|
115
|
-
def
|
116
|
-
|
159
|
+
def test_docs
|
160
|
+
yaml = make_yaml_mime_type_with_docs
|
161
|
+
assert_equal('Test YAML', yaml.docs)
|
117
162
|
end
|
118
163
|
|
119
|
-
def
|
120
|
-
|
164
|
+
def test_docs_equals
|
165
|
+
yaml = make_yaml_mime_type
|
166
|
+
assert_nil(yaml.docs)
|
167
|
+
yaml.docs = 'YAML docs'
|
168
|
+
assert_equal('YAML docs', yaml.docs)
|
121
169
|
end
|
122
170
|
|
123
171
|
def test_eql?
|
@@ -127,25 +175,30 @@ class TestMIMEType < Minitest::Test
|
|
127
175
|
refute(MIME::Type.new('text/plain').eql?('image/jpeg'))
|
128
176
|
end
|
129
177
|
|
130
|
-
def _test_encoding
|
131
|
-
raise NotImplementedError, 'Need to write test_encoding'
|
132
|
-
end
|
133
|
-
|
134
|
-
def _test_encoding_equals
|
135
|
-
raise NotImplementedError, 'Need to write test_encoding_equals'
|
136
|
-
end
|
137
|
-
|
138
178
|
def test_extensions
|
139
|
-
yaml =
|
140
|
-
assert_equal(
|
179
|
+
yaml = make_yaml_mime_type
|
180
|
+
assert_equal(%w(yaml yml), yaml.extensions)
|
181
|
+
assert_equal(2, @applzip.extensions.size)
|
182
|
+
assert_equal(%w(zip zp), @applzip.extensions)
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_add_extensions
|
186
|
+
expected = make_yaml_mime_type
|
187
|
+
test_doc = make_yaml_mime_type
|
188
|
+
test_doc.add_extensions(nil)
|
189
|
+
assert_equal(expected.extensions, test_doc.extensions)
|
190
|
+
test_doc.add_extensions('yaml')
|
191
|
+
assert_equal(expected.extensions, test_doc.extensions)
|
192
|
+
test_doc.add_extensions(%w(yaml))
|
193
|
+
assert_equal(expected.extensions, test_doc.extensions)
|
194
|
+
test_doc.add_extensions('yz')
|
195
|
+
assert_equal(%w(yaml yml yz), test_doc.extensions)
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_extensions_equals
|
199
|
+
yaml = make_yaml_mime_type
|
141
200
|
yaml.extensions = 'yaml'
|
142
|
-
assert_equal(yaml
|
143
|
-
assert_equal(@zip.extensions.size, 2)
|
144
|
-
assert_equal(@zip.extensions, ['zip', 'zp'])
|
145
|
-
end
|
146
|
-
|
147
|
-
def _test_extensions_equals
|
148
|
-
raise NotImplementedError, 'Need to write test_extensions_equals'
|
201
|
+
assert_equal(%w(yaml), yaml.extensions)
|
149
202
|
end
|
150
203
|
|
151
204
|
def test_like_eh
|
@@ -158,50 +211,92 @@ class TestMIMEType < Minitest::Test
|
|
158
211
|
end
|
159
212
|
|
160
213
|
def test_media_type
|
161
|
-
assert_equal(MIME::Type.new('text/plain').media_type
|
162
|
-
assert_equal(MIME::Type.new('image/jpeg').media_type
|
163
|
-
assert_equal(MIME::Type.new('application/x-msword').media_type
|
164
|
-
assert_equal(MIME::Type.new('text/vCard').media_type
|
165
|
-
assert_equal(MIME::Type.new('application/pkcs7-mime').media_type
|
166
|
-
assert_equal(MIME::Type.new('x-chemical/x-pdb').media_type
|
167
|
-
assert_equal(@
|
214
|
+
assert_equal('text', MIME::Type.new('text/plain').media_type)
|
215
|
+
assert_equal('image', MIME::Type.new('image/jpeg').media_type)
|
216
|
+
assert_equal('application', MIME::Type.new('application/x-msword').media_type)
|
217
|
+
assert_equal('text', MIME::Type.new('text/vCard').media_type)
|
218
|
+
assert_equal('application', MIME::Type.new('application/pkcs7-mime').media_type)
|
219
|
+
assert_equal('chemical', MIME::Type.new('x-chemical/x-pdb').media_type)
|
220
|
+
assert_equal('appl', @applzip.media_type)
|
168
221
|
end
|
169
222
|
|
170
|
-
def
|
171
|
-
|
223
|
+
def test_obsolete_eh
|
224
|
+
type = MIME::Type.new('content-type' => 'test/type',
|
225
|
+
'obsolete' => true)
|
226
|
+
assert(type.obsolete?)
|
227
|
+
refute(make_yaml_mime_type.obsolete?)
|
172
228
|
end
|
173
229
|
|
174
|
-
def
|
175
|
-
|
230
|
+
def test_obsolete_equals
|
231
|
+
yaml = make_yaml_mime_type
|
232
|
+
refute(yaml.obsolete?)
|
233
|
+
yaml.obsolete = true
|
234
|
+
assert(yaml.obsolete?)
|
176
235
|
end
|
177
236
|
|
178
237
|
def test_platform_eh
|
179
|
-
yaml =
|
180
|
-
|
238
|
+
yaml = nil
|
239
|
+
assert_deprecated("MIME::Type#platform?") do
|
240
|
+
yaml = make_yaml_mime_type
|
241
|
+
refute(yaml.platform?)
|
242
|
+
end
|
181
243
|
yaml.system = nil
|
182
244
|
refute(yaml.platform?)
|
183
245
|
yaml.system = %r{#{RUBY_PLATFORM}}
|
184
246
|
assert(yaml.platform?)
|
185
247
|
end
|
186
248
|
|
187
|
-
def
|
188
|
-
assert_equal(
|
189
|
-
assert_equal(
|
190
|
-
assert_equal(
|
191
|
-
|
192
|
-
|
249
|
+
def assert_priority(l, e, r)
|
250
|
+
assert_equal(-1, l.first.priority_compare(l.last))
|
251
|
+
assert_equal(0, e.first.priority_compare(e.last))
|
252
|
+
assert_equal(1, r.first.priority_compare(r.last))
|
253
|
+
end
|
254
|
+
|
255
|
+
def test_priority_compare
|
256
|
+
tl, te, tr = make('text/1'), make('text/1'), make('text/2')
|
257
|
+
assert_priority([tl, tr], [tl, te], [tr, tl])
|
258
|
+
|
259
|
+
tl.registered = te.registered = true
|
260
|
+
tr = make(tl) { |t| t.registered = false }
|
261
|
+
assert_priority([tl, tr], [tl, te], [tr, tl])
|
193
262
|
|
194
|
-
|
195
|
-
|
263
|
+
tl.system = te.system = nil
|
264
|
+
tr = make(tl) { |t| t.system = /#{RUBY_PLATFORM}/ }
|
265
|
+
assert_priority([tl, tr], [tl, te], [tr, tl])
|
266
|
+
|
267
|
+
tl.extensions = te.extensions = %w(1)
|
268
|
+
tr = make(tl) { |t| t.extensions = nil }
|
269
|
+
assert_priority([tl, tr], [tl, te], [tr, tl])
|
270
|
+
|
271
|
+
tl.obsolete = te.obsolete = false
|
272
|
+
tr = make(tl) { |t| t.obsolete = true }
|
273
|
+
assert_priority([tl, tr], [tl, te], [tr, tl])
|
274
|
+
|
275
|
+
tl.obsolete = te.obsolete = true
|
276
|
+
tl.use_instead = te.use_instead = 'abc/xyz'
|
277
|
+
tr = make(tl) { |t| t.use_instead = nil }
|
278
|
+
assert_priority([tl, tr], [tl, te], [tr, tl])
|
279
|
+
tr.use_instead = 'abc/zzz'
|
280
|
+
assert_priority([tl, tr], [tl, te], [tr, tl])
|
281
|
+
end
|
282
|
+
|
283
|
+
def test_raw_media_type
|
284
|
+
assert_equal('text', MIME::Type.new('text/plain').raw_media_type)
|
285
|
+
assert_equal('image', MIME::Type.new('image/jpeg').raw_media_type)
|
286
|
+
assert_equal('application', MIME::Type.new('application/x-msword').raw_media_type)
|
287
|
+
assert_equal('text', MIME::Type.new('text/vCard').raw_media_type)
|
288
|
+
assert_equal('application', MIME::Type.new('application/pkcs7-mime').raw_media_type)
|
289
|
+
assert_equal('x-chemical', MIME::Type.new('x-chemical/x-pdb').raw_media_type)
|
290
|
+
assert_equal('x-appl', @applzip.raw_media_type)
|
196
291
|
end
|
197
292
|
|
198
293
|
def test_raw_sub_type
|
199
|
-
assert_equal(MIME::Type.new('text/plain').raw_sub_type
|
200
|
-
assert_equal(MIME::Type.new('image/jpeg').raw_sub_type
|
201
|
-
assert_equal(MIME::Type.new('application/x-msword').raw_sub_type
|
202
|
-
assert_equal(MIME::Type.new('text/vCard').raw_sub_type
|
203
|
-
assert_equal(MIME::Type.new('application/pkcs7-mime').raw_sub_type
|
204
|
-
assert_equal(
|
294
|
+
assert_equal('plain', MIME::Type.new('text/plain').raw_sub_type)
|
295
|
+
assert_equal('jpeg', MIME::Type.new('image/jpeg').raw_sub_type)
|
296
|
+
assert_equal('x-msword', MIME::Type.new('application/x-msword').raw_sub_type)
|
297
|
+
assert_equal('vCard', MIME::Type.new('text/vCard').raw_sub_type)
|
298
|
+
assert_equal('pkcs7-mime', MIME::Type.new('application/pkcs7-mime').raw_sub_type)
|
299
|
+
assert_equal('x-zip', @applzip.raw_sub_type)
|
205
300
|
end
|
206
301
|
|
207
302
|
def test_registered_eh
|
@@ -210,107 +305,206 @@ class TestMIMEType < Minitest::Test
|
|
210
305
|
refute(MIME::Type.new('application/x-msword').registered?)
|
211
306
|
assert(MIME::Type.new('text/vCard').registered?)
|
212
307
|
assert(MIME::Type.new('application/pkcs7-mime').registered?)
|
213
|
-
refute(@
|
308
|
+
refute(@applzip.registered?)
|
309
|
+
refute(MIME::Types['image/webp'].first.registered?)
|
310
|
+
# Temporarily broken: requires the new data format to be enabled.
|
311
|
+
assert(MIME::Types['application/x-www-form-urlencoded'].first.registered?)
|
214
312
|
end
|
215
313
|
|
216
|
-
def
|
217
|
-
|
314
|
+
def test_registered_equals
|
315
|
+
[ nil, false, true ].each { |v|
|
316
|
+
@applzip.registered = v
|
317
|
+
assert_equal(v, @applzip.instance_variable_get(:@registered))
|
318
|
+
}
|
319
|
+
@applzip.registered = 1
|
320
|
+
assert_equal(true, @applzip.instance_variable_get(:@registered))
|
218
321
|
end
|
219
322
|
|
220
323
|
def test_signature_eh
|
221
324
|
refute(MIME::Type.new('text/plain').signature?)
|
222
325
|
refute(MIME::Type.new('image/jpeg').signature?)
|
223
326
|
refute(MIME::Type.new('application/x-msword').signature?)
|
224
|
-
|
225
|
-
|
327
|
+
end
|
328
|
+
|
329
|
+
def test_signature_equals
|
330
|
+
sig = MIME::Type.new('text/vCard') { |t| t.signature = true }
|
331
|
+
assert(sig.signature?)
|
226
332
|
end
|
227
333
|
|
228
334
|
def test_simplified
|
229
|
-
assert_equal(MIME::Type.new('text/plain').simplified
|
230
|
-
assert_equal(MIME::Type.new('image/jpeg').simplified
|
231
|
-
assert_equal(MIME::Type.new('application/x-msword').simplified
|
232
|
-
assert_equal(MIME::Type.new('text/vCard').simplified
|
233
|
-
assert_equal(
|
234
|
-
assert_equal(MIME::Type.new('x-chemical/x-pdb').simplified
|
335
|
+
assert_equal('text/plain', MIME::Type.new('text/plain').simplified)
|
336
|
+
assert_equal('image/jpeg', MIME::Type.new('image/jpeg').simplified)
|
337
|
+
assert_equal('application/msword', MIME::Type.new('application/x-msword').simplified)
|
338
|
+
assert_equal('text/vcard', MIME::Type.new('text/vCard').simplified)
|
339
|
+
assert_equal('application/pkcs7-mime', MIME::Type.new('application/pkcs7-mime').simplified)
|
340
|
+
assert_equal('chemical/pdb', MIME::Type.new('x-chemical/x-pdb').simplified)
|
235
341
|
end
|
236
342
|
|
237
343
|
def test_sub_type
|
238
|
-
assert_equal(MIME::Type.new('text/plain').sub_type
|
239
|
-
assert_equal(MIME::Type.new('image/jpeg').sub_type
|
240
|
-
assert_equal(MIME::Type.new('application/x-msword').sub_type
|
241
|
-
assert_equal(MIME::Type.new('text/vCard').sub_type
|
242
|
-
assert_equal(MIME::Type.new('application/pkcs7-mime').sub_type
|
243
|
-
assert_equal(@
|
344
|
+
assert_equal('plain', MIME::Type.new('text/plain').sub_type)
|
345
|
+
assert_equal('jpeg', MIME::Type.new('image/jpeg').sub_type)
|
346
|
+
assert_equal('msword', MIME::Type.new('application/x-msword').sub_type)
|
347
|
+
assert_equal('vcard', MIME::Type.new('text/vCard').sub_type)
|
348
|
+
assert_equal('pkcs7-mime', MIME::Type.new('application/pkcs7-mime').sub_type)
|
349
|
+
assert_equal('zip', @applzip.sub_type)
|
350
|
+
end
|
351
|
+
|
352
|
+
def test_system
|
353
|
+
assert_deprecated("MIME::Type#system") do
|
354
|
+
yaml = make_yaml_mime_type
|
355
|
+
assert_equal(%r{d9d172f608}, yaml.system)
|
356
|
+
end
|
244
357
|
end
|
245
358
|
|
246
359
|
def test_system_equals
|
247
|
-
yaml =
|
248
|
-
assert_equal(yaml.system, %r{d9d172f608})
|
360
|
+
yaml = make_yaml_mime_type
|
249
361
|
yaml.system = /win32/
|
250
|
-
assert_equal(
|
362
|
+
assert_equal(%r{win32}, yaml.system)
|
251
363
|
yaml.system = nil
|
252
364
|
assert_nil(yaml.system)
|
253
365
|
end
|
254
366
|
|
255
367
|
def test_system_eh
|
256
|
-
yaml =
|
257
|
-
|
368
|
+
yaml = make_yaml_mime_type
|
369
|
+
assert_deprecated("MIME::Type#system?") do
|
370
|
+
assert(yaml.system?)
|
371
|
+
end
|
258
372
|
yaml.system = nil
|
259
373
|
refute(yaml.system?)
|
260
374
|
end
|
261
375
|
|
262
376
|
def test_to_a
|
263
|
-
yaml =
|
264
|
-
|
265
|
-
|
377
|
+
yaml = make_yaml_mime_type
|
378
|
+
assert_deprecated("MIME::Type#to_a") do
|
379
|
+
assert_equal(['text/x-yaml', %w(yaml yml), '8bit', /d9d172f608/,
|
380
|
+
false, nil, [], false], yaml.to_a)
|
381
|
+
end
|
266
382
|
end
|
267
383
|
|
268
384
|
def test_to_hash
|
269
|
-
yaml =
|
270
|
-
|
271
|
-
|
385
|
+
yaml = make_yaml_mime_type
|
386
|
+
assert_deprecated("MIME::Type#to_hash") do
|
387
|
+
assert_equal({'Content-Type' => 'text/x-yaml',
|
272
388
|
'Content-Transfer-Encoding' => '8bit',
|
273
|
-
'Extensions'
|
274
|
-
'System'
|
275
|
-
'Registered'
|
276
|
-
'URL'
|
277
|
-
'Obsolete'
|
278
|
-
'Docs'
|
389
|
+
'Extensions' => %w(yaml yml),
|
390
|
+
'System' => /d9d172f608/,
|
391
|
+
'Registered' => false,
|
392
|
+
'URL' => [],
|
393
|
+
'Obsolete' => false,
|
394
|
+
'Docs' => nil },
|
395
|
+
yaml.to_hash)
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
def assert_type_has_keys(type, *keys)
|
400
|
+
hash = type.to_h
|
401
|
+
keys.flatten.each { |key| assert(hash.has_key?(key)) }
|
402
|
+
end
|
403
|
+
|
404
|
+
def test_to_h
|
405
|
+
t = make('a/b')
|
406
|
+
assert_type_has_keys(t, %w(content-type registered encoding))
|
407
|
+
assert_type_has_keys(make(t) { |v| v.docs = 'Something' }, 'docs')
|
408
|
+
assert_type_has_keys(make(t) { |v| v.extensions = %w(b) }, 'extensions')
|
409
|
+
assert_type_has_keys(make(t) { |v| v.obsolete = true }, 'obsolete')
|
410
|
+
assert_type_has_keys(make(t) { |v| v.obsolete = true; v.use_instead = 'c/d' },
|
411
|
+
'obsolete', 'use-instead')
|
412
|
+
assert_type_has_keys(make(t) { |v| v.references = 'IANA' }, 'references')
|
413
|
+
assert_type_has_keys(make(t) { |v| v.signature = true }, 'signature')
|
414
|
+
assert_type_has_keys(make(t) { |v| v.system = /xyz/ }, 'system')
|
415
|
+
end
|
416
|
+
|
417
|
+
def test_to_json
|
418
|
+
assert_equal('{"content-type":"a/b","encoding":"base64","registered":true}',
|
419
|
+
make('a/b').to_json)
|
279
420
|
end
|
280
421
|
|
281
422
|
def test_to_s
|
282
|
-
assert_equal("#{MIME::Type.new('text/plain')}"
|
423
|
+
assert_equal('text/plain', "#{MIME::Type.new('text/plain')}")
|
283
424
|
end
|
284
425
|
|
285
426
|
def test_class_constructors
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
427
|
+
assert_instance_of(MIME::Type, MIME::Type.new('text/x-yaml'))
|
428
|
+
assert_instance_of(MIME::Type, MIME::Type.new('text/x-yaml') { |y|
|
429
|
+
assert_instance_of(MIME::Type, y)
|
430
|
+
})
|
431
|
+
assert_instance_of(MIME::Type, MIME::Type.new('content-type' => 'text/x-yaml'))
|
432
|
+
assert_instance_of(MIME::Type, MIME::Type.new(['text/x-yaml', %w(yaml)]))
|
433
|
+
assert_raises(MIME::Type::InvalidContentType) { MIME::Type.new('apps') }
|
434
|
+
begin
|
435
|
+
MIME::Type.new(nil)
|
436
|
+
rescue MIME::Type::InvalidContentType => ex
|
437
|
+
assert_equal("Invalid Content-Type nil", ex.message)
|
291
438
|
end
|
292
|
-
assert_instance_of(MIME::Type, yaml)
|
293
|
-
assert_raises(MIME::InvalidContentType) { MIME::Type.new('apps') }
|
294
|
-
assert_raises(MIME::InvalidContentType) { MIME::Type.new(nil) }
|
295
439
|
end
|
296
440
|
|
297
|
-
def
|
298
|
-
|
441
|
+
def test_to_str
|
442
|
+
assert_equal('stringy', 'text/plain'.sub(MIME::Type.new('text/plain'), 'stringy'))
|
299
443
|
end
|
300
444
|
|
301
|
-
def
|
302
|
-
|
445
|
+
def test_references
|
446
|
+
assert_empty(make_yaml_mime_type.references)
|
303
447
|
end
|
304
448
|
|
305
|
-
def
|
306
|
-
|
449
|
+
def test_references_equals
|
450
|
+
yaml = make_yaml_mime_type
|
451
|
+
yaml.references = "IANA"
|
452
|
+
assert_equal(%W(IANA), yaml.references)
|
307
453
|
end
|
308
454
|
|
309
|
-
def
|
310
|
-
|
455
|
+
def test_url
|
456
|
+
assert_deprecated("MIME::Type#url", "and has been renamed to #references") do
|
457
|
+
assert_empty(make_yaml_mime_type.url)
|
458
|
+
end
|
311
459
|
end
|
312
460
|
|
313
|
-
def
|
314
|
-
|
461
|
+
def test_url_equals
|
462
|
+
yaml = make_yaml_mime_type
|
463
|
+
assert_deprecated("MIME::Type#url=", "and has been renamed to #references=") do
|
464
|
+
yaml.url = "IANA"
|
465
|
+
end
|
466
|
+
assert_equal(%W(IANA), yaml.url)
|
467
|
+
end
|
468
|
+
|
469
|
+
def test_urls
|
470
|
+
yaml = make_yaml_mime_type
|
471
|
+
assert_empty(yaml.urls)
|
472
|
+
yaml.references = %w(IANA RFC123 DRAFT:xyz LTSW [abc])
|
473
|
+
assert_equal(%w(http://www.iana.org/assignments/media-types/text/yaml
|
474
|
+
http://rfc-editor.org/rfc/rfc123.txt
|
475
|
+
http://datatracker.ietf.org/public/idindex.cgi?command=id_details&filename=xyz
|
476
|
+
http://www.ltsw.se/knbase/internet/text.htp
|
477
|
+
http://www.iana.org/assignments/contact-people.htm#abc),
|
478
|
+
yaml.urls)
|
479
|
+
yaml.references = '[def=lax]'
|
480
|
+
assert_equal([%w(def http://www.iana.org/assignments/contact-people.htm#lax)],
|
481
|
+
yaml.urls)
|
482
|
+
yaml.references = '{mno=pqr}'
|
483
|
+
assert_equal([%w(mno pqr)], yaml.urls)
|
484
|
+
yaml.references = 'hoge'
|
485
|
+
assert_equal(%w(hoge), yaml.urls)
|
486
|
+
end
|
487
|
+
|
488
|
+
def test_use_instead
|
489
|
+
t = make('t/1') { |v| v.use_instead = 't/2' }
|
490
|
+
assert_nil(t.use_instead)
|
491
|
+
t.obsolete = true
|
492
|
+
assert_equal('t/2', t.use_instead)
|
493
|
+
end
|
494
|
+
|
495
|
+
def test_use_instead_equals
|
496
|
+
t = make('t/1') { |v| v.obsolete = true }
|
497
|
+
assert_nil(t.use_instead)
|
498
|
+
t.use_instead = 't/2'
|
499
|
+
assert_equal('t/2', t.use_instead)
|
500
|
+
end
|
501
|
+
|
502
|
+
def test_deprecated_constant
|
503
|
+
assert_output(nil, /MIME::InvalidContentType/) do
|
504
|
+
assert_same(MIME::InvalidContentType, MIME::Type::InvalidContentType)
|
505
|
+
end
|
506
|
+
assert_silent do
|
507
|
+
assert_same(MIME::InvalidContentType, MIME::Type::InvalidContentType)
|
508
|
+
end
|
315
509
|
end
|
316
510
|
end
|