2015-03-27 23:35:15 +02:00
|
|
|
package echo
|
|
|
|
|
|
|
|
import (
|
2015-03-30 16:38:53 +02:00
|
|
|
"bytes"
|
2015-03-27 23:35:15 +02:00
|
|
|
"encoding/binary"
|
|
|
|
"encoding/json"
|
|
|
|
"io"
|
|
|
|
"net/http"
|
|
|
|
"net/http/httptest"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
type (
|
|
|
|
user struct {
|
|
|
|
ID string
|
|
|
|
Name string
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
var u = user{
|
|
|
|
ID: "1",
|
|
|
|
Name: "Joe",
|
|
|
|
}
|
|
|
|
|
2015-03-30 08:35:08 +02:00
|
|
|
// TODO: Fix me
|
2015-03-27 23:35:15 +02:00
|
|
|
func TestEchoMaxParam(t *testing.T) {
|
2015-03-30 08:35:08 +02:00
|
|
|
e := New()
|
|
|
|
e.MaxParam(8)
|
|
|
|
if e.maxParam != 8 {
|
|
|
|
t.Errorf("max param should be 8, found %d", e.maxParam)
|
2015-03-27 23:35:15 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEchoIndex(t *testing.T) {
|
2015-03-30 08:35:08 +02:00
|
|
|
e := New()
|
|
|
|
e.Index("example/public/index.html")
|
2015-03-27 23:35:15 +02:00
|
|
|
w := httptest.NewRecorder()
|
2015-03-30 05:44:55 +02:00
|
|
|
r, _ := http.NewRequest("GET", "/", nil)
|
2015-03-30 08:35:08 +02:00
|
|
|
e.ServeHTTP(w, r)
|
2015-03-27 23:35:15 +02:00
|
|
|
if w.Code != 200 {
|
|
|
|
t.Errorf("status code should be 200, found %d", w.Code)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEchoStatic(t *testing.T) {
|
2015-03-30 08:35:08 +02:00
|
|
|
e := New()
|
|
|
|
e.Static("/js", "example/public/js")
|
2015-03-27 23:35:15 +02:00
|
|
|
w := httptest.NewRecorder()
|
2015-03-30 05:44:55 +02:00
|
|
|
r, _ := http.NewRequest("GET", "/js/main.js", nil)
|
2015-03-30 08:35:08 +02:00
|
|
|
e.ServeHTTP(w, r)
|
2015-03-27 23:35:15 +02:00
|
|
|
if w.Code != 200 {
|
|
|
|
t.Errorf("status code should be 200, found %d", w.Code)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-03-30 05:44:55 +02:00
|
|
|
func TestEchoMiddleware(t *testing.T) {
|
2015-03-30 08:35:08 +02:00
|
|
|
e := New()
|
2015-03-30 16:38:53 +02:00
|
|
|
b := new(bytes.Buffer)
|
2015-03-30 05:44:55 +02:00
|
|
|
|
2015-03-30 08:35:08 +02:00
|
|
|
// func(*echo.Context)
|
|
|
|
e.Use(func(c *Context) {
|
2015-03-30 16:38:53 +02:00
|
|
|
b.WriteString("a")
|
2015-03-30 08:35:08 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
// func(echo.HandlerFunc) echo.HandlerFunc
|
|
|
|
e.Use(func(h HandlerFunc) HandlerFunc {
|
2015-03-30 05:44:55 +02:00
|
|
|
return HandlerFunc(func(c *Context) {
|
2015-03-30 16:38:53 +02:00
|
|
|
b.WriteString("b")
|
2015-03-30 05:44:55 +02:00
|
|
|
h(c)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
// http.HandlerFunc
|
2015-03-30 08:35:08 +02:00
|
|
|
e.Use(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
2015-03-30 16:38:53 +02:00
|
|
|
b.WriteString("c")
|
2015-03-30 05:44:55 +02:00
|
|
|
}))
|
|
|
|
|
|
|
|
// http.Handler
|
2015-03-30 08:35:08 +02:00
|
|
|
e.Use(http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
2015-03-30 16:38:53 +02:00
|
|
|
b.WriteString("d")
|
2015-03-30 05:44:55 +02:00
|
|
|
})))
|
|
|
|
|
|
|
|
// func(http.Handler) http.Handler
|
2015-03-30 16:38:53 +02:00
|
|
|
e.Use(func(h http.Handler) http.Handler {
|
2015-03-30 05:44:55 +02:00
|
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
2015-03-30 16:38:53 +02:00
|
|
|
b.WriteString("e")
|
|
|
|
h.ServeHTTP(w, r)
|
2015-03-30 05:44:55 +02:00
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2015-03-30 08:35:08 +02:00
|
|
|
// func(http.ResponseWriter, *http.Request)
|
|
|
|
e.Use(func(w http.ResponseWriter, r *http.Request) {
|
2015-03-30 16:38:53 +02:00
|
|
|
b.WriteString("f")
|
2015-03-30 08:35:08 +02:00
|
|
|
})
|
|
|
|
|
2015-03-30 05:44:55 +02:00
|
|
|
// Route
|
2015-03-30 08:35:08 +02:00
|
|
|
e.Get("/hello", func(c *Context) {
|
|
|
|
c.String(200, "world")
|
2015-03-30 05:44:55 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
w := httptest.NewRecorder()
|
2015-03-30 08:35:08 +02:00
|
|
|
r, _ := http.NewRequest("GET", "/hello", nil)
|
|
|
|
e.ServeHTTP(w, r)
|
2015-03-30 16:38:53 +02:00
|
|
|
if b.String() != "abcdef" {
|
|
|
|
t.Errorf("buffer should be abcdef, found %s", b.String())
|
|
|
|
}
|
2015-03-30 08:35:08 +02:00
|
|
|
if w.Body.String() != "world" {
|
2015-03-30 16:38:53 +02:00
|
|
|
t.Error("body should be world")
|
2015-03-30 08:35:08 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEchoHandler(t *testing.T) {
|
|
|
|
e := New()
|
|
|
|
|
|
|
|
// func(*echo.Context)
|
|
|
|
e.Get("/1", func(c *Context) {
|
|
|
|
c.String(http.StatusOK, "1")
|
|
|
|
})
|
|
|
|
w := httptest.NewRecorder()
|
|
|
|
r, _ := http.NewRequest("GET", "/1", nil)
|
|
|
|
e.ServeHTTP(w, r)
|
|
|
|
if w.Body.String() != "1" {
|
2015-03-30 16:38:53 +02:00
|
|
|
t.Error("body should be 1")
|
2015-03-30 08:35:08 +02:00
|
|
|
}
|
|
|
|
|
2015-03-30 16:38:53 +02:00
|
|
|
// http.Handler/http.HandlerFunc
|
2015-03-30 08:35:08 +02:00
|
|
|
e.Get("/2", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
w.Write([]byte("2"))
|
|
|
|
}))
|
|
|
|
w = httptest.NewRecorder()
|
|
|
|
r, _ = http.NewRequest("GET", "/2", nil)
|
|
|
|
e.ServeHTTP(w, r)
|
|
|
|
if w.Body.String() != "2" {
|
2015-03-30 16:38:53 +02:00
|
|
|
t.Error("body should be 2")
|
2015-03-30 08:35:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// func(http.ResponseWriter, *http.Request)
|
|
|
|
e.Get("/3", func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
w.Write([]byte("3"))
|
|
|
|
})
|
|
|
|
w = httptest.NewRecorder()
|
|
|
|
r, _ = http.NewRequest("GET", "/3", nil)
|
|
|
|
e.ServeHTTP(w, r)
|
|
|
|
if w.Body.String() != "3" {
|
2015-03-30 16:38:53 +02:00
|
|
|
t.Error("body should be 3")
|
2015-03-30 08:35:08 +02:00
|
|
|
}
|
2015-03-30 05:44:55 +02:00
|
|
|
}
|
|
|
|
|
2015-03-27 23:35:15 +02:00
|
|
|
func verifyUser(rd io.Reader, t *testing.T) {
|
|
|
|
var l int64
|
|
|
|
err := binary.Read(rd, binary.BigEndian, &l) // Body length
|
|
|
|
if err != nil {
|
2015-03-30 16:38:53 +02:00
|
|
|
t.Error(err)
|
2015-03-27 23:35:15 +02:00
|
|
|
}
|
|
|
|
bd := io.LimitReader(rd, l) // Body
|
|
|
|
u2 := new(user)
|
|
|
|
dec := json.NewDecoder(bd)
|
|
|
|
err = dec.Decode(u2)
|
|
|
|
if err != nil {
|
2015-03-30 16:38:53 +02:00
|
|
|
t.Error(err)
|
2015-03-27 23:35:15 +02:00
|
|
|
}
|
|
|
|
if u2.ID != u.ID {
|
|
|
|
t.Errorf("user id should be %s, found %s", u.ID, u2.ID)
|
|
|
|
}
|
|
|
|
if u2.Name != u.Name {
|
|
|
|
t.Errorf("user name should be %s, found %s", u.Name, u2.Name)
|
|
|
|
}
|
|
|
|
}
|