go test -race -run Test_Path_parseRoute
(t *testing.T)
| 18 | |
| 19 | // go test -race -run Test_Path_parseRoute |
| 20 | func Test_Path_parseRoute(t *testing.T) { |
| 21 | t.Parallel() |
| 22 | var rp routeParser |
| 23 | |
| 24 | rp = parseRoute("/shop/product/::filter/color::color/size::size", regexp.MustCompile) |
| 25 | require.Equal(t, routeParser{ |
| 26 | segs: []*routeSegment{ |
| 27 | {Const: "/shop/product/:", Length: 15}, |
| 28 | {IsParam: true, ParamName: "filter", ComparePart: "/color:", PartCount: 1}, |
| 29 | {Const: "/color:", Length: 7}, |
| 30 | {IsParam: true, ParamName: "color", ComparePart: "/size:", PartCount: 1}, |
| 31 | {Const: "/size:", Length: 6}, |
| 32 | {IsParam: true, ParamName: "size", IsLast: true}, |
| 33 | }, |
| 34 | params: []string{"filter", "color", "size"}, |
| 35 | }, rp) |
| 36 | |
| 37 | rp = parseRoute("/api/v1/:param/abc/*", regexp.MustCompile) |
| 38 | require.Equal(t, routeParser{ |
| 39 | segs: []*routeSegment{ |
| 40 | {Const: "/api/v1/", Length: 8}, |
| 41 | {IsParam: true, ParamName: "param", ComparePart: "/abc", PartCount: 1}, |
| 42 | {Const: "/abc/", Length: 5, HasOptionalSlash: true}, |
| 43 | {IsParam: true, ParamName: "*1", IsGreedy: true, IsOptional: true, IsLast: true}, |
| 44 | }, |
| 45 | params: []string{"param", "*1"}, |
| 46 | wildCardCount: 1, |
| 47 | }, rp) |
| 48 | |
| 49 | rp = parseRoute("/v1/some/resource/name\\:customVerb", regexp.MustCompile) |
| 50 | require.Equal(t, routeParser{ |
| 51 | segs: []*routeSegment{ |
| 52 | {Const: "/v1/some/resource/name:customVerb", Length: 33, IsLast: true}, |
| 53 | }, |
| 54 | params: nil, |
| 55 | }, rp) |
| 56 | |
| 57 | rp = parseRoute("/v1/some/resource/:name\\:customVerb", regexp.MustCompile) |
| 58 | require.Equal(t, routeParser{ |
| 59 | segs: []*routeSegment{ |
| 60 | {Const: "/v1/some/resource/", Length: 18}, |
| 61 | {IsParam: true, ParamName: "name", ComparePart: ":customVerb", PartCount: 1}, |
| 62 | {Const: ":customVerb", Length: 11, IsLast: true}, |
| 63 | }, |
| 64 | params: []string{"name"}, |
| 65 | }, rp) |
| 66 | |
| 67 | // heavy test with escaped characters |
| 68 | rp = parseRoute("/v1/some/resource/name\\\\:customVerb?\\?/:param/*", regexp.MustCompile) |
| 69 | require.Equal(t, routeParser{ |
| 70 | segs: []*routeSegment{ |
| 71 | {Const: "/v1/some/resource/name:customVerb??/", Length: 36}, |
| 72 | {IsParam: true, ParamName: "param", ComparePart: "/", PartCount: 1}, |
| 73 | {Const: "/", Length: 1, HasOptionalSlash: true}, |
| 74 | {IsParam: true, ParamName: "*1", IsGreedy: true, IsOptional: true, IsLast: true}, |
| 75 | }, |
| 76 | params: []string{"param", "*1"}, |
| 77 | wildCardCount: 1, |
nothing calls this directly
no test coverage detected