|
|
|
package acedoc
|
|
|
|
|
|
|
|
import "testing"
|
|
|
|
|
|
|
|
func TestDelta(t *testing.T) {
|
|
|
|
type c struct {
|
|
|
|
name string
|
|
|
|
start string
|
|
|
|
expect string
|
|
|
|
delta Delta
|
|
|
|
}
|
|
|
|
|
|
|
|
cases := []c{
|
|
|
|
|
|
|
|
// empty tests
|
|
|
|
|
|
|
|
{"empty",
|
|
|
|
"", "", Delta{}},
|
|
|
|
|
|
|
|
{"empty with content",
|
|
|
|
"a", "a", Delta{}},
|
|
|
|
|
|
|
|
// insert tests
|
|
|
|
|
|
|
|
{"insert with no content",
|
|
|
|
"a", "a", Insert(0, 1, "")},
|
|
|
|
|
|
|
|
{"insert",
|
|
|
|
"a", "ab", Insert(0, 1, "b")},
|
|
|
|
|
|
|
|
{"insert across line",
|
|
|
|
"a", "a\nb", Insert(0, 1, "\nb")},
|
|
|
|
|
|
|
|
{"insert new line",
|
|
|
|
"ab", "a\nb", Insert(0, 1, "\n")},
|
|
|
|
|
|
|
|
{"insert lines at beginning",
|
|
|
|
"ab", "\n\nab", Insert(0, 0, "\n\n")},
|
|
|
|
|
|
|
|
{"insert lines at end",
|
|
|
|
"ab", "ab\n\n", Insert(0, 2, "\n\n")},
|
|
|
|
|
|
|
|
{"insert more lines",
|
|
|
|
"a\nb", "a\n\n\nb", Insert(0, 1, "\n\n")},
|
|
|
|
|
|
|
|
// remove tests
|
|
|
|
{"remove",
|
|
|
|
"a", "", Remove(0, 0, "a")},
|
|
|
|
|
|
|
|
{"remove part",
|
|
|
|
"aa", "a", Remove(0, 0, "a")},
|
|
|
|
|
|
|
|
{"remove across line",
|
|
|
|
"a\nb", "a", Remove(0, 1, "\nb")},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, c := range cases {
|
|
|
|
t.Run(c.name, func(t *testing.T) {
|
|
|
|
doc := NewString(c.start)
|
|
|
|
err := doc.Apply(c.delta)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if doc.Contents() != c.expect {
|
|
|
|
t.Errorf("unexpected output: %q, expected: %q", doc.Contents(), c.expect)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|