98 lines
2.0 KiB
Go
Raw Normal View History

2023-07-09 17:46:17 +02:00
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
}