Skip to content

Commit 19ffe65

Browse files
committed
Test coverage.
1 parent 135fcc4 commit 19ffe65

File tree

2 files changed

+51
-14
lines changed

2 files changed

+51
-14
lines changed

lib/protocol/http/header/accept.rb

+5-5
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class Accept < Array
2828

2929
PARAMETER = /\s*;\s*(?<key>#{TOKEN})=((?<value>#{TOKEN})|(?<quoted_value>#{QUOTED_STRING}))/
3030

31-
# A single entry in the Accept: header, which includes a mime type and associated parameters.
31+
# A single entry in the Accept: header, which includes a mime type and associated parameters. A media range can include wild cards, but a media type is a specific type and subtype.
3232
MediaRange = Struct.new(:type, :subtype, :parameters) do
3333
def initialize(type, subtype = "*", parameters = {})
3434
super(type, subtype, parameters)
@@ -42,19 +42,19 @@ def parameters_string
4242
return "" if parameters == nil or parameters.empty?
4343

4444
parameters.collect do |key, value|
45-
"; #{key.to_s}=#{QuotedString.quote(value.to_s)}"
45+
";#{key.to_s}=#{QuotedString.quote(value.to_s)}"
4646
end.join
4747
end
4848

4949
def === other
5050
if other.is_a? self.class
5151
super
5252
else
53-
return self.mime_type === other
53+
return self.range_string === other
5454
end
5555
end
5656

57-
def mime_type
57+
def range_string
5858
"#{type}/#{subtype}"
5959
end
6060

@@ -125,7 +125,7 @@ def parse_media_range(value)
125125

126126
return MediaRange.new(type, subtype, parameters)
127127
else
128-
raise ArgumentError, "Invalid media type: #{value.inspect}"
128+
raise ParseError, "Invalid media type: #{value.inspect}"
129129
end
130130
end
131131
end

test/protocol/http/header/accept.rb

+46-9
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,36 @@
77

88
describe Protocol::HTTP::Header::Accept::MediaRange do
99
it "should have default quality_factor of 1.0" do
10-
language = subject.new("text/plain", nil)
11-
expect(language.quality_factor).to be == 1.0
10+
media_range = subject.new("text/plain", nil)
11+
expect(media_range.quality_factor).to be == 1.0
12+
end
13+
14+
with "#===" do
15+
let(:media_range) {subject.new("text", "plain")}
16+
17+
it "can compare with bare string" do
18+
expect(media_range).to be === "text/plain"
19+
end
20+
21+
it "can compare with media range" do
22+
expect(media_range).to be === media_range
23+
end
24+
end
25+
26+
with "#to_s" do
27+
it "can convert to string" do
28+
media_range = subject.new("text", "plain", {"q" => "0.5"})
29+
expect(media_range.to_s).to be == "text/plain;q=0.5"
30+
end
31+
end
32+
33+
with "#split" do
34+
it "can split media range" do
35+
media_range = subject.new("text", "plain", {"q" => "0.5"})
36+
type, subtype = media_range.split
37+
expect(type).to be == "text"
38+
expect(subtype).to be == "plain"
39+
end
1240
end
1341
end
1442

@@ -20,32 +48,41 @@
2048
it "can parse media ranges" do
2149
expect(header.length).to be == 3
2250

23-
expect(media_ranges[0].mime_type).to be == "text/plain"
51+
expect(media_ranges[0].range_string).to be == "text/plain"
2452
expect(media_ranges[0].quality_factor).to be == 1.0
2553

26-
expect(media_ranges[1].mime_type).to be == "text/html"
54+
expect(media_ranges[1].range_string).to be == "text/html"
2755
expect(media_ranges[1].quality_factor).to be == 0.5
2856

29-
expect(media_ranges[2].mime_type).to be == "text/xml"
30-
expect(media_ranges[2].quality_factor).to be == 0.25
57+
expect(media_ranges[2].range_string).to be == "text/xml"
58+
end
59+
60+
it "can convert to string" do
61+
expect(header.to_s).to be == "text/plain,text/html;q=0.5,text/xml;q=0.25"
62+
end
63+
end
64+
65+
with "foobar" do
66+
it "fails to parse" do
67+
expect{media_ranges}.to raise_exception(Protocol::HTTP::Header::Accept::ParseError)
3168
end
3269
end
3370

3471
with "text/html;q=0.25, text/xml;q=0.5, text/plain" do
3572
it "should order based on quality factor" do
36-
expect(media_ranges.collect(&:mime_type)).to be == %w{text/plain text/xml text/html}
73+
expect(media_ranges.collect(&:range_string)).to be == %w{text/plain text/xml text/html}
3774
end
3875
end
3976

4077
with "text/html, text/plain;q=0.8, text/xml;q=0.6, application/json" do
4178
it "should order based on quality factor" do
42-
expect(media_ranges.collect(&:mime_type)).to be == %w{text/html application/json text/plain text/xml}
79+
expect(media_ranges.collect(&:range_string)).to be == %w{text/html application/json text/plain text/xml}
4380
end
4481
end
4582

4683
with "*/*;q=0" do
4784
it "should accept wildcard media range" do
48-
expect(media_ranges[0].mime_type).to be == "*/*"
85+
expect(media_ranges[0].range_string).to be == "*/*"
4986
expect(media_ranges[0].quality_factor).to be == 0
5087
end
5188
end

0 commit comments

Comments
 (0)