-
Notifications
You must be signed in to change notification settings - Fork 1
/
parser_test.go
135 lines (117 loc) · 2.55 KB
/
parser_test.go
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package nego
import (
"net/http"
"testing"
"github.com/stretchr/testify/assert"
)
func TestParseAccept(t *testing.T) {
testCases := []struct {
desc string
accept string
expLen int
}{
{
desc: "should return an empty map if the given values are empty",
accept: "",
expLen: 0,
},
{
desc: "should return a map with one element",
accept: "gzip",
expLen: 1,
},
{
desc: "should return a map with the given number of elements",
accept: "gzip,deflate",
expLen: 2,
},
{
desc: "should return a map with the given number of elements ignoring spaces",
accept: "gzip , deflate",
expLen: 2,
},
{
desc: "should return a map with the given number of elements in the given values",
accept: "gzip, deflate, br",
expLen: 3,
},
}
for _, testCase := range testCases {
testCase := testCase
t.Run(testCase.desc, func(t *testing.T) {
t.Parallel()
header := make(http.Header)
header.Add("Accept", testCase.accept)
specs, _ := parseAccept(header, "Accept")
assert.Equal(t, testCase.expLen, len(specs))
})
}
}
func TestParseSpec(t *testing.T) {
testCases := []struct {
desc string
value string
expN string
expQ float64
}{
{
desc: "should return the parsed name with the default quality",
value: "test",
expN: "test",
expQ: 1.0,
},
{
desc: "should return the parsed name with the given quality",
value: "test;q=0.1",
expN: "test",
expQ: 0.1,
},
{
desc: "should return the parsed name with the given quality ignoring whitespaces",
value: "test ; q=0.1",
expN: "test",
expQ: 0.1,
},
{
desc: "should return the parsed name with the given quality ignoring extra params",
value: "test ; format=foo; q=0.1; format=bar",
expN: "test",
expQ: 0.1,
},
}
for _, testCase := range testCases {
testCase := testCase
t.Run(testCase.desc, func(t *testing.T) {
t.Parallel()
name, quality := parseSpec(testCase.value)
assert.Equal(t, testCase.expN, name)
assert.Equal(t, testCase.expQ, quality)
})
}
}
func TestParseQuality(t *testing.T) {
testCases := []struct {
desc string
value string
expQ float64
}{
{
desc: "should return the parsed value",
value: "1.0",
expQ: 1.0,
},
{
desc: "should return -1 if the value cannot be parsed",
value: "aa",
expQ: -1.0,
},
}
for _, testCase := range testCases {
testCase := testCase
t.Run(testCase.desc, func(t *testing.T) {
t.Parallel()
quality := parseQuality(testCase.value)
assert.Equal(t, testCase.expQ, quality)
})
}
}