diff options
Diffstat (limited to 'gopls/internal/lsp/fake/edit_test.go')
-rw-r--r-- | gopls/internal/lsp/fake/edit_test.go | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/gopls/internal/lsp/fake/edit_test.go b/gopls/internal/lsp/fake/edit_test.go new file mode 100644 index 000000000..97e2c73e4 --- /dev/null +++ b/gopls/internal/lsp/fake/edit_test.go @@ -0,0 +1,96 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package fake + +import ( + "testing" + + "golang.org/x/tools/gopls/internal/lsp/protocol" +) + +func TestApplyEdits(t *testing.T) { + tests := []struct { + label string + content string + edits []protocol.TextEdit + want string + wantErr bool + }{ + { + label: "empty content", + }, + { + label: "empty edit", + content: "hello", + edits: []protocol.TextEdit{}, + want: "hello", + }, + { + label: "unicode edit", + content: "hello, 日本語", + edits: []protocol.TextEdit{ + NewEdit(0, 7, 0, 10, "world"), + }, + want: "hello, world", + }, + { + label: "range edit", + content: "ABC\nDEF\nGHI\nJKL", + edits: []protocol.TextEdit{ + NewEdit(1, 1, 2, 3, "12\n345"), + }, + want: "ABC\nD12\n345\nJKL", + }, + { + label: "regression test for issue #57627", + content: "go 1.18\nuse moda/a", + edits: []protocol.TextEdit{ + NewEdit(1, 0, 1, 0, "\n"), + NewEdit(2, 0, 2, 0, "\n"), + }, + want: "go 1.18\n\nuse moda/a\n", + }, + { + label: "end before start", + content: "ABC\nDEF\nGHI\nJKL", + edits: []protocol.TextEdit{ + NewEdit(2, 3, 1, 1, "12\n345"), + }, + wantErr: true, + }, + { + label: "out of bounds line", + content: "ABC\nDEF\nGHI\nJKL", + edits: []protocol.TextEdit{ + NewEdit(1, 1, 4, 3, "12\n345"), + }, + wantErr: true, + }, + { + label: "out of bounds column", + content: "ABC\nDEF\nGHI\nJKL", + edits: []protocol.TextEdit{ + NewEdit(1, 4, 2, 3, "12\n345"), + }, + wantErr: true, + }, + } + + for _, test := range tests { + test := test + t.Run(test.label, func(t *testing.T) { + got, err := applyEdits(protocol.NewMapper("", []byte(test.content)), test.edits, false) + if (err != nil) != test.wantErr { + t.Errorf("got err %v, want error: %t", err, test.wantErr) + } + if err != nil { + return + } + if got := string(got); got != test.want { + t.Errorf("got %q, want %q", got, test.want) + } + }) + } +} |