Merge cb7fde2f86c8b2ee82d8484fd6a221a29d2ab86d into 76ad15ab32d000115cb7622a8317d7425dfc039c

This commit is contained in:
Eason Lin 2017-11-10 12:28:28 +00:00 committed by GitHub
commit 5d00b8d0ad
3 changed files with 29 additions and 9 deletions

View File

@ -239,7 +239,26 @@ func TestRouteParamsByName(t *testing.T) {
assert.Equal(t, w.Code, 200)
assert.Equal(t, name, "john")
assert.Equal(t, lastName, "smith")
assert.Equal(t, wild, "/is/super/great")
assert.Equal(t, wild, "is/super/great")
}
func TestRouteEmptyWildcardParam(t *testing.T) {
name := "A"
wild := "A"
router := New()
router.GET("/test/:name/*wild", func(c *Context) {
name = c.Params.ByName("name")
wild = c.Params.ByName("wild")
})
// RUN
w := performRequest(router, "GET", "/test/john/")
assert.Equal(t, 200, w.Code)
assert.Equal(t, "john", name)
assert.Empty(t, wild)
w = performRequest(router, "GET", "/test/john")
assert.Equal(t, 404, w.Code)
}
// TestHandleStaticFile - ensure the static file handles properly

View File

@ -448,6 +448,7 @@ walk: // Outer loop for walking the tree
i := len(p)
p = p[:i+1] // expand slice within preallocated capacity
p[i].Key = n.path[2:]
path = path[1:] // not include the slash
if unescape {
var err error
if p[i].Value, err = url.QueryUnescape(path); err != nil {

View File

@ -186,14 +186,14 @@ func TestTreeWildcard(t *testing.T) {
{"/cmd/test/", false, "/cmd/:tool/", Params{Param{"tool", "test"}}},
{"/cmd/test", true, "", Params{Param{"tool", "test"}}},
{"/cmd/test/3", false, "/cmd/:tool/:sub", Params{Param{"tool", "test"}, Param{"sub", "3"}}},
{"/src/", false, "/src/*filepath", Params{Param{"filepath", "/"}}},
{"/src/some/file.png", false, "/src/*filepath", Params{Param{"filepath", "/some/file.png"}}},
{"/src/", false, "/src/*filepath", Params{Param{"filepath", ""}}},
{"/src/some/file.png", false, "/src/*filepath", Params{Param{"filepath", "some/file.png"}}},
{"/search/", false, "/search/", nil},
{"/search/someth!ng+in+ünìcodé", false, "/search/:query", Params{Param{"query", "someth!ng+in+ünìcodé"}}},
{"/search/someth!ng+in+ünìcodé/", true, "", Params{Param{"query", "someth!ng+in+ünìcodé"}}},
{"/user_gopher", false, "/user_:name", Params{Param{"name", "gopher"}}},
{"/user_gopher/about", false, "/user_:name/about", Params{Param{"name", "gopher"}}},
{"/files/js/inc/framework.js", false, "/files/:dir/*filepath", Params{Param{"dir", "js"}, Param{"filepath", "/inc/framework.js"}}},
{"/files/js/inc/framework.js", false, "/files/:dir/*filepath", Params{Param{"dir", "js"}, Param{"filepath", "inc/framework.js"}}},
{"/info/gordon/public", false, "/info/:user/public", Params{Param{"user", "gordon"}}},
{"/info/gordon/project/go", false, "/info/:user/project/:project", Params{Param{"user", "gordon"}, Param{"project", "go"}}},
})
@ -225,10 +225,10 @@ func TestUnescapeParameters(t *testing.T) {
{"/", false, "/", nil},
{"/cmd/test/", false, "/cmd/:tool/", Params{Param{"tool", "test"}}},
{"/cmd/test", true, "", Params{Param{"tool", "test"}}},
{"/src/some/file.png", false, "/src/*filepath", Params{Param{"filepath", "/some/file.png"}}},
{"/src/some/file+test.png", false, "/src/*filepath", Params{Param{"filepath", "/some/file test.png"}}},
{"/src/some/file++++%%%%test.png", false, "/src/*filepath", Params{Param{"filepath", "/some/file++++%%%%test.png"}}},
{"/src/some/file%2Ftest.png", false, "/src/*filepath", Params{Param{"filepath", "/some/file/test.png"}}},
{"/src/some/file.png", false, "/src/*filepath", Params{Param{"filepath", "some/file.png"}}},
{"/src/some/file+test.png", false, "/src/*filepath", Params{Param{"filepath", "some/file test.png"}}},
{"/src/some/file++++%%%%test.png", false, "/src/*filepath", Params{Param{"filepath", "some/file++++%%%%test.png"}}},
{"/src/some/file%2Ftest.png", false, "/src/*filepath", Params{Param{"filepath", "some/file/test.png"}}},
{"/search/someth!ng+in+ünìcodé", false, "/search/:query", Params{Param{"query", "someth!ng in ünìcodé"}}},
{"/info/gordon/project/go", false, "/info/:user/project/:project", Params{Param{"user", "gordon"}, Param{"project", "go"}}},
{"/info/slash%2Fgordon", false, "/info/:user", Params{Param{"user", "slash/gordon"}}},
@ -344,7 +344,7 @@ func TestTreeDupliatePath(t *testing.T) {
checkRequests(t, tree, testRequests{
{"/", false, "/", nil},
{"/doc/", false, "/doc/", nil},
{"/src/some/file.png", false, "/src/*filepath", Params{Param{"filepath", "/some/file.png"}}},
{"/src/some/file.png", false, "/src/*filepath", Params{Param{"filepath", "some/file.png"}}},
{"/search/someth!ng+in+ünìcodé", false, "/search/:query", Params{Param{"query", "someth!ng+in+ünìcodé"}}},
{"/user_gopher", false, "/user_:name", Params{Param{"name", "gopher"}}},
})