github.com/getgauge/gauge@v1.6.9/api/lang/completionParams_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  	"testing"
    11  
    12  	"github.com/getgauge/gauge/gauge"
    13  	"github.com/sourcegraph/go-langserver/pkg/lsp"
    14  )
    15  
    16  var testParamEditPosition = []struct {
    17  	input       string
    18  	cursorPos   lsp.Position
    19  	wantRange   lsp.Range
    20  	wantArgType gauge.ArgType
    21  	wantSuffix  string
    22  }{
    23  	{
    24  		input:       `* Step with "static" param`,
    25  		cursorPos:   lsp.Position{Line: 0, Character: len(`* Step with "stat`)},
    26  		wantRange:   lsp.Range{Start: lsp.Position{Line: 0, Character: len(`* Step with "`)}, End: lsp.Position{Line: 0, Character: len(`* Step with "static"`)}},
    27  		wantArgType: gauge.Static,
    28  		wantSuffix:  "\"",
    29  	},
    30  	{
    31  		input:       `* Step with <dynamic> param"`,
    32  		cursorPos:   lsp.Position{Line: 0, Character: len(`* Step with <`)},
    33  		wantRange:   lsp.Range{Start: lsp.Position{Line: 0, Character: len(`* Step with <`)}, End: lsp.Position{Line: 0, Character: len(`* Step with <dynamic>`)}},
    34  		wantArgType: gauge.Dynamic,
    35  		wantSuffix:  ">",
    36  	},
    37  	{
    38  		input:       `* Step with <dynamic> param and "static" param`,
    39  		cursorPos:   lsp.Position{Line: 0, Character: len(`* Step with <dyna`)},
    40  		wantRange:   lsp.Range{Start: lsp.Position{Line: 0, Character: len(`* Step with <`)}, End: lsp.Position{Line: 0, Character: len(`* Step with <dynamic>`)}},
    41  		wantArgType: gauge.Dynamic,
    42  		wantSuffix:  ">",
    43  	},
    44  	{
    45  		input:       `* Step with <dynamic> param and "static" param`,
    46  		cursorPos:   lsp.Position{Line: 0, Character: len(`* Step with <dynamic> param and "st`)},
    47  		wantRange:   lsp.Range{Start: lsp.Position{Line: 0, Character: len(`* Step with <dynamic> param and "`)}, End: lsp.Position{Line: 0, Character: len(`* Step with <dynamic> param and "static"`)}},
    48  		wantArgType: gauge.Static,
    49  		wantSuffix:  "\"",
    50  	},
    51  	{
    52  		input:       `* Step with "static" param and <dynamic> param`,
    53  		cursorPos:   lsp.Position{Line: 0, Character: len(`* Step with "static" param and <dy`)},
    54  		wantRange:   lsp.Range{Start: lsp.Position{Line: 0, Character: len(`* Step with "static" param and <`)}, End: lsp.Position{Line: 0, Character: len(`* Step with "static" param and <dynamic>`)}},
    55  		wantArgType: gauge.Dynamic,
    56  		wantSuffix:  ">",
    57  	},
    58  	{
    59  		input:       `* Step with "static" param and <dynamic> param`,
    60  		cursorPos:   lsp.Position{Line: 0, Character: len(`* Step with "`)},
    61  		wantRange:   lsp.Range{Start: lsp.Position{Line: 0, Character: len(`* Step with "`)}, End: lsp.Position{Line: 0, Character: len(`* Step with "static"`)}},
    62  		wantArgType: gauge.Static,
    63  		wantSuffix:  "\"",
    64  	},
    65  	{
    66  		input:       `* Incomplete step with <para`,
    67  		cursorPos:   lsp.Position{Line: 0, Character: len(`* Incomplete step with <para`)},
    68  		wantRange:   lsp.Range{Start: lsp.Position{Line: 0, Character: len(`* Incomplete step with <`)}, End: lsp.Position{Line: 0, Character: len(`* Incomplete step with <para`)}},
    69  		wantArgType: gauge.Dynamic,
    70  		wantSuffix:  ">",
    71  	},
    72  	{
    73  		input:       `* Incomplete step with <para`,
    74  		cursorPos:   lsp.Position{Line: 0, Character: len(`* Incomplete step with <`)},
    75  		wantRange:   lsp.Range{Start: lsp.Position{Line: 0, Character: len(`* Incomplete step with <`)}, End: lsp.Position{Line: 0, Character: len(`* Incomplete step with <para`)}},
    76  		wantArgType: gauge.Dynamic,
    77  		wantSuffix:  ">",
    78  	},
    79  	{
    80  		input:       `* Step with "one" and "two" static params`,
    81  		cursorPos:   lsp.Position{Line: 0, Character: len(`* Step with "o`)},
    82  		wantRange:   lsp.Range{Start: lsp.Position{Line: 0, Character: len(`* Step with "`)}, End: lsp.Position{Line: 0, Character: len(`* Step with "one"`)}},
    83  		wantArgType: gauge.Dynamic,
    84  		wantSuffix:  ">",
    85  	},
    86  }
    87  
    88  func TestGetParamEditPosition(t *testing.T) {
    89  	for _, test := range testParamEditPosition {
    90  		pline := test.input
    91  		if len(test.input) > test.cursorPos.Character {
    92  			pline = test.input[:test.cursorPos.Character]
    93  		}
    94  		_, _, gotRange := getParamArgTypeAndEditRange(test.input, pline, test.cursorPos)
    95  		if gotRange.Start.Line != test.wantRange.Start.Line || gotRange.Start.Character != test.wantRange.Start.Character {
    96  			t.Errorf(`Incorrect Edit Start Position got: %+v , want : %+v, input : "%s", cursorPos : "%d"`, gotRange.Start, test.wantRange.Start, test.input, test.cursorPos.Character)
    97  		}
    98  		if gotRange.End.Line != test.wantRange.End.Line || gotRange.End.Character != test.wantRange.End.Character {
    99  			t.Errorf(`Incorrect Edit End Position got: %+v , want : %+v, input : "%s", cursorPos : "%d"`, gotRange.End, test.wantRange.End, test.input, test.cursorPos.Character)
   100  		}
   101  	}
   102  }
   103  
   104  var shouldAddParamTests = []struct {
   105  	aType gauge.ArgType
   106  	want  bool
   107  }{
   108  	{gauge.Static, true},
   109  	{gauge.Dynamic, true},
   110  	{gauge.TableArg, false},
   111  	{gauge.SpecialTable, true},
   112  	{gauge.SpecialString, true},
   113  }
   114  
   115  func TestShouldAddParam(t *testing.T) {
   116  	for _, test := range shouldAddParamTests {
   117  		got := shouldAddParam(test.aType)
   118  		if got != test.want {
   119  			t.Errorf(`want %v for shouldAddParam for ArgType "%v"", but got %v`, test.want, test.aType, got)
   120  		}
   121  	}
   122  }