Skip to content

Commit 429a8db

Browse files
authored
Merge pull request #1695 from pafuent/reverse_any_type_routes
Fixing Echo#Reverse for Any type routes
2 parents ec209b3 + 5f1aa1b commit 429a8db

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

echo.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,7 @@ func (e *Echo) Reverse(name string, params ...interface{}) string {
572572
for _, r := range e.router.routes {
573573
if r.Name == name {
574574
for i, l := 0, len(r.Path); i < l; i++ {
575-
if r.Path[i] == ':' && n < ln {
575+
if (r.Path[i] == ':' || r.Path[i] == '*') && n < ln {
576576
for ; i < l && r.Path[i] != '/'; i++ {
577577
}
578578
uri.WriteString(fmt.Sprintf("%v", params[n]))

echo_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,10 +277,12 @@ func TestEchoURL(t *testing.T) {
277277
e := New()
278278
static := func(Context) error { return nil }
279279
getUser := func(Context) error { return nil }
280+
getAny := func(Context) error { return nil }
280281
getFile := func(Context) error { return nil }
281282

282283
e.GET("/static/file", static)
283284
e.GET("/users/:id", getUser)
285+
e.GET("/documents/*", getAny)
284286
g := e.Group("/group")
285287
g.GET("/users/:uid/files/:fid", getFile)
286288

@@ -289,6 +291,9 @@ func TestEchoURL(t *testing.T) {
289291
assert.Equal("/static/file", e.URL(static))
290292
assert.Equal("/users/:id", e.URL(getUser))
291293
assert.Equal("/users/1", e.URL(getUser, "1"))
294+
assert.Equal("/users/1", e.URL(getUser, "1"))
295+
assert.Equal("/documents/foo.txt", e.URL(getAny, "foo.txt"))
296+
assert.Equal("/documents/*", e.URL(getAny))
292297
assert.Equal("/group/users/1/files/:fid", e.URL(getFile, "1"))
293298
assert.Equal("/group/users/1/files/1", e.URL(getFile, "1", "1"))
294299
}
@@ -652,3 +657,28 @@ func TestEchoShutdown(t *testing.T) {
652657
err := <-errCh
653658
assert.Equal(t, err.Error(), "http: Server closed")
654659
}
660+
661+
func TestEchoReverse(t *testing.T) {
662+
assert := assert.New(t)
663+
664+
e := New()
665+
dummyHandler := func(Context) error { return nil }
666+
667+
e.GET("/static", dummyHandler).Name = "/static"
668+
e.GET("/static/*", dummyHandler).Name = "/static/*"
669+
e.GET("/params/:foo", dummyHandler).Name = "/params/:foo"
670+
e.GET("/params/:foo/bar/:qux", dummyHandler).Name = "/params/:foo/bar/:qux"
671+
e.GET("/params/:foo/bar/:qux/*", dummyHandler).Name = "/params/:foo/bar/:qux/*"
672+
673+
assert.Equal("/static", e.Reverse("/static"))
674+
assert.Equal("/static", e.Reverse("/static", "missing param"))
675+
assert.Equal("/static/*", e.Reverse("/static/*"))
676+
assert.Equal("/static/foo.txt", e.Reverse("/static/*", "foo.txt"))
677+
678+
assert.Equal("/params/:foo", e.Reverse("/params/:foo"))
679+
assert.Equal("/params/one", e.Reverse("/params/:foo", "one"))
680+
assert.Equal("/params/:foo/bar/:qux", e.Reverse("/params/:foo/bar/:qux"))
681+
assert.Equal("/params/one/bar/:qux", e.Reverse("/params/:foo/bar/:qux", "one"))
682+
assert.Equal("/params/one/bar/two", e.Reverse("/params/:foo/bar/:qux", "one", "two"))
683+
assert.Equal("/params/one/bar/two/three", e.Reverse("/params/:foo/bar/:qux/*", "one", "two", "three"))
684+
}

0 commit comments

Comments
 (0)