119 lines
2.2 KiB
Go
Executable File
119 lines
2.2 KiB
Go
Executable File
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)
|
|
}
|
|
}
|
|
}
|