1
0
mirror of https://github.com/labstack/echo.git synced 2025-01-12 01:22:21 +02:00

Improved test cases

Signed-off-by: Vishal Rana <vr@labstack.com>
This commit is contained in:
Vishal Rana 2015-03-30 07:38:53 -07:00
parent e08b3f78e8
commit 8b800e12a2
2 changed files with 23 additions and 35 deletions

View File

@ -47,14 +47,14 @@ func (c *Context) Bind(i interface{}) bool {
return true return true
} }
// String writes status and string to the response. // String sends a text/plain response with status code.
func (c *Context) String(n int, s string) { func (c *Context) String(n int, s string) {
c.Response.Header().Set(HeaderContentType, MIMEText+"; charset=utf-8") c.Response.Header().Set(HeaderContentType, MIMEText+"; charset=utf-8")
c.Response.WriteHeader(n) c.Response.WriteHeader(n)
c.Response.Write([]byte(s)) c.Response.Write([]byte(s))
} }
// JSON writes status and JSON to the response. // JSON sends an application/json response with status code.
func (c *Context) JSON(n int, i interface{}) { func (c *Context) JSON(n int, i interface{}) {
enc := json.NewEncoder(c.Response) enc := json.NewEncoder(c.Response)
c.Response.Header().Set(HeaderContentType, MIMEJSON+"; charset=utf-8") c.Response.Header().Set(HeaderContentType, MIMEJSON+"; charset=utf-8")
@ -77,7 +77,7 @@ func (c *Context) Set(key string, val interface{}) {
c.store[key] = val c.store[key] = val
} }
// Redirect redirects the request using http.Redirect. // Redirect redirects the request using http.Redirect with status code.
func (c *Context) Redirect(n int, url string) { func (c *Context) Redirect(n int, url string) {
http.Redirect(c.Response, c.Request, url, n) http.Redirect(c.Response, c.Request, url, n)
} }

View File

@ -1,6 +1,7 @@
package echo package echo
import ( import (
"bytes"
"encoding/binary" "encoding/binary"
"encoding/json" "encoding/json"
"io" "io"
@ -54,70 +55,57 @@ func TestEchoStatic(t *testing.T) {
func TestEchoMiddleware(t *testing.T) { func TestEchoMiddleware(t *testing.T) {
e := New() e := New()
b := new(bytes.Buffer)
// func(*echo.Context) // func(*echo.Context)
e.Use(func(c *Context) { e.Use(func(c *Context) {
c.Request.Header.Set("e", "5") b.WriteString("a")
}) })
// func(echo.HandlerFunc) echo.HandlerFunc // func(echo.HandlerFunc) echo.HandlerFunc
e.Use(func(h HandlerFunc) HandlerFunc { e.Use(func(h HandlerFunc) HandlerFunc {
return HandlerFunc(func(c *Context) { return HandlerFunc(func(c *Context) {
c.Request.Header.Set("a", "1") b.WriteString("b")
h(c) h(c)
}) })
}) })
// http.HandlerFunc // http.HandlerFunc
e.Use(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { e.Use(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
r.Header.Set("b", "2") b.WriteString("c")
})) }))
// http.Handler // http.Handler
e.Use(http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { e.Use(http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
r.Header.Set("c", "3") b.WriteString("d")
}))) })))
// func(http.Handler) http.Handler // func(http.Handler) http.Handler
e.Use(func(http.Handler) http.Handler { e.Use(func(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
r.Header.Set("d", "4") b.WriteString("e")
h.ServeHTTP(w, r)
}) })
}) })
// func(http.ResponseWriter, *http.Request) // func(http.ResponseWriter, *http.Request)
e.Use(func(w http.ResponseWriter, r *http.Request) { e.Use(func(w http.ResponseWriter, r *http.Request) {
r.Header.Set("f", "6") b.WriteString("f")
}) })
// Route // Route
e.Get("/hello", func(c *Context) { e.Get("/hello", func(c *Context) {
if c.Request.Header.Get("a") != "1" {
t.Error("header a should be 1")
}
if c.Request.Header.Get("b") != "2" {
t.Error("header b should be 2")
}
if c.Request.Header.Get("c") != "3" {
t.Error("header c should be 3")
}
if c.Request.Header.Get("d") != "4" {
t.Error("header d should be 4")
}
if c.Request.Header.Get("e") != "5" {
t.Error("header e should be 5")
}
if c.Request.Header.Get("f") != "6" {
t.Error("header f should be 6")
}
c.String(200, "world") c.String(200, "world")
}) })
w := httptest.NewRecorder() w := httptest.NewRecorder()
r, _ := http.NewRequest("GET", "/hello", nil) r, _ := http.NewRequest("GET", "/hello", nil)
e.ServeHTTP(w, r) e.ServeHTTP(w, r)
if b.String() != "abcdef" {
t.Errorf("buffer should be abcdef, found %s", b.String())
}
if w.Body.String() != "world" { if w.Body.String() != "world" {
t.Errorf("body should be world") t.Error("body should be world")
} }
} }
@ -132,10 +120,10 @@ func TestEchoHandler(t *testing.T) {
r, _ := http.NewRequest("GET", "/1", nil) r, _ := http.NewRequest("GET", "/1", nil)
e.ServeHTTP(w, r) e.ServeHTTP(w, r)
if w.Body.String() != "1" { if w.Body.String() != "1" {
t.Errorf("body should be 1") t.Error("body should be 1")
} }
// http.Handler / http.HandlerFunc // http.Handler/http.HandlerFunc
e.Get("/2", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { e.Get("/2", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("2")) w.Write([]byte("2"))
})) }))
@ -143,7 +131,7 @@ func TestEchoHandler(t *testing.T) {
r, _ = http.NewRequest("GET", "/2", nil) r, _ = http.NewRequest("GET", "/2", nil)
e.ServeHTTP(w, r) e.ServeHTTP(w, r)
if w.Body.String() != "2" { if w.Body.String() != "2" {
t.Errorf("body should be 2") t.Error("body should be 2")
} }
// func(http.ResponseWriter, *http.Request) // func(http.ResponseWriter, *http.Request)
@ -154,7 +142,7 @@ func TestEchoHandler(t *testing.T) {
r, _ = http.NewRequest("GET", "/3", nil) r, _ = http.NewRequest("GET", "/3", nil)
e.ServeHTTP(w, r) e.ServeHTTP(w, r)
if w.Body.String() != "3" { if w.Body.String() != "3" {
t.Errorf("body should be 3") t.Error("body should be 3")
} }
} }
@ -162,14 +150,14 @@ func verifyUser(rd io.Reader, t *testing.T) {
var l int64 var l int64
err := binary.Read(rd, binary.BigEndian, &l) // Body length err := binary.Read(rd, binary.BigEndian, &l) // Body length
if err != nil { if err != nil {
t.Fatal(err) t.Error(err)
} }
bd := io.LimitReader(rd, l) // Body bd := io.LimitReader(rd, l) // Body
u2 := new(user) u2 := new(user)
dec := json.NewDecoder(bd) dec := json.NewDecoder(bd)
err = dec.Decode(u2) err = dec.Decode(u2)
if err != nil { if err != nil {
t.Fatal(err) t.Error(err)
} }
if u2.ID != u.ID { if u2.ID != u.ID {
t.Errorf("user id should be %s, found %s", u.ID, u2.ID) t.Errorf("user id should be %s, found %s", u.ID, u2.ID)