...
Source file
src/goji.io/util_test.go
Documentation: goji.io
1 package goji
2
3 import (
4 "net/http"
5 "net/http/httptest"
6 "strings"
7
8 "goji.io/internal"
9 )
10
11 type boolPattern bool
12
13 func (b boolPattern) Match(r *http.Request) *http.Request {
14 if b {
15 return r
16 }
17 return nil
18 }
19
20 type testPattern struct {
21 index int
22 mark *int
23 methods []string
24 prefix string
25 }
26
27 func (t testPattern) Match(r *http.Request) *http.Request {
28 ctx := r.Context()
29 if t.index < *t.mark {
30 return nil
31 }
32 path := ctx.Value(internal.Path).(string)
33 if !strings.HasPrefix(path, t.prefix) {
34 return nil
35 }
36 if t.methods != nil {
37 if _, ok := t.HTTPMethods()[r.Method]; !ok {
38 return nil
39 }
40 }
41 return r
42 }
43
44 func (t testPattern) PathPrefix() string {
45 return t.prefix
46 }
47
48 func (t testPattern) HTTPMethods() map[string]struct{} {
49 if t.methods == nil {
50 return nil
51 }
52 m := make(map[string]struct{})
53 for _, method := range t.methods {
54 m[method] = struct{}{}
55 }
56 return m
57 }
58
59 type intHandler int
60
61 func (i intHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
62 }
63
64 func wr() (*httptest.ResponseRecorder, *http.Request) {
65 w := httptest.NewRecorder()
66 r, err := http.NewRequest("GET", "/", nil)
67 if err != nil {
68 panic(err)
69 }
70 return w, r
71 }
72
View as plain text