github.com/lingyao2333/mo-zero@v1.4.1/rest/internal/encoding/parser_test.go (about) 1 package encoding 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestParseHeaders(t *testing.T) { 12 var val struct { 13 Foo string `header:"foo"` 14 Baz int `header:"baz"` 15 Qux bool `header:"qux,default=true"` 16 } 17 r := httptest.NewRequest(http.MethodGet, "/any", http.NoBody) 18 r.Header.Set("foo", "bar") 19 r.Header.Set("baz", "1") 20 assert.Nil(t, ParseHeaders(r.Header, &val)) 21 assert.Equal(t, "bar", val.Foo) 22 assert.Equal(t, 1, val.Baz) 23 assert.True(t, val.Qux) 24 } 25 26 func TestParseHeadersMulti(t *testing.T) { 27 var val struct { 28 Foo []string `header:"foo"` 29 Baz int `header:"baz"` 30 Qux bool `header:"qux,default=true"` 31 } 32 r := httptest.NewRequest(http.MethodGet, "/any", http.NoBody) 33 r.Header.Set("foo", "bar") 34 r.Header.Add("foo", "bar1") 35 r.Header.Set("baz", "1") 36 assert.Nil(t, ParseHeaders(r.Header, &val)) 37 assert.Equal(t, []string{"bar", "bar1"}, val.Foo) 38 assert.Equal(t, 1, val.Baz) 39 assert.True(t, val.Qux) 40 } 41 42 func TestParseHeadersArrayInt(t *testing.T) { 43 var val struct { 44 Foo []int `header:"foo"` 45 } 46 r := httptest.NewRequest(http.MethodGet, "/any", http.NoBody) 47 r.Header.Set("foo", "1") 48 r.Header.Add("foo", "2") 49 assert.Nil(t, ParseHeaders(r.Header, &val)) 50 assert.Equal(t, []int{1, 2}, val.Foo) 51 }