代码拉取完成,页面将自动刷新
package yasrpc
import (
"net/http"
"net/http/httptest"
"testing"
"git.yasdb.com/go/yasutil/assert"
)
type header struct {
Key string
Value string
}
// PerformRequest for testing gin router.
func PerformRequest(r http.Handler, method, path string, headers ...header) *httptest.ResponseRecorder {
req := httptest.NewRequest(method, path, nil)
for _, h := range headers {
req.Header.Add(h.Key, h.Value)
}
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
return w
}
func TestRouterGroupBasic(t *testing.T) {
ast := assert.NewAssert(t)
router := NewEngine()
group := router.Group("/hola", func(c *Context) {})
group.Use(func(c *Context) {})
ast.Equal(len(group.Middlewares), 2)
ast.Equal("/hola", group.BasePath())
ast.DeepEqual(router, group.engine)
group2 := group.Group("manu")
group2.Use(func(c *Context) {}, func(c *Context) {})
ast.Equal(len(group2.Middlewares), 4)
ast.Equal("/hola/manu", group2.BasePath())
ast.DeepEqual(router, group2.engine)
}
func TestRouterGroupBasicHandle(t *testing.T) {
ast := assert.NewAssert(t)
performRequestInGroup(ast, http.MethodGet)
performRequestInGroup(ast, http.MethodPost)
performRequestInGroup(ast, http.MethodPut)
performRequestInGroup(ast, http.MethodPatch)
performRequestInGroup(ast, http.MethodDelete)
performRequestInGroup(ast, http.MethodHead)
performRequestInGroup(ast, http.MethodOptions)
}
func performRequestInGroup(ast *assert.Assert, method string) {
router := NewEngine()
v1 := router.Group("v1", func(c *Context) {})
ast.Equal("/v1", v1.BasePath())
login := v1.Group("/login/", func(c *Context) {}, func(c *Context) {})
ast.Equal("/v1/login/", login.BasePath())
handler := func(c *Context) {
c.String(http.StatusBadRequest, "the method was %s and index %d", c.Request.Method, c.index)
}
switch method {
case http.MethodGet:
v1.GET("/test", handler)
login.GET("/test", handler)
case http.MethodPost:
v1.POST("/test", handler)
login.POST("/test", handler)
case http.MethodPut:
v1.PUT("/test", handler)
login.PUT("/test", handler)
case http.MethodPatch:
v1.PATCH("/test", handler)
login.PATCH("/test", handler)
case http.MethodDelete:
v1.DELETE("/test", handler)
login.DELETE("/test", handler)
case http.MethodHead:
v1.HEAD("/test", handler)
login.HEAD("/test", handler)
case http.MethodOptions:
v1.OPTIONS("/test", handler)
login.OPTIONS("/test", handler)
default:
panic("unknown method")
}
w := PerformRequest(router, method, "/v1/login/test")
ast.Equal(http.StatusBadRequest, w.Code)
ast.Equal("the method was "+method+" and index 3", w.Body.String())
w = PerformRequest(router, method, "/v1/test")
ast.Equal(http.StatusBadRequest, w.Code)
ast.Equal("the method was "+method+" and index 1", w.Body.String())
}
func TestRouterGroupPipeline(t *testing.T) {
ast := assert.NewAssert(t)
router := NewEngine()
testRoutesInterface(ast, router)
v1 := router.Group("/v1")
testRoutesInterface(ast, v1)
}
func testRoutesInterface(ast *assert.Assert, r IRoutes) {
handler := func(c *Context) {}
ast.DeepEqual(r, r.Use(handler))
ast.DeepEqual(r, r.GET("/", handler))
ast.DeepEqual(r, r.POST("/", handler))
ast.DeepEqual(r, r.DELETE("/", handler))
ast.DeepEqual(r, r.PATCH("/", handler))
ast.DeepEqual(r, r.PUT("/", handler))
ast.DeepEqual(r, r.OPTIONS("/", handler))
ast.DeepEqual(r, r.HEAD("/", handler))
ast.DeepEqual(r, r.Match([]string{http.MethodPut, http.MethodPatch}, "/match", handler))
ast.DeepEqual(r, r.StaticFile("/file", "."))
ast.DeepEqual(r, r.Static("/static", "."))
ast.DeepEqual(r, r.StaticFS("/static2", Dir(".", false)))
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。