+Describe lsp#utils#diff
+
+ Describe lsp#utils#diff#compute
+ It should return diff of one letter
+ let lines1 = [
+ \ 'foo',
+ \ 'bar',
+ \ 'baz',
+ \]
+ let lines2 = [
+ \ 'foo',
+ \ 'baR',
+ \ 'baz',
+ \]
+ let want = {
+ \ 'range': {
+ \ 'start': { 'line': 1, 'character': 2 },
+ \ 'end': { 'line': 1, 'character': 3 },
+ \ },
+ \ 'text': 'R',
+ \ 'rangeLength': 1
+ \}
+ let got = lsp#utils#diff#compute(lines1, lines2)
+ Assert Equals(got, want)
+ End
+
+ It should return diff of multi-lines
+ let lines1 = [
+ \ 'foo',
+ \ 'bar',
+ \ 'baz',
+ \]
+ let lines2 = [
+ \ 'Foo',
+ \ 'baR',
+ \ 'baz',
+ \]
+ let want = {
+ \ 'range': {
+ \ 'start': { 'line': 0, 'character': 0 },
+ \ 'end': { 'line': 1, 'character': 3, }
+ \ },
+ \ 'text': "Foo\nbaR",
+ \ "rangeLength": 7
+ \}
+ let got = lsp#utils#diff#compute(lines1, lines2)
+ Assert Equals(got, want)
+ End
+
+ It should return diff for empty list
+ let lines1 = []
+ let lines2 = [
+ \ 'foo',
+ \ 'bar',
+ \ 'baz',
+ \]
+ let want = {
+ \ 'range': {
+ \ 'start': { 'line': 0, 'character': 0 },
+ \ 'end': { 'line': 0, 'character': 0, }
+ \ },
+ \ 'text': "foo\nbar\nbaz\n",
+ \ "rangeLength": 0
+ \}
+ let got = lsp#utils#diff#compute(lines1, lines2)
+ Assert Equals(got, want)
+
+ let lines1 = [
+ \ 'foo',
+ \ 'bar',
+ \ 'baz',
+ \]
+ let lines2 = []
+ let want = {
+ \ 'range': {
+ \ 'start': { 'line': 0, 'character': 0 },
+ \ 'end': { 'line': 3, 'character': 0, }
+ \ },
+ \ 'text': '',
+ \ "rangeLength": 12
+ \}
+ let got = lsp#utils#diff#compute(lines1, lines2)
+ Assert Equals(got, want)
+ End
+ End
+End