golang.org/x/tools/gopls@v0.15.3/internal/test/integration/fake/edit_test.go (about) 1 // Copyright 2020 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package fake 6 7 import ( 8 "testing" 9 10 "golang.org/x/tools/gopls/internal/protocol" 11 ) 12 13 func TestApplyEdits(t *testing.T) { 14 tests := []struct { 15 label string 16 content string 17 edits []protocol.TextEdit 18 want string 19 wantErr bool 20 }{ 21 { 22 label: "empty content", 23 }, 24 { 25 label: "empty edit", 26 content: "hello", 27 edits: []protocol.TextEdit{}, 28 want: "hello", 29 }, 30 { 31 label: "unicode edit", 32 content: "hello, 日本語", 33 edits: []protocol.TextEdit{ 34 NewEdit(0, 7, 0, 10, "world"), 35 }, 36 want: "hello, world", 37 }, 38 { 39 label: "range edit", 40 content: "ABC\nDEF\nGHI\nJKL", 41 edits: []protocol.TextEdit{ 42 NewEdit(1, 1, 2, 3, "12\n345"), 43 }, 44 want: "ABC\nD12\n345\nJKL", 45 }, 46 { 47 label: "regression test for issue #57627", 48 content: "go 1.18\nuse moda/a", 49 edits: []protocol.TextEdit{ 50 NewEdit(1, 0, 1, 0, "\n"), 51 NewEdit(2, 0, 2, 0, "\n"), 52 }, 53 want: "go 1.18\n\nuse moda/a\n", 54 }, 55 { 56 label: "end before start", 57 content: "ABC\nDEF\nGHI\nJKL", 58 edits: []protocol.TextEdit{ 59 NewEdit(2, 3, 1, 1, "12\n345"), 60 }, 61 wantErr: true, 62 }, 63 { 64 label: "out of bounds line", 65 content: "ABC\nDEF\nGHI\nJKL", 66 edits: []protocol.TextEdit{ 67 NewEdit(1, 1, 4, 3, "12\n345"), 68 }, 69 wantErr: true, 70 }, 71 { 72 label: "out of bounds column", 73 content: "ABC\nDEF\nGHI\nJKL", 74 edits: []protocol.TextEdit{ 75 NewEdit(1, 4, 2, 3, "12\n345"), 76 }, 77 wantErr: true, 78 }, 79 } 80 81 for _, test := range tests { 82 test := test 83 t.Run(test.label, func(t *testing.T) { 84 got, err := applyEdits(protocol.NewMapper("", []byte(test.content)), test.edits, false) 85 if (err != nil) != test.wantErr { 86 t.Errorf("got err %v, want error: %t", err, test.wantErr) 87 } 88 if err != nil { 89 return 90 } 91 if got := string(got); got != test.want { 92 t.Errorf("got %q, want %q", got, test.want) 93 } 94 }) 95 } 96 }