Router a good
This commit is contained in:
118
router_test.go
Normal file
118
router_test.go
Normal file
@@ -0,0 +1,118 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRouter(t *testing.T) {
|
||||
rt := New()
|
||||
|
||||
paths := []string{
|
||||
"/not/found",
|
||||
"/hello",
|
||||
"/world",
|
||||
"/hello/world",
|
||||
"/hello/{}/other",
|
||||
}
|
||||
|
||||
for i, p := range paths {
|
||||
if i == 0 {
|
||||
continue
|
||||
}
|
||||
if err := rt.Add(p, getHandler(p)); err != nil {
|
||||
t.Errorf("router cannot add %v: %v", p, err)
|
||||
}
|
||||
}
|
||||
if err := rt.Add(paths[len(paths)-1], getHandler(paths[len(paths)-1])); err == nil {
|
||||
t.Errorf("router can re-add %v: %v", paths[len(paths)-1], err)
|
||||
}
|
||||
|
||||
for i, p := range paths {
|
||||
w := httptest.NewRecorder()
|
||||
gpath := strings.Replace(p, "{}", "seq", -1)
|
||||
if req, err := http.NewRequest("GET", gpath[1:]+"/", nil); err != nil {
|
||||
t.Fatalf("cannot make http req: %v", err)
|
||||
} else {
|
||||
rt.ServeHTTP(w, req)
|
||||
b, err := ioutil.ReadAll(w.Body)
|
||||
if i > 0 && (err != nil || w.Code != 200 || string(b) != p) {
|
||||
t.Errorf("did not check %v: %v %v %q %q", p, err, w.Code, b, p)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getHandler(s string) func(http.ResponseWriter, *http.Request) {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Fprint(w, s)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParams(t *testing.T) {
|
||||
var s string
|
||||
cases := []struct {
|
||||
actual int
|
||||
put string
|
||||
want int
|
||||
assign *string
|
||||
err bool
|
||||
}{
|
||||
{
|
||||
put: "a",
|
||||
assign: &s,
|
||||
actual: 0,
|
||||
want: 1,
|
||||
err: true,
|
||||
},
|
||||
{
|
||||
put: "a",
|
||||
assign: &s,
|
||||
actual: 1,
|
||||
want: 0,
|
||||
err: true,
|
||||
},
|
||||
{
|
||||
put: "a",
|
||||
assign: &s,
|
||||
actual: 1,
|
||||
want: 1,
|
||||
err: false,
|
||||
},
|
||||
{
|
||||
put: "i",
|
||||
assign: nil,
|
||||
actual: 1,
|
||||
want: 1,
|
||||
err: true,
|
||||
},
|
||||
{
|
||||
put: "",
|
||||
assign: &s,
|
||||
actual: 1,
|
||||
want: 1,
|
||||
err: true,
|
||||
},
|
||||
}
|
||||
|
||||
for z, c := range cases {
|
||||
r, _ := http.NewRequest("GET", "localhost:123", nil)
|
||||
actual := []string{}
|
||||
for i := 0; i < c.actual; i++ {
|
||||
actual = append(actual, c.put)
|
||||
}
|
||||
r.Header[WildcardHeader] = actual
|
||||
want := []*string{}
|
||||
for i := 0; i < c.want; i++ {
|
||||
want = append(want, c.assign)
|
||||
}
|
||||
err := Params(r, want...)
|
||||
if (err != nil) != c.err {
|
||||
t.Errorf("[%d] get params didn't find err %v when %v vs %v: %v", z, c.err, c.actual, c.want, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user