github.com/getgauge/gauge@v1.6.9/api/lang/rename_test.go (about) 1 /*---------------------------------------------------------------- 2 * Copyright (c) ThoughtWorks, Inc. 3 * Licensed under the Apache License, Version 2.0 4 * See LICENSE in the project root for license information. 5 *----------------------------------------------------------------*/ 6 7 package lang 8 9 import ( 10 "encoding/json" 11 "os" 12 "path/filepath" 13 "reflect" 14 "testing" 15 "time" 16 17 "github.com/getgauge/gauge-proto/go/gauge_messages" 18 "github.com/getgauge/gauge/runner" 19 "github.com/getgauge/gauge/util" 20 "github.com/sourcegraph/go-langserver/pkg/lsp" 21 "github.com/sourcegraph/jsonrpc2" 22 ) 23 24 func TestRenameStep(t *testing.T) { 25 specText := `# Specification Heading 26 27 ## Scenario Heading 28 29 * Step text 30 31 * concept heading 32 33 * with a step 34 ` 35 36 cwd, _ := os.Getwd() 37 specFile := filepath.Join(cwd, "_testdata", "test.spec") 38 specURI := util.ConvertPathToURI(specFile) 39 openFilesCache = &files{cache: make(map[lsp.DocumentURI][]string)} 40 openFilesCache.add(specURI, specText) 41 42 util.GetSpecFiles = func(paths []string) []string { 43 return []string{specFile} 44 } 45 util.GetConceptFiles = func() []string { 46 return []string{} 47 } 48 responses := map[gauge_messages.Message_MessageType]interface{}{} 49 responses[gauge_messages.Message_StepNameResponse] = &gauge_messages.StepNameResponse{} 50 responses[gauge_messages.Message_RefactorResponse] = &gauge_messages.RefactorResponse{} 51 lRunner.runner = &runner.GrpcRunner{Timeout: time.Second * 30, LegacyClient: &mockClient{responses: responses}} 52 53 renameParams := lsp.RenameParams{ 54 NewName: `* Step text with <param>`, 55 Position: lsp.Position{ 56 Line: 4, 57 Character: 3, 58 }, 59 TextDocument: lsp.TextDocumentIdentifier{URI: specURI}, 60 } 61 62 b, _ := json.Marshal(renameParams) 63 p := json.RawMessage(b) 64 65 got, err := renameStep(&jsonrpc2.Request{Params: &p}) 66 want := lsp.WorkspaceEdit{ 67 Changes: map[string][]lsp.TextEdit{ 68 string(specURI): []lsp.TextEdit{ 69 lsp.TextEdit{ 70 NewText: `* Step text with "param"`, 71 Range: lsp.Range{ 72 Start: lsp.Position{ 73 Line: 4, 74 Character: 0, 75 }, 76 End: lsp.Position{ 77 Line: 4, 78 Character: 11, 79 }, 80 }, 81 }, 82 }, 83 }, 84 } 85 86 if err != nil { 87 t.Fatalf("Got error %s", err.Error()) 88 } 89 if !reflect.DeepEqual(got, want) { 90 t.Errorf("get step references failed, want: `%v`, got: `%v`", want, got) 91 } 92 } 93 94 func TestRenameConceptStep(t *testing.T) { 95 specText := `# Specification Heading 96 97 ## Scenario Heading 98 99 * Step text 100 101 * concept heading 102 103 * with a step 104 ` 105 106 cwd, _ := os.Getwd() 107 specFile := filepath.Join(cwd, "_testdata", "test.spec") 108 conceptFile := filepath.Join(cwd, "_testdata", "some.cpt") 109 specURI := util.ConvertPathToURI(specFile) 110 conceptURI := util.ConvertPathToURI(conceptFile) 111 openFilesCache = &files{cache: make(map[lsp.DocumentURI][]string)} 112 openFilesCache.add(specURI, specText) 113 114 util.GetSpecFiles = func(paths []string) []string { 115 return []string{specFile} 116 } 117 util.GetConceptFiles = func() []string { 118 return []string{conceptFile} 119 } 120 responses := map[gauge_messages.Message_MessageType]interface{}{} 121 responses[gauge_messages.Message_StepNameResponse] = &gauge_messages.StepNameResponse{} 122 responses[gauge_messages.Message_RefactorResponse] = &gauge_messages.RefactorResponse{} 123 lRunner.runner = &runner.GrpcRunner{Timeout: time.Second * 30, LegacyClient: &mockClient{responses: responses}} 124 125 renameParams := lsp.RenameParams{ 126 NewName: `* concpet heading with "params"`, 127 Position: lsp.Position{ 128 Line: 6, 129 Character: 3, 130 }, 131 TextDocument: lsp.TextDocumentIdentifier{URI: specURI}, 132 } 133 134 b, _ := json.Marshal(renameParams) 135 p := json.RawMessage(b) 136 137 want := lsp.WorkspaceEdit{ 138 Changes: map[string][]lsp.TextEdit{ 139 string(specURI): []lsp.TextEdit{ 140 lsp.TextEdit{ 141 NewText: `* concpet heading with "params"`, 142 Range: lsp.Range{ 143 Start: lsp.Position{ 144 Line: 6, 145 Character: 0, 146 }, 147 End: lsp.Position{ 148 Line: 6, 149 Character: 17, 150 }, 151 }, 152 }, 153 }, 154 string(conceptURI): []lsp.TextEdit{ 155 lsp.TextEdit{ 156 NewText: `# concpet heading with <params>`, 157 Range: lsp.Range{ 158 Start: lsp.Position{ 159 Line: 0, 160 Character: 0, 161 }, 162 End: lsp.Position{ 163 Line: 0, 164 Character: 17, 165 }, 166 }, 167 }, 168 }, 169 }, 170 } 171 172 got, err := renameStep(&jsonrpc2.Request{Params: &p}) 173 174 if err != nil { 175 t.Fatalf("Got error %s", err.Error()) 176 } 177 we := got.(lsp.WorkspaceEdit) 178 for file, edits := range we.Changes { 179 if !reflect.DeepEqual(edits, want.Changes[file]) { 180 t.Errorf("refacotoring failed, want: `%v`, got: `%v`", want.Changes[file], edits) 181 } 182 } 183 }