diff --git a/README.md b/README.md
index 49a2b21..0b87f3c 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
#Gin Web Framework
-
+
[![Build Status](https://travis-ci.org/gin-gonic/gin.svg)](https://travis-ci.org/gin-gonic/gin)
[![Coverage Status](https://coveralls.io/repos/gin-gonic/gin/badge.svg?branch=master)](https://coveralls.io/r/gin-gonic/gin?branch=master)
[![GoDoc](https://godoc.org/github.com/gin-gonic/gin?status.svg)](https://godoc.org/github.com/gin-gonic/gin)
@@ -660,7 +660,7 @@ There be some ways.
We can using fvbock/endless to replace the default ListenAndServe
-Refer the issue for more details:
+Refer the issue for more details:
https://github.com/gin-gonic/gin/issues/296
diff --git a/context.go b/context.go
index 532152e..5b45758 100644
--- a/context.go
+++ b/context.go
@@ -185,7 +185,8 @@ func (c *Context) MustGet(key string) interface{} {
// Query is a shortcut for c.Request.URL.Query().Get(key)
// It is used to return the url query values.
-// ?id=1234&name=Manu
+// It returns an empty string ("") when the value does not exist.
+// /path?id=1234&name=Manu
// c.Query("id") == "1234"
// c.Query("name") == "Manu"
// c.Query("wtf") == ""
@@ -195,12 +196,18 @@ func (c *Context) Query(key string) string {
}
// PostForm is a shortcut for c.Request.PostFormValue(key)
+// It returns an empty string ("") when the value does not exist.
func (c *Context) PostForm(key string) string {
value, _ := c.postForm(key)
return value
}
-// Param is a shortcut for c.Params.ByName(key)
+// Param returns the value of the URL param.
+// It is a shortcut for c.Params.ByName(key)
+// router.GET("/user/:id", func(c *gin.Context) {
+// // a GET request to /user/john
+// id := c.Param("id") // id == "john"
+// })
func (c *Context) Param(key string) string {
return c.Params.ByName(key)
}
@@ -214,11 +221,9 @@ func (c *Context) DefaultPostForm(key, defaultValue string) string {
// DefaultQuery returns the keyed url query value if it exists, othewise it returns the
// specified defaultValue.
-// ```
-// /?name=Manu
-// c.DefaultQuery("name", "unknown") == "Manu"
-// c.DefaultQuery("id", "none") == "none"
-// ```
+// //?name=Manu
+// c.DefaultQuery("name", "unknown") == "Manu"
+// c.DefaultQuery("id", "none") == "none"
func (c *Context) DefaultQuery(key, defaultValue string) string {
if value, ok := c.query(key); ok {
return value
@@ -250,8 +255,8 @@ func (c *Context) postForm(key string) (string, bool) {
// Bind checks the Content-Type to select a binding engine automatically,
// Depending the "Content-Type" header different bindings are used:
-// "application/json" --> JSON binding
-// "application/xml" --> XML binding
+// "application/json" --> JSON binding
+// "application/xml" --> XML binding
// otherwise --> returns an error
// If Parses the request's body as JSON if Content-Type == "application/json" using JSON or XML as a JSON input.
// It decodes the json payload into the struct specified as a pointer.
diff --git a/context_test.go b/context_test.go
index 8232af9..1eeabf3 100644
--- a/context_test.go
+++ b/context_test.go
@@ -153,7 +153,7 @@ func TestContextHandlerName(t *testing.T) {
c, _, _ := CreateTestContext()
c.handlers = HandlersChain{func(c *Context) {}, handlerNameTest}
- assert.Equal(t, c.HandlerName(), "github.com/gin-gonic/gin.handlerNameTest")
+ assert.Regexp(t, "^(.*/vendor/)?github.com/gin-gonic/gin.handlerNameTest$", c.HandlerName())
}
func handlerNameTest(c *Context) {
diff --git a/debug_test.go b/debug_test.go
index 679c32c..deceaa6 100644
--- a/debug_test.go
+++ b/debug_test.go
@@ -63,7 +63,7 @@ func TestDebugPrintRoutes(t *testing.T) {
defer teardown()
debugPrintRoute("GET", "/path/to/route/:param", HandlersChain{func(c *Context) {}, handlerNameTest})
- assert.Equal(t, w.String(), "[GIN-debug] GET /path/to/route/:param --> github.com/gin-gonic/gin.handlerNameTest (2 handlers)\n")
+ assert.Regexp(t, `^\[GIN-debug\] GET /path/to/route/:param --> (.*/vendor/)?github.com/gin-gonic/gin.handlerNameTest \(2 handlers\)\n$`, w.String())
}
func setup(w io.Writer) {
diff --git a/errors.go b/errors.go
index e829c88..bced19a 100644
--- a/errors.go
+++ b/errors.go
@@ -109,13 +109,11 @@ func (a errorMsgs) Last() *Error {
}
// Returns an array will all the error messages.
-// Example
-// ```
-// c.Error(errors.New("first"))
-// c.Error(errors.New("second"))
-// c.Error(errors.New("third"))
-// c.Errors.Errors() // == []string{"first", "second", "third"}
-// ``
+// Example:
+// c.Error(errors.New("first"))
+// c.Error(errors.New("second"))
+// c.Error(errors.New("third"))
+// c.Errors.Errors() // == []string{"first", "second", "third"}
func (a errorMsgs) Errors() []string {
if len(a) == 0 {
return nil
diff --git a/gin_test.go b/gin_test.go
index b3b0eb6..15f480e 100644
--- a/gin_test.go
+++ b/gin_test.go
@@ -214,32 +214,42 @@ func TestListOfRoutes(t *testing.T) {
list := router.Routes()
assert.Len(t, list, 7)
- assert.Contains(t, list, RouteInfo{
+ assertRoutePresent(t, list, RouteInfo{
Method: "GET",
Path: "/favicon.ico",
- Handler: "github.com/gin-gonic/gin.handler_test1",
+ Handler: "^(.*/vendor/)?github.com/gin-gonic/gin.handler_test1$",
})
- assert.Contains(t, list, RouteInfo{
+ assertRoutePresent(t, list, RouteInfo{
Method: "GET",
Path: "/",
- Handler: "github.com/gin-gonic/gin.handler_test1",
+ Handler: "^(.*/vendor/)?github.com/gin-gonic/gin.handler_test1$",
})
- assert.Contains(t, list, RouteInfo{
+ assertRoutePresent(t, list, RouteInfo{
Method: "GET",
Path: "/users/",
- Handler: "github.com/gin-gonic/gin.handler_test2",
+ Handler: "^(.*/vendor/)?github.com/gin-gonic/gin.handler_test2$",
})
- assert.Contains(t, list, RouteInfo{
+ assertRoutePresent(t, list, RouteInfo{
Method: "GET",
Path: "/users/:id",
- Handler: "github.com/gin-gonic/gin.handler_test1",
+ Handler: "^(.*/vendor/)?github.com/gin-gonic/gin.handler_test1$",
})
- assert.Contains(t, list, RouteInfo{
+ assertRoutePresent(t, list, RouteInfo{
Method: "POST",
Path: "/users/:id",
- Handler: "github.com/gin-gonic/gin.handler_test2",
+ Handler: "^(.*/vendor/)?github.com/gin-gonic/gin.handler_test2$",
})
}
+func assertRoutePresent(t *testing.T, gotRoutes RoutesInfo, wantRoute RouteInfo) {
+ for _, gotRoute := range gotRoutes {
+ if gotRoute.Path == wantRoute.Path && gotRoute.Method == wantRoute.Method {
+ assert.Regexp(t, wantRoute.Path, gotRoute.Path)
+ return
+ }
+ }
+ t.Errorf("route not found: %v", wantRoute)
+}
+
func handler_test1(c *Context) {}
func handler_test2(c *Context) {}
diff --git a/logo.jpg b/logo.jpg
new file mode 100644
index 0000000..bb51852
Binary files /dev/null and b/logo.jpg differ
diff --git a/mode.go b/mode.go
index 4e2ba46..bf9e995 100644
--- a/mode.go
+++ b/mode.go
@@ -29,10 +29,8 @@ const (
// Note that both Logger and Recovery provides custom ways to configure their
// output io.Writer.
// To support coloring in Windows use:
-// ```
-// import "github.com/mattn/go-colorable"
-// gin.DefaultWriter = colorable.NewColorableStdout()
-// ```
+// import "github.com/mattn/go-colorable"
+// gin.DefaultWriter = colorable.NewColorableStdout()
var DefaultWriter io.Writer = os.Stdout
var DefaultErrorWriter io.Writer = os.Stderr
diff --git a/recovery.go b/recovery.go
index 67c504c..c502f35 100644
--- a/recovery.go
+++ b/recovery.go
@@ -23,7 +23,7 @@ var (
// Recovery returns a middleware that recovers from any panics and writes a 500 if there was one.
func Recovery() HandlerFunc {
- return RecoveryWithWriter(DefaultWriter)
+ return RecoveryWithWriter(DefaultErrorWriter)
}
func RecoveryWithWriter(out io.Writer) HandlerFunc {
diff --git a/utils_test.go b/utils_test.go
index 11a5b68..599172f 100644
--- a/utils_test.go
+++ b/utils_test.go
@@ -78,7 +78,7 @@ func TestFilterFlags(t *testing.T) {
}
func TestFunctionName(t *testing.T) {
- assert.Equal(t, nameOfFunction(somefunction), "github.com/gin-gonic/gin.somefunction")
+ assert.Regexp(t, `^(.*/vendor/)?github.com/gin-gonic/gin.somefunction$`, nameOfFunction(somefunction))
}
func somefunction() {