Improved test coverage

This commit is contained in:
Eduard Urbach 2023-09-06 11:44:04 +02:00
parent 7070897e70
commit bd91077f83
Signed by: akyoto
GPG Key ID: C874F672B1AF20C0
3 changed files with 60 additions and 10 deletions

View File

@ -48,7 +48,8 @@ PASS: TestParameter
PASS: TestWildcard PASS: TestWildcard
PASS: TestMethods PASS: TestMethods
PASS: TestGitHub PASS: TestGitHub
coverage: 76.9% of statements PASS: TestOverwrite
coverage: 82.5% of statements
``` ```
## Benchmarks ## Benchmarks

View File

@ -20,25 +20,36 @@ func TestStatic(t *testing.T) {
assert.Equal(t, len(params), 0) assert.Equal(t, len(params), 0)
assert.Equal(t, data, "World") assert.Equal(t, data, "World")
data, params = r.Lookup("GET", "/404") notFound := []string{
assert.Equal(t, len(params), 0) "",
assert.Equal(t, data, "") "?",
"/404",
"/hell",
"/hall",
"/helloo",
}
for _, path := range notFound {
data, params = r.Lookup("GET", path)
assert.Equal(t, len(params), 0)
assert.Equal(t, data, "")
}
} }
func TestParameter(t *testing.T) { func TestParameter(t *testing.T) {
r := router.New[string]() r := router.New[string]()
r.Add("GET", "/blog/:slug", "Blog post") r.Add("GET", "/blog/:post", "Blog post")
r.Add("GET", "/blog/:slug/comments/:id", "Comment") r.Add("GET", "/blog/:post/comments/:id", "Comment")
data, params := r.Lookup("GET", "/blog/hello-world") data, params := r.Lookup("GET", "/blog/hello-world")
assert.Equal(t, len(params), 1) assert.Equal(t, len(params), 1)
assert.Equal(t, params[0].Key, "slug") assert.Equal(t, params[0].Key, "post")
assert.Equal(t, params[0].Value, "hello-world") assert.Equal(t, params[0].Value, "hello-world")
assert.Equal(t, data, "Blog post") assert.Equal(t, data, "Blog post")
data, params = r.Lookup("GET", "/blog/hello-world/comments/123") data, params = r.Lookup("GET", "/blog/hello-world/comments/123")
assert.Equal(t, len(params), 2) assert.Equal(t, len(params), 2)
assert.Equal(t, params[0].Key, "slug") assert.Equal(t, params[0].Key, "post")
assert.Equal(t, params[0].Value, "hello-world") assert.Equal(t, params[0].Value, "hello-world")
assert.Equal(t, params[1].Key, "id") assert.Equal(t, params[1].Key, "id")
assert.Equal(t, params[1].Value, "123") assert.Equal(t, params[1].Value, "123")
@ -48,8 +59,9 @@ func TestParameter(t *testing.T) {
func TestWildcard(t *testing.T) { func TestWildcard(t *testing.T) {
r := router.New[string]() r := router.New[string]()
r.Add("GET", "/", "Front page") r.Add("GET", "/", "Front page")
r.Add("GET", "/:slug", "Blog post") r.Add("GET", "/:post", "Blog post")
r.Add("GET", "/users/:id", "Parameter") r.Add("GET", "/users/:id", "Parameter")
r.Add("GET", "/images/static", "Static")
r.Add("GET", "/images/*path", "Wildcard") r.Add("GET", "/images/*path", "Wildcard")
data, params := r.Lookup("GET", "/") data, params := r.Lookup("GET", "/")
@ -58,7 +70,7 @@ func TestWildcard(t *testing.T) {
data, params = r.Lookup("GET", "/blog-post") data, params = r.Lookup("GET", "/blog-post")
assert.Equal(t, len(params), 1) assert.Equal(t, len(params), 1)
assert.Equal(t, params[0].Key, "slug") assert.Equal(t, params[0].Key, "post")
assert.Equal(t, params[0].Value, "blog-post") assert.Equal(t, params[0].Value, "blog-post")
assert.Equal(t, data, "Blog post") assert.Equal(t, data, "Blog post")
@ -68,6 +80,22 @@ func TestWildcard(t *testing.T) {
assert.Equal(t, params[0].Value, "42") assert.Equal(t, params[0].Value, "42")
assert.Equal(t, data, "Parameter") assert.Equal(t, data, "Parameter")
data, params = r.Lookup("GET", "/images/static")
assert.Equal(t, len(params), 0)
assert.Equal(t, data, "Static")
data, params = r.Lookup("GET", "/images/ste")
assert.Equal(t, len(params), 1)
assert.Equal(t, params[0].Key, "path")
assert.Equal(t, params[0].Value, "ste")
assert.Equal(t, data, "Wildcard")
data, params = r.Lookup("GET", "/images/sta")
assert.Equal(t, len(params), 1)
assert.Equal(t, params[0].Key, "path")
assert.Equal(t, params[0].Value, "sta")
assert.Equal(t, data, "Wildcard")
data, params = r.Lookup("GET", "/images/favicon/256.png") data, params = r.Lookup("GET", "/images/favicon/256.png")
assert.Equal(t, len(params), 1) assert.Equal(t, len(params), 1)
assert.Equal(t, params[0].Key, "path") assert.Equal(t, params[0].Key, "path")
@ -111,9 +139,25 @@ func TestGitHub(t *testing.T) {
for _, route := range routes { for _, route := range routes {
data, _ := r.Lookup(route.method, route.path) data, _ := r.Lookup(route.method, route.path)
assert.Equal(t, data, "octocat") assert.Equal(t, data, "octocat")
data = r.LookupNoAlloc(route.method, route.path, func(string, string) {})
assert.Equal(t, data, "octocat")
} }
} }
func TestOverwrite(t *testing.T) {
r := router.New[string]()
r.Add("GET", "/", "1")
r.Add("GET", "/", "2")
r.Add("GET", "/", "3")
r.Add("GET", "/", "4")
r.Add("GET", "/", "5")
data, params := r.Lookup("GET", "/")
assert.Equal(t, len(params), 0)
assert.Equal(t, data, "5")
}
func TestMemoryUsage(t *testing.T) { func TestMemoryUsage(t *testing.T) {
escape := func(a any) {} escape := func(a any) {}

View File

@ -130,6 +130,11 @@ begin:
return node.data return node.data
} }
if lastWildcard != nil {
addParameter(lastWildcard.prefix, path[lastWildcardOffset:])
return lastWildcard.data
}
// node: /blog|feed // node: /blog|feed
// path: /blog| // path: /blog|
return empty return empty