]> git.giacomolli.uk - onechat/blobdiff - view_test.go
Quote long text in issues as a blockquote
[onechat] / view_test.go
index 0162f28d43617a85da1e7a40767ebe52163ac408..201483e8c79d966d6782aa5a7c0ced7dca96d02a 100644 (file)
@@ -8,7 +8,7 @@ import (
        "github.com/stretchr/testify/require"
 )
 
        "github.com/stretchr/testify/require"
 )
 
-func TestViewMergesInTheOrderOfTaelinsPush(t *testing.T) {
+func TestViewMergesInTheOrderOfTheRollbackPush(t *testing.T) {
        tree := builtTree{}
        view := newView(0, 0)
        var states *pushEntry
        tree := builtTree{}
        view := newView(0, 0)
        var states *pushEntry
@@ -17,7 +17,8 @@ func TestViewMergesInTheOrderOfTaelinsPush(t *testing.T) {
                starts := states.starts()
                view.high = len(starts)
                view.low = len(starts)
                starts := states.starts()
                view.high = len(starts)
                view.low = len(starts)
-               view.Append(tree)
+               _, err := view.Append(tree)
+               require.NoError(t, err)
 
                lines := make([]int, len(view.lines))
                for n, line := range view.lines {
 
                lines := make([]int, len(view.lines))
                for n, line := range view.lines {
@@ -33,8 +34,9 @@ func TestViewMergesInOneBatchFromHighToLow(t *testing.T) {
        view := newView(10, 5)
        sizes := make([]int, 0, 20)
        for range 20 {
        view := newView(10, 5)
        sizes := make([]int, 0, 20)
        for range 20 {
-               view.Append(tree)
-               sizes = append(sizes, view.Size(tree))
+               _, err := view.Append(tree)
+               require.NoError(t, err)
+               sizes = append(sizes, view.Size())
        }
 
        require.Equal(t, []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 6, 7, 8, 9, 10, 5, 6, 7, 8}, sizes)
        }
 
        require.Equal(t, []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 6, 7, 8, 9, 10, 5, 6, 7, 8}, sizes)
@@ -54,21 +56,24 @@ func TestViewMergesOnlyBuiltParents(t *testing.T) {
 
        view := newView(3, 2)
        for range 4 {
 
        view := newView(3, 2)
        for range 4 {
-               view.Append(tree)
+               _, err := view.Append(tree)
+               require.NoError(t, err)
        }
 
        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
        }
 
        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
-       view.Append(tree)
+       _, err := view.Append(tree)
+       require.NoError(t, err)
        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
        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
-       view.Append(tree)
+       _, err = view.Append(tree)
+       require.NoError(t, err)
        require.Equal(t, []nodeKey{{2, 0}, {1, 2}}, view.lines)
        require.False(t, view.merging)
 }
        require.Equal(t, []nodeKey{{2, 0}, {1, 2}}, view.lines)
        require.False(t, view.merging)
 }
@@ -86,8 +91,8 @@ func TestViewRendersPendingLinesWithoutTheirMessage(t *testing.T) {
                Lines: [][2]int{{1, 0}, {0, 2}},
        }, chatHigh, chatLow, tree)
        require.NoError(t, err)
                Lines: [][2]int{{1, 0}, {0, 2}},
        }, chatHigh, chatLow, tree)
        require.NoError(t, err)
-       require.Equal(t, "<chat>\n0+2|aaa aaa\n2+1|"+pending+"\n</chat>", view.Render(tree))
-       require.Equal(t, 7+len(pending), view.Size(tree))
+       require.Equal(t, "<chat>\n0+2|aaa aaa\n2+1|"+pending+"\n</chat>", view.Render())
+       require.Equal(t, 7+len(pending), view.Size())
 }
 
 func TestViewCoarsenTakesTheCoarserLines(t *testing.T) {
 }
 
 func TestViewCoarsenTakesTheCoarserLines(t *testing.T) {
@@ -101,11 +106,11 @@ func TestViewCoarsenTakesTheCoarserLines(t *testing.T) {
        }, 100, 100, builtTree{})
        require.NoError(t, err)
 
        }, 100, 100, builtTree{})
        require.NoError(t, err)
 
-       view.Coarsen(other, builtTree{})
+       require.NoError(t, view.Coarsen(other, builtTree{}))
        require.Equal(t, []nodeKey{{1, 0}, {1, 1}, {0, 4}, {0, 5}}, view.lines)
 
        view.low = 2
        require.Equal(t, []nodeKey{{1, 0}, {1, 1}, {0, 4}, {0, 5}}, view.lines)
 
        view.low = 2
-       view.Coarsen(other, builtTree{})
+       require.NoError(t, view.Coarsen(other, builtTree{}))
        require.Equal(t, []nodeKey{{2, 0}, {1, 2}}, view.lines)
        require.False(t, view.merging)
 }
        require.Equal(t, []nodeKey{{2, 0}, {1, 2}}, view.lines)
        require.False(t, view.merging)
 }
@@ -124,9 +129,9 @@ func TestViewContextStopsAtTheFirstPendingLine(t *testing.T) {
                Lines: [][2]int{{1, 0}, {0, 2}, {0, 3}},
        }, 100, 100, tree)
        require.NoError(t, err)
                Lines: [][2]int{{1, 0}, {0, 2}, {0, 3}},
        }, 100, 100, tree)
        require.NoError(t, err)
-       require.Equal(t, "<chat>\n</chat>", view.Context(tree, 0))
-       require.Equal(t, "<chat>\n0+2|a\n</chat>", view.Context(tree, 2))
-       require.Equal(t, "<chat>\n0+2|a\n</chat>", view.Context(tree, 3))
+       require.Equal(t, "<chat>\n</chat>", view.Context(0))
+       require.Equal(t, "<chat>\n0+2|a\n</chat>", view.Context(2))
+       require.Equal(t, "<chat>\n0+2|a\n</chat>", view.Context(3))
 }
 
 func TestRestoreViewRejectsAGap(t *testing.T) {
 }
 
 func TestRestoreViewRejectsAGap(t *testing.T) {
@@ -136,8 +141,8 @@ func TestRestoreViewRejectsAGap(t *testing.T) {
        require.ErrorContains(t, err, "does not start at message 1")
 }
 
        require.ErrorContains(t, err, "does not start at message 1")
 }
 
-// pushEntry is one entry of Taelin's rollback state list, newest first. Under
-// push alone, life stays 0, so the entry leaves it out.
+// pushEntry is one entry of the rollback state list of the reference design,
+// newest first. Under push alone, life stays 0, so the entry leaves it out.
 type pushEntry struct {
        keep  bool
        state int
 type pushEntry struct {
        keep  bool
        state int
@@ -181,8 +186,12 @@ func (e *pushEntry) starts() []int {
 // builtTree is a tree with each node built, with 1 byte of text.
 type builtTree struct{}
 
 // builtTree is a tree with each node built, with 1 byte of text.
 type builtTree struct{}
 
-func (builtTree) Node(level, index int) (Node, bool) {
-       return testNode(level, index, "a"), true
+func (builtTree) Built(level, index int) (bool, error) {
+       return true, nil
+}
+
+func (builtTree) Node(level, index int) (Node, bool, error) {
+       return testNode(level, index, "a"), true, nil
 }
 
 // partTree is a tree with the built nodes of its sizes.
 }
 
 // partTree is a tree with the built nodes of its sizes.
@@ -190,10 +199,15 @@ type partTree struct {
        sizes map[nodeKey]int
 }
 
        sizes map[nodeKey]int
 }
 
-func (p partTree) Node(level, index int) (Node, bool) {
+func (p partTree) Built(level, index int) (bool, error) {
+       _, built := p.sizes[nodeKey{level, index}]
+       return built, nil
+}
+
+func (p partTree) Node(level, index int) (Node, bool, error) {
        size, built := p.sizes[nodeKey{level, index}]
        if !built {
        size, built := p.sizes[nodeKey{level, index}]
        if !built {
-               return Node{}, false
+               return Node{}, false, nil
        }
 
        text := strings.Repeat("a", size)
        }
 
        text := strings.Repeat("a", size)
@@ -201,5 +215,5 @@ func (p partTree) Node(level, index int) (Node, bool) {
                text = "aaa\naaa"
        }
 
                text = "aaa\naaa"
        }
 
-       return testNode(level, index, text), true
+       return testNode(level, index, text), true, nil
 }
 }