func TestViewMergesOnlyBuiltParents(t *testing.T) {
tree := ViewPartTree{
- sizes: map[nodeKey]int{
+ sizes: map[NodeKey]int{
{0, 0}: 1,
{0, 1}: 1,
{0, 2}: 1,
require.NoError(t, err)
}
- require.Equal(t, []nodeKey{{0, 0}, {0, 1}, {0, 2}, {0, 3}}, view.lines)
+ require.Equal(t, []NodeKey{{0, 0}, {0, 1}, {0, 2}, {0, 3}}, view.lines)
require.True(t, view.merging)
- tree.sizes[nodeKey{1, 0}] = 1
+ tree.sizes[NodeKey{1, 0}] = 1
_, err := view.Append(tree)
require.NoError(t, err)
- require.Equal(t, []nodeKey{{1, 0}, {0, 2}, {0, 3}, {0, 4}}, view.lines)
+ require.Equal(t, []NodeKey{{1, 0}, {0, 2}, {0, 3}, {0, 4}}, view.lines)
require.True(t, view.merging)
- tree.sizes[nodeKey{1, 1}] = 1
- tree.sizes[nodeKey{1, 2}] = 1
- tree.sizes[nodeKey{2, 0}] = 1
+ tree.sizes[NodeKey{1, 1}] = 1
+ tree.sizes[NodeKey{1, 2}] = 1
+ tree.sizes[NodeKey{2, 0}] = 1
_, err = view.Append(tree)
require.NoError(t, err)
- require.Equal(t, []nodeKey{{2, 0}, {1, 2}}, view.lines)
+ require.Equal(t, []NodeKey{{2, 0}, {1, 2}}, view.lines)
require.False(t, view.merging)
}
func TestViewRendersPendingLinesWithoutTheirMessage(t *testing.T) {
tree := ViewPartTree{
- sizes: map[nodeKey]int{
+ sizes: map[NodeKey]int{
{0, 0}: 3,
{0, 1}: 3,
{1, 0}: 7,
require.NoError(t, err)
require.NoError(t, view.Coarsen(other, ViewBuiltTree{}))
- require.Equal(t, []nodeKey{{1, 0}, {1, 1}, {0, 4}, {0, 5}}, view.lines)
+ require.Equal(t, []NodeKey{{1, 0}, {1, 1}, {0, 4}, {0, 5}}, view.lines)
view.low = 2
require.NoError(t, view.Coarsen(other, ViewBuiltTree{}))
- require.Equal(t, []nodeKey{{2, 0}, {1, 2}}, view.lines)
+ require.Equal(t, []NodeKey{{2, 0}, {1, 2}}, view.lines)
require.False(t, view.merging)
}
func TestViewContextStopsAtTheFirstPendingLine(t *testing.T) {
tree := ViewPartTree{
- sizes: map[nodeKey]int{
+ sizes: map[NodeKey]int{
{0, 0}: 1,
{0, 1}: 1,
{1, 0}: 1,
// ViewBuiltTree is a tree with each node built, with 1 byte of text.
type ViewBuiltTree struct{}
-func (ViewBuiltTree) Built(level, index int) (bool, error) {
+func (v ViewBuiltTree) Built(_, _ int) (bool, error) {
return true, nil
}
func (ViewBuiltTree) Node(level, index int) (Node, bool, error) {
- return testNode(level, index, "a"), true, nil
+ return treeTestNode(level, index, "a"), true, nil
}
// ViewPushEntry is one entry of the rollback state list of the reference
// ViewPartTree is a tree with the built nodes of its sizes.
type ViewPartTree struct {
- sizes map[nodeKey]int
+ sizes map[NodeKey]int
}
func (p ViewPartTree) Built(level, index int) (bool, error) {
- _, built := p.sizes[nodeKey{level, index}]
+ _, built := p.sizes[NodeKey{level, index}]
return built, nil
}
func (p ViewPartTree) Node(level, index int) (Node, bool, error) {
- size, built := p.sizes[nodeKey{level, index}]
+ size, built := p.sizes[NodeKey{level, index}]
if !built {
return Node{}, false, nil
}
text = "aaa\naaa"
}
- return testNode(level, index, text), true, nil
+ return treeTestNode(level, index, text), true, nil
}
-// viewPush is the push of rollback_state_list.js.
+// viewPush adds state to the newest end of states and returns the new list. An
+// empty list gets one entry. When the newest entry is not kept, it becomes kept
+// with its own state, and state is dropped. When it is kept, state becomes a
+// new newest entry, and the state of the old newest entry goes to the older
+// entries by the same push.
func viewPush(state int, states *ViewPushEntry) *ViewPushEntry {
if states == nil {
return &ViewPushEntry{