+func TestViewCoarsenTakesTheCoarserLines(t *testing.T) {
+ view, err := restoreView(viewState{
+ Lines: [][2]int{{1, 0}, {0, 2}, {0, 3}, {0, 4}, {0, 5}},
+ }, 100, 100, builtTree{})
+ require.NoError(t, err)
+
+ other, err := restoreView(viewState{
+ Lines: [][2]int{{0, 0}, {0, 1}, {1, 1}, {0, 4}, {0, 5}},
+ }, 100, 100, builtTree{})
+ require.NoError(t, err)
+
+ view.Coarsen(other, builtTree{})
+ require.Equal(t, []nodeKey{{1, 0}, {1, 1}, {0, 4}, {0, 5}}, view.lines)
+
+ view.low = 2
+ view.Coarsen(other, builtTree{})
+ require.Equal(t, []nodeKey{{2, 0}, {1, 2}}, view.lines)
+ require.False(t, view.merging)
+}
+
+func TestViewContextStopsAtTheFirstPendingLine(t *testing.T) {
+ tree := partTree{
+ sizes: map[nodeKey]int{
+ {0, 0}: 1,
+ {0, 1}: 1,
+ {1, 0}: 1,
+ {0, 3}: 1,
+ },
+ }
+
+ view, err := restoreView(viewState{
+ 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))
+}
+