mirror of
https://github.com/labstack/echo.git
synced 2024-12-24 20:14:31 +02:00
Merge pull request #1695 from pafuent/reverse_any_type_routes
Fixing Echo#Reverse for Any type routes
This commit is contained in:
commit
429a8db01d
2
echo.go
2
echo.go
@ -572,7 +572,7 @@ func (e *Echo) Reverse(name string, params ...interface{}) string {
|
|||||||
for _, r := range e.router.routes {
|
for _, r := range e.router.routes {
|
||||||
if r.Name == name {
|
if r.Name == name {
|
||||||
for i, l := 0, len(r.Path); i < l; i++ {
|
for i, l := 0, len(r.Path); i < l; i++ {
|
||||||
if r.Path[i] == ':' && n < ln {
|
if (r.Path[i] == ':' || r.Path[i] == '*') && n < ln {
|
||||||
for ; i < l && r.Path[i] != '/'; i++ {
|
for ; i < l && r.Path[i] != '/'; i++ {
|
||||||
}
|
}
|
||||||
uri.WriteString(fmt.Sprintf("%v", params[n]))
|
uri.WriteString(fmt.Sprintf("%v", params[n]))
|
||||||
|
30
echo_test.go
30
echo_test.go
@ -277,10 +277,12 @@ func TestEchoURL(t *testing.T) {
|
|||||||
e := New()
|
e := New()
|
||||||
static := func(Context) error { return nil }
|
static := func(Context) error { return nil }
|
||||||
getUser := func(Context) error { return nil }
|
getUser := func(Context) error { return nil }
|
||||||
|
getAny := func(Context) error { return nil }
|
||||||
getFile := func(Context) error { return nil }
|
getFile := func(Context) error { return nil }
|
||||||
|
|
||||||
e.GET("/static/file", static)
|
e.GET("/static/file", static)
|
||||||
e.GET("/users/:id", getUser)
|
e.GET("/users/:id", getUser)
|
||||||
|
e.GET("/documents/*", getAny)
|
||||||
g := e.Group("/group")
|
g := e.Group("/group")
|
||||||
g.GET("/users/:uid/files/:fid", getFile)
|
g.GET("/users/:uid/files/:fid", getFile)
|
||||||
|
|
||||||
@ -289,6 +291,9 @@ func TestEchoURL(t *testing.T) {
|
|||||||
assert.Equal("/static/file", e.URL(static))
|
assert.Equal("/static/file", e.URL(static))
|
||||||
assert.Equal("/users/:id", e.URL(getUser))
|
assert.Equal("/users/:id", e.URL(getUser))
|
||||||
assert.Equal("/users/1", e.URL(getUser, "1"))
|
assert.Equal("/users/1", e.URL(getUser, "1"))
|
||||||
|
assert.Equal("/users/1", e.URL(getUser, "1"))
|
||||||
|
assert.Equal("/documents/foo.txt", e.URL(getAny, "foo.txt"))
|
||||||
|
assert.Equal("/documents/*", e.URL(getAny))
|
||||||
assert.Equal("/group/users/1/files/:fid", e.URL(getFile, "1"))
|
assert.Equal("/group/users/1/files/:fid", e.URL(getFile, "1"))
|
||||||
assert.Equal("/group/users/1/files/1", e.URL(getFile, "1", "1"))
|
assert.Equal("/group/users/1/files/1", e.URL(getFile, "1", "1"))
|
||||||
}
|
}
|
||||||
@ -652,3 +657,28 @@ func TestEchoShutdown(t *testing.T) {
|
|||||||
err := <-errCh
|
err := <-errCh
|
||||||
assert.Equal(t, err.Error(), "http: Server closed")
|
assert.Equal(t, err.Error(), "http: Server closed")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEchoReverse(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
e := New()
|
||||||
|
dummyHandler := func(Context) error { return nil }
|
||||||
|
|
||||||
|
e.GET("/static", dummyHandler).Name = "/static"
|
||||||
|
e.GET("/static/*", dummyHandler).Name = "/static/*"
|
||||||
|
e.GET("/params/:foo", dummyHandler).Name = "/params/:foo"
|
||||||
|
e.GET("/params/:foo/bar/:qux", dummyHandler).Name = "/params/:foo/bar/:qux"
|
||||||
|
e.GET("/params/:foo/bar/:qux/*", dummyHandler).Name = "/params/:foo/bar/:qux/*"
|
||||||
|
|
||||||
|
assert.Equal("/static", e.Reverse("/static"))
|
||||||
|
assert.Equal("/static", e.Reverse("/static", "missing param"))
|
||||||
|
assert.Equal("/static/*", e.Reverse("/static/*"))
|
||||||
|
assert.Equal("/static/foo.txt", e.Reverse("/static/*", "foo.txt"))
|
||||||
|
|
||||||
|
assert.Equal("/params/:foo", e.Reverse("/params/:foo"))
|
||||||
|
assert.Equal("/params/one", e.Reverse("/params/:foo", "one"))
|
||||||
|
assert.Equal("/params/:foo/bar/:qux", e.Reverse("/params/:foo/bar/:qux"))
|
||||||
|
assert.Equal("/params/one/bar/:qux", e.Reverse("/params/:foo/bar/:qux", "one"))
|
||||||
|
assert.Equal("/params/one/bar/two", e.Reverse("/params/:foo/bar/:qux", "one", "two"))
|
||||||
|
assert.Equal("/params/one/bar/two/three", e.Reverse("/params/:foo/bar/:qux/*", "one", "two", "three"))
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user