55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package selection
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"aego/core/ids"
|
|
)
|
|
|
|
func TestHistoryWalksExplicitSelections(t *testing.T) {
|
|
s := New()
|
|
a, b, c := Item{Doc: 1, Node: ids.NewNodeID()}, Item{Doc: 1, Node: ids.NewNodeID()}, Item{Doc: 2, Node: ids.NewNodeID()}
|
|
s.Set(a)
|
|
s.Set(b)
|
|
s.Clear()
|
|
s.Set(c)
|
|
if !s.Back() {
|
|
t.Fatal("back must step to b")
|
|
}
|
|
if it, _ := s.Active(); it != b {
|
|
t.Fatalf("active = %v, want b", it)
|
|
}
|
|
s.Back()
|
|
if it, _ := s.Active(); it != a || s.CanBack() {
|
|
t.Fatal("back must reach a and stop there; empty selections are not steps")
|
|
}
|
|
s.Forward()
|
|
s.Forward()
|
|
if it, _ := s.Active(); it != c || s.CanForward() {
|
|
t.Fatal("forward must return to c")
|
|
}
|
|
s.Prune(2, func(ids.NodeID) bool { return false })
|
|
s.Back()
|
|
if it, _ := s.Active(); it != b {
|
|
t.Fatal("pruning must not add a step")
|
|
}
|
|
s.Set(a)
|
|
if s.CanForward() {
|
|
t.Fatal("a new selection after going back drops the forward steps")
|
|
}
|
|
}
|
|
|
|
func TestHistoryDepth(t *testing.T) {
|
|
s := New()
|
|
for i := 0; i < trailMax+10; i++ {
|
|
s.Set(Item{Doc: 1, Node: ids.NewNodeID()})
|
|
}
|
|
steps := 0
|
|
for s.Back() {
|
|
steps++
|
|
}
|
|
if steps != trailMax-1 {
|
|
t.Fatalf("history keeps %d steps, want %d", steps+1, trailMax)
|
|
}
|
|
}
|