test tree foreach

master
Bel LaPointe 2022-02-16 08:05:14 -07:00
parent 63caf9ed03
commit a7c8a0d481
5 changed files with 39 additions and 16 deletions

View File

@ -14,11 +14,11 @@ func NewID(s string) ID {
}
func (id ID) Push(child string) ID {
return ID(path.Join(id.String(), child)).withClean()
return NewID(path.Join(id.String(), child)).withClean()
}
func (id ID) Pop() ID {
pid := path.Clean(ID(path.Dir(id.String())).withClean().String())
pid := path.Clean(NewID(path.Dir(id.String())).withClean().String())
if strings.HasPrefix(pid, ".") {
return ""
}

View File

@ -499,7 +499,7 @@ func (server *Server) _apiV0SearchHandler(query string) ([][2]string, error) {
result = append(result, [2]string{id.URLSafeString(), title})
return nil
}); err != nil {
return nil, err
return nil, fmt.Errorf("failed for each: %v", err)
}
return result, nil
}

View File

@ -31,11 +31,11 @@ func TestServerRoutes(t *testing.T) {
ensureAndWrite(server.diskMediaPath("delid"), []byte("hi"))
tree := server.tree()
if err := tree.Put(ID("getfid"), Leaf{Title: "", Content: "getfid body"}); err != nil {
if err := tree.Put(NewID("getfid"), Leaf{Title: "", Content: "getfid body"}); err != nil {
t.Fatal(err)
}
tree.Put(ID("putfid"), Leaf{Title: "putfid title", Content: "initial putfid body"})
tree.Put(ID("delfid"), Leaf{Title: "delfid title", Content: "delfid body"})
tree.Put(NewID("putfid"), Leaf{Title: "putfid title", Content: "initial putfid body"})
tree.Put(NewID("delfid"), Leaf{Title: "delfid title", Content: "delfid body"})
t.Log(tree.GetRoot())
ensureAndWrite(path.Join(server.root, "index.html"), []byte("mom"))
@ -151,7 +151,7 @@ func TestServerPutTreeGetFile(t *testing.T) {
if err := server.Routes(); err != nil {
t.Fatal(err)
}
server.tree().Put(ID("my pid"), Leaf{})
server.tree().Put(NewID("my pid"), Leaf{})
var id string
t.Run("put to create an id", func(t *testing.T) {
r := httptest.NewRequest(http.MethodPut, "/my%20pid/my-put-id", strings.NewReader("body"))

View File

@ -26,7 +26,7 @@ func (branch Branch) forEach(preid ID, foo func(ID, Leaf) error) error {
return err
}
for id, child := range branch.Branches {
if err := child.forEach(preid.Push(string(id)), foo); err != nil {
if err := child.forEach(id, foo); err != nil {
return err
}
}

View File

@ -3,21 +3,44 @@ package main
import (
"encoding/json"
"fmt"
"path"
"strconv"
"testing"
)
func TestTreeDel(t *testing.T) {
func TestTreeForEach(t *testing.T) {
tree := NewTree(t.TempDir())
if err := tree.Put(ID("id"), Leaf{}); err != nil {
id := ""
for i := 0; i < 5; i++ {
id = path.Join(id, strconv.Itoa(i))
if err := tree.Put(NewID(id), Leaf{Title: id, Content: id}); err != nil {
t.Fatal(err)
}
}
branch, err := tree.GetRoot()
if err != nil {
t.Fatal(err)
}
if err := tree.Put(ID("id/subid"), Leaf{}); err != nil {
if err := branch.ForEach(func(id ID, leaf Leaf) error {
t.Logf("id=%+v, leaf=%+v", id, leaf)
return nil
}); err != nil {
t.Fatal(err)
}
}
func TestTreeDel(t *testing.T) {
tree := NewTree(t.TempDir())
if err := tree.Put(NewID("id"), Leaf{}); err != nil {
t.Fatal(err)
}
if err := tree.Put(NewID("id/subid"), Leaf{}); err != nil {
t.Fatal(err)
}
if err := tree.Del(ID("id")); err != nil {
if err := tree.Del(NewID("id")); err != nil {
t.Fatal(err)
} else if got, err := tree.Get(ID("id")); err != nil {
} else if got, err := tree.Get(NewID("id")); err != nil {
t.Fatal(err)
} else if !got.Deleted {
t.Fatal(got)
@ -45,7 +68,7 @@ func TestTreeCrud(t *testing.T) {
t.Fatal(m)
}
if err := tree.Del(ID("id")); err != nil {
if err := tree.Del(NewID("id")); err != nil {
t.Fatal(err)
}
@ -54,9 +77,9 @@ func TestTreeCrud(t *testing.T) {
Deleted: false,
Content: "leaf content",
}
if err := tree.Put(ID("id"), want); err != nil {
if err := tree.Put(NewID("id"), want); err != nil {
t.Fatal(err)
} else if l, err := tree.Get(ID("id")); err != nil {
} else if l, err := tree.Get(NewID("id")); err != nil {
t.Fatal(err)
} else if l != want {
t.Fatal(want, l)