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 }