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  }