You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.5 KiB
87 lines
2.5 KiB
package main |
|
|
|
import ( |
|
"reflect" |
|
"testing" |
|
) |
|
|
|
func TestNoParameters(t *testing.T) { |
|
path := "/test/noparams" |
|
m := buildPathVars(path) |
|
if !reflect.DeepEqual(m, map[string]*string{}) { |
|
t.Fatalf("Map should be empty") |
|
} |
|
} |
|
|
|
func TestSingleParam(t *testing.T) { |
|
path := "/test/{message.id}" |
|
m := buildPathVars(path) |
|
if !reflect.DeepEqual(len(m), 1) { |
|
t.Fatalf("len(m) not is 1") |
|
} |
|
if m["message.id"] != nil { |
|
t.Fatalf(`m["message.id"] should be empty`) |
|
} |
|
} |
|
|
|
func TestTwoParametersReplacement(t *testing.T) { |
|
path := "/test/{message.id}/{message.name=messages/*}" |
|
m := buildPathVars(path) |
|
if len(m) != 2 { |
|
t.Fatal("len(m) should be 2") |
|
} |
|
if m["message.id"] != nil { |
|
t.Fatal(`m["message.id"] should be nil`) |
|
} |
|
if m["message.name"] == nil { |
|
t.Fatal(`m["message.name"] should not be nil`) |
|
} |
|
if *m["message.name"] != "messages/*" { |
|
t.Fatal(`m["message.name"] should be "messages/*"`) |
|
} |
|
} |
|
|
|
func TestNoReplacePath(t *testing.T) { |
|
path := "/test/{message.id=test}" |
|
if !reflect.DeepEqual(replacePath("message.id", "test", path), "/test/{message.id:test}") { |
|
t.Fatal(`replacePath("message.id", "test", path) should be "/test/{message.id:test}"`) |
|
} |
|
path = "/test/{message.id=test/*}" |
|
if !reflect.DeepEqual(replacePath("message.id", "test/*", path), "/test/{message.id:test/.*}") { |
|
t.Fatal(`replacePath("message.id", "test/*", path) should be "/test/{message.id:test/.*}"`) |
|
} |
|
} |
|
|
|
func TestReplacePath(t *testing.T) { |
|
path := "/test/{message.id}/{message.name=messages/*}" |
|
newPath := replacePath("message.name", "messages/*", path) |
|
if !reflect.DeepEqual("/test/{message.id}/{message.name:messages/.*}", newPath) { |
|
t.Fatal(`replacePath("message.name", "messages/*", path) should be "/test/{message.id}/{message.name:messages/.*}"`) |
|
} |
|
} |
|
|
|
func TestIteration(t *testing.T) { |
|
path := "/test/{message.id}/{message.name=messages/*}" |
|
vars := buildPathVars(path) |
|
for v, s := range vars { |
|
if s != nil { |
|
path = replacePath(v, *s, path) |
|
} |
|
} |
|
if !reflect.DeepEqual("/test/{message.id}/{message.name:messages/.*}", path) { |
|
t.Fatal(`replacePath("message.name", "messages/*", path) should be "/test/{message.id}/{message.name:messages/.*}"`) |
|
} |
|
} |
|
|
|
func TestIterationMiddle(t *testing.T) { |
|
path := "/test/{message.name=messages/*}/books" |
|
vars := buildPathVars(path) |
|
for v, s := range vars { |
|
if s != nil { |
|
path = replacePath(v, *s, path) |
|
} |
|
} |
|
if !reflect.DeepEqual("/test/{message.name:messages/.*}/books", path) { |
|
t.Fatal(`replacePath("message.name", "messages/*", path) should be "/test/{message.name:messages/.*}/books"`) |
|
} |
|
}
|
|
|