mime-types 1.25.1 → 2.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 +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
|