Added tests and benchmarks
This commit is contained in:
parent
dd3f3280a0
commit
cdcb158623
10 changed files with 330 additions and 29 deletions
97
Tree_test.go
Normal file
97
Tree_test.go
Normal file
|
@ -0,0 +1,97 @@
|
|||
package router_test
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.akyoto.dev/go/assert"
|
||||
"git.akyoto.dev/go/router"
|
||||
)
|
||||
|
||||
func TestHello(t *testing.T) {
|
||||
tree := router.Tree[string]{}
|
||||
|
||||
tree.Add("/hello", "Hello")
|
||||
tree.Add("/world", "World")
|
||||
|
||||
data, params := tree.Lookup("/hello")
|
||||
assert.Equal(t, len(params), 0)
|
||||
assert.Equal(t, data, "Hello")
|
||||
|
||||
data, params = tree.Lookup("/world")
|
||||
assert.Equal(t, len(params), 0)
|
||||
assert.Equal(t, data, "World")
|
||||
|
||||
data, params = tree.Lookup("/404")
|
||||
assert.Equal(t, len(params), 0)
|
||||
assert.Equal(t, data, "")
|
||||
}
|
||||
|
||||
func TestParams(t *testing.T) {
|
||||
tree := router.Tree[string]{}
|
||||
|
||||
tree.Add("/blog/:slug", "Blog post")
|
||||
tree.Add("/blog/:slug/comments/:id", "Comment")
|
||||
|
||||
data, params := tree.Lookup("/blog/hello-world")
|
||||
assert.Equal(t, len(params), 1)
|
||||
assert.Equal(t, params[0].Key, "slug")
|
||||
assert.Equal(t, params[0].Value, "hello-world")
|
||||
assert.Equal(t, data, "Blog post")
|
||||
|
||||
data, params = tree.Lookup("/blog/hello-world/comments/123")
|
||||
assert.Equal(t, len(params), 2)
|
||||
assert.Equal(t, params[0].Key, "slug")
|
||||
assert.Equal(t, params[0].Value, "hello-world")
|
||||
assert.Equal(t, params[1].Key, "id")
|
||||
assert.Equal(t, params[1].Value, "123")
|
||||
assert.Equal(t, data, "Comment")
|
||||
}
|
||||
|
||||
func TestGitHub(t *testing.T) {
|
||||
tree := router.Tree[string]{}
|
||||
routes := loadRoutes("testdata/github.txt")
|
||||
|
||||
for _, route := range routes {
|
||||
tree.Add(route, "octocat")
|
||||
}
|
||||
|
||||
for _, route := range routes {
|
||||
data, _ := tree.Lookup(route)
|
||||
assert.Equal(t, data, "octocat")
|
||||
}
|
||||
}
|
||||
|
||||
func loadRoutes(fileName string) []string {
|
||||
var routes []string
|
||||
|
||||
for route := range routesInFile(fileName) {
|
||||
routes = append(routes, route)
|
||||
}
|
||||
|
||||
return routes
|
||||
}
|
||||
|
||||
func routesInFile(fileName string) <-chan string {
|
||||
routes := make(chan string)
|
||||
|
||||
go func() {
|
||||
defer close(routes)
|
||||
file, err := os.Open(fileName)
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
defer file.Close()
|
||||
scanner := bufio.NewScanner(file)
|
||||
|
||||
for scanner.Scan() {
|
||||
routes <- strings.TrimSpace(scanner.Text())
|
||||
}
|
||||
}()
|
||||
|
||||
return routes
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue