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  }