aboutsummaryrefslogtreecommitdiff
path: root/vendor/src/github.com/alexedwards/stack/stack_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/src/github.com/alexedwards/stack/stack_test.go')
-rw-r--r--vendor/src/github.com/alexedwards/stack/stack_test.go126
1 files changed, 126 insertions, 0 deletions
diff --git a/vendor/src/github.com/alexedwards/stack/stack_test.go b/vendor/src/github.com/alexedwards/stack/stack_test.go
new file mode 100644
index 0000000..28aa0ae
--- /dev/null
+++ b/vendor/src/github.com/alexedwards/stack/stack_test.go
@@ -0,0 +1,126 @@
+package stack
+
+import (
+ "fmt"
+ "io/ioutil"
+ "log"
+ "net/http"
+ "net/http/httptest"
+ "testing"
+)
+
+func assertEquals(t *testing.T, e interface{}, o interface{}) {
+ if e != o {
+ t.Errorf("\n...expected = %v\n...obtained = %v", e, o)
+ }
+}
+
+func serveAndRequest(h http.Handler) string {
+ ts := httptest.NewServer(h)
+ defer ts.Close()
+ res, err := http.Get(ts.URL)
+ if err != nil {
+ log.Fatal(err)
+ }
+ resBody, err := ioutil.ReadAll(res.Body)
+ res.Body.Close()
+ if err != nil {
+ log.Fatal(err)
+ }
+ return string(resBody)
+}
+
+func bishMiddleware(ctx *Context, next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ctx.Put("bish", "bash")
+ fmt.Fprintf(w, "bishMiddleware>")
+ next.ServeHTTP(w, r)
+ })
+}
+
+func flipMiddleware(ctx *Context, next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintf(w, "flipMiddleware>")
+ next.ServeHTTP(w, r)
+ })
+}
+
+func wobbleMiddleware(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintf(w, "wobbleMiddleware>")
+ next.ServeHTTP(w, r)
+ })
+}
+
+func bishHandler(ctx *Context, w http.ResponseWriter, r *http.Request) {
+ val := ctx.Get("bish")
+ fmt.Fprintf(w, "bishHandler [bish=%v]", val)
+}
+
+func flipHandler(ctx *Context, w http.ResponseWriter, r *http.Request) {
+ valb := ctx.Get("bish")
+ valf := ctx.Get("flip")
+ fmt.Fprintf(w, "flipHandler [bish=%v,flip=%v]", valb, valf)
+}
+
+func TestNew(t *testing.T) {
+ st := New(bishMiddleware, flipMiddleware).Then(bishHandler)
+ res := serveAndRequest(st)
+ assertEquals(t, "bishMiddleware>flipMiddleware>bishHandler [bish=bash]", res)
+}
+
+func TestAppend(t *testing.T) {
+ st := New(bishMiddleware).Append(flipMiddleware, flipMiddleware).Then(bishHandler)
+ res := serveAndRequest(st)
+ assertEquals(t, "bishMiddleware>flipMiddleware>flipMiddleware>bishHandler [bish=bash]", res)
+}
+
+func TestAppendDoesNotMutate(t *testing.T) {
+ st1 := New(bishMiddleware, flipMiddleware)
+ st2 := st1.Append(flipMiddleware, flipMiddleware)
+ res := serveAndRequest(st1.Then(bishHandler))
+ assertEquals(t, "bishMiddleware>flipMiddleware>bishHandler [bish=bash]", res)
+ res = serveAndRequest(st2.Then(bishHandler))
+ assertEquals(t, "bishMiddleware>flipMiddleware>flipMiddleware>flipMiddleware>bishHandler [bish=bash]", res)
+}
+
+func TestThen(t *testing.T) {
+ chf := func(ctx *Context, w http.ResponseWriter, r *http.Request) {
+ fmt.Fprint(w, "An anonymous ContextHandlerFunc")
+ }
+ st := New().Then(chf)
+ res := serveAndRequest(st)
+ assertEquals(t, "An anonymous ContextHandlerFunc", res)
+}
+
+func TestThenHandler(t *testing.T) {
+ st := New().ThenHandler(http.NotFoundHandler())
+ res := serveAndRequest(st)
+ assertEquals(t, "404 page not found\n", res)
+}
+
+func TestThenHandlerFunc(t *testing.T) {
+ hf := func(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprint(w, "An anonymous HandlerFunc")
+ }
+ st := New().ThenHandlerFunc(hf)
+ res := serveAndRequest(st)
+ assertEquals(t, "An anonymous HandlerFunc", res)
+}
+
+func TestMixedMiddleware(t *testing.T) {
+ st := New(bishMiddleware, Adapt(wobbleMiddleware), flipMiddleware).Then(bishHandler)
+ res := serveAndRequest(st)
+ assertEquals(t, "bishMiddleware>wobbleMiddleware>flipMiddleware>bishHandler [bish=bash]", res)
+}
+
+func TestInject(t *testing.T) {
+ st := New(flipMiddleware).Then(flipHandler)
+ st2 := Inject(st, "bish", "boop")
+
+ res := serveAndRequest(st2)
+ assertEquals(t, "flipMiddleware>flipHandler [bish=boop,flip=<nil>]", res)
+
+ res = serveAndRequest(st)
+ assertEquals(t, "flipMiddleware>flipHandler [bish=<nil>,flip=<nil>]", res)
+}