forked from mirror/gin
List of routes
This commit is contained in:
parent
042046e1f8
commit
45dd777693
28
gin.go
28
gin.go
|
@ -60,6 +60,11 @@ type (
|
|||
// handler.
|
||||
HandleMethodNotAllowed bool
|
||||
}
|
||||
|
||||
RouteInfo struct {
|
||||
Method string
|
||||
Path string
|
||||
}
|
||||
)
|
||||
|
||||
// Returns a new blank Engine instance without any middleware attached.
|
||||
|
@ -169,6 +174,29 @@ func (engine *Engine) addRoute(method, path string, handlers HandlersChain) {
|
|||
root.addRoute(path, handlers)
|
||||
}
|
||||
|
||||
func (engine *Engine) Routes() (routes []RouteInfo) {
|
||||
for _, tree := range engine.trees {
|
||||
for _, path := range iterate("", nil, tree.root) {
|
||||
routes = append(routes, RouteInfo{
|
||||
Method: tree.method,
|
||||
Path: path,
|
||||
})
|
||||
}
|
||||
}
|
||||
return routes
|
||||
}
|
||||
|
||||
func iterate(path string, routes []string, root *node) []string {
|
||||
path += root.path
|
||||
if root.handlers != nil {
|
||||
routes = append(routes, path)
|
||||
}
|
||||
for _, node := range root.children {
|
||||
routes = iterate(path, routes, node)
|
||||
}
|
||||
return routes
|
||||
}
|
||||
|
||||
// The router is attached to a http.Server and starts listening and serving HTTP requests.
|
||||
// It is a shortcut for http.ListenAndServe(addr, router)
|
||||
// Note: this method will block the calling goroutine undefinitelly unless an error happens.
|
||||
|
|
48
gin_test.go
48
gin_test.go
|
@ -14,7 +14,6 @@ import (
|
|||
//TODO
|
||||
// func (engine *Engine) LoadHTMLGlob(pattern string) {
|
||||
// func (engine *Engine) LoadHTMLFiles(files ...string) {
|
||||
// func (engine *Engine) Run(addr string) error {
|
||||
// func (engine *Engine) RunTLS(addr string, cert string, key string) error {
|
||||
|
||||
func init() {
|
||||
|
@ -180,3 +179,50 @@ func compareFunc(t *testing.T, a, b interface{}) {
|
|||
t.Error("different functions")
|
||||
}
|
||||
}
|
||||
|
||||
func TestListOfRoutes(t *testing.T) {
|
||||
handler := func(c *Context){}
|
||||
router := New()
|
||||
router.GET("/favicon.ico", handler)
|
||||
router.GET("/", handler)
|
||||
group := router.Group("/users")
|
||||
{
|
||||
group.GET("/", handler)
|
||||
group.GET("/:id", handler)
|
||||
group.POST("/:id", handler)
|
||||
}
|
||||
router.Static("/static", ".")
|
||||
|
||||
list := router.Routes()
|
||||
|
||||
assert.Len(t, list, 7)
|
||||
assert.Contains(t, list, RouteInfo{
|
||||
Method: "GET",
|
||||
Path: "/favicon.ico",
|
||||
})
|
||||
assert.Contains(t, list, RouteInfo{
|
||||
Method: "GET",
|
||||
Path: "/",
|
||||
})
|
||||
assert.Contains(t, list, RouteInfo{
|
||||
Method: "GET",
|
||||
Path: "/users/",
|
||||
})
|
||||
assert.Contains(t, list, RouteInfo{
|
||||
Method: "GET",
|
||||
Path: "/users/:id",
|
||||
})
|
||||
assert.Contains(t, list, RouteInfo{
|
||||
Method: "POST",
|
||||
Path: "/users/:id",
|
||||
})
|
||||
assert.Contains(t, list, RouteInfo{
|
||||
Method: "GET",
|
||||
Path: "/static/*filepath",
|
||||
})
|
||||
assert.Contains(t, list, RouteInfo{
|
||||
Method: "HEAD",
|
||||
Path: "/static/*filepath",
|
||||
})
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue