-
Notifications
You must be signed in to change notification settings - Fork 792
/
Copy pathtest_http_utils.rb
99 lines (85 loc) · 4.46 KB
/
test_http_utils.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# frozen_string_literal: true
require 'minitest/autorun'
require 'sprockets/http_utils'
class TestHTTPUtils < Minitest::Test
include Sprockets::HTTPUtils
def test_match_mime_type
assert match_mime_type?("text/html", "text/*")
assert match_mime_type?("text/plain", "*")
refute match_mime_type?("text/html", "application/json")
end
def test_match_mime_type_keys
h = {
"text/html" => 1,
"text/plain" => 2,
"application/json" => 3,
"text/*" => 4,
"*/*" => 5,
"*" => 6
}
assert_equal [6, 5, 4, 1], match_mime_type_keys(h, "text/html")
assert_equal [6, 5, 4, 2], match_mime_type_keys(h, "text/plain")
assert_equal [6, 5, 3], match_mime_type_keys(h, "application/json")
assert_equal [6, 5], match_mime_type_keys(h, "application/javascript")
end
def test_parse_q_values
assert_equal [], parse_q_values(nil)
assert_equal [["audio/*", 0.2], ["audio/basic", 1.0]],
parse_q_values("audio/*; q=0.2, audio/basic")
assert_equal [["text/plain", 0.5], ["text/html", 1.0], ["text/x-dvi", 0.8], ["text/x-c", 1.0]],
parse_q_values("text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c")
assert_equal [["text/*", 1.0], ["text/html", 1.0], ["text/html", 1.0], ["*/*", 1.0]],
parse_q_values("text/*, text/html, text/html;level=1, */*")
assert_equal [["text/*", 0.3], ["text/html", 0.7], ["text/html", 1.0], ["text/html", 1.0], ["*/*", 0.5]],
parse_q_values("text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5")
assert_equal [["iso-8859-5", 1.0], ["unicode-1-1", 0.8]],
parse_q_values("iso-8859-5, unicode-1-1;q=0.8")
assert_equal [["compress", 1.0], ["gzip", 1.0]],
parse_q_values("compress, gzip")
assert_equal [["*", 1.0]],
parse_q_values("*")
assert_equal [["compress", 0.5], ["gzip", 1.0]],
parse_q_values("compress;q=0.5, gzip;q=1.0")
assert_equal [["gzip", 1.0], ["identity", 0.5], ["*", 0.0]],
parse_q_values("gzip;q=1.0, identity; q=0.5, *;q=0")
end
def test_find_q_matches
accept = "text/plain; q=0.5, image/*"
assert_equal ["text/plain"], find_mime_type_matches(accept, ["text/plain"])
assert_equal ["image/svg+xml"], find_mime_type_matches(accept, ["image/svg+xml"])
assert_equal ["image/svg+xml"], find_mime_type_matches(accept, ["image/svg+xml", "image/png"])
assert_equal ["image/svg+xml", "text/plain"], find_mime_type_matches(accept, ["image/svg+xml", "text/plain"])
assert_equal [], find_mime_type_matches(accept, ["text/css"])
end
def test_find_matches_with_parsed_q_values
accept = [["text/plain", 0.5], ["image/*", 1.0]]
assert_equal ["text/plain"], find_mime_type_matches(accept, ["text/plain"])
assert_equal ["image/svg+xml"], find_mime_type_matches(accept, ["image/svg+xml"])
assert_equal ["image/svg+xml"], find_mime_type_matches(accept, ["image/svg+xml", "image/png"])
assert_equal ["image/svg+xml", "text/plain"], find_mime_type_matches(accept, ["image/svg+xml", "text/plain"])
assert_equal [], find_mime_type_matches(accept, ["text/css"])
end
def test_find_best_q_match
accept = "text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c"
assert_equal "text/plain", find_best_mime_type_match(accept, ["text/plain"])
assert_equal "text/html", find_best_mime_type_match(accept, ["text/html"])
assert_equal "text/html", find_best_mime_type_match(accept, ["text/plain", "text/html"])
assert_equal "text/html", find_best_mime_type_match(accept, ["text/html", "text/plain"])
refute find_best_mime_type_match(accept, ["text/yaml"])
refute find_best_mime_type_match(accept, [])
accept = "sdch, gzip, deflate"
assert_equal "sdch", find_best_q_match(accept, ["sdch", "gzip"])
assert_equal "gzip", find_best_q_match(accept, ["gzip"])
assert_equal "deflate", find_best_q_match(accept, ["deflate"])
refute find_best_q_match(accept, ["base64"])
refute find_best_q_match(accept, [])
refute find_best_q_match(nil, ["gzip"])
end
def test_find_best_q_match_with_parsed_q_values
assert accept = parse_q_values("text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c")
assert_equal "text/plain", find_best_mime_type_match(accept, ["text/plain"])
assert_equal "text/html", find_best_mime_type_match(accept, ["text/html"])
assert_equal "text/html", find_best_mime_type_match(accept, ["text/plain", "text/html"])
assert_equal "text/html", find_best_mime_type_match(accept, ["text/html", "text/plain"])
end
end