diff options
Diffstat (limited to 'gopls/internal/lsp/source/completion/printf_test.go')
-rw-r--r-- | gopls/internal/lsp/source/completion/printf_test.go | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/gopls/internal/lsp/source/completion/printf_test.go b/gopls/internal/lsp/source/completion/printf_test.go new file mode 100644 index 000000000..19d295b8d --- /dev/null +++ b/gopls/internal/lsp/source/completion/printf_test.go @@ -0,0 +1,72 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package completion + +import ( + "fmt" + "testing" +) + +func TestFormatOperandKind(t *testing.T) { + cases := []struct { + f string + idx int + kind objKind + }{ + {"", 1, kindAny}, + {"%", 1, kindAny}, + {"%%%", 1, kindAny}, + {"%[1", 1, kindAny}, + {"%[?%s", 2, kindAny}, + {"%[abc]v", 1, kindAny}, + + {"%v", 1, kindAny}, + {"%T", 1, kindAny}, + {"%t", 1, kindBool}, + {"%d", 1, kindInt}, + {"%c", 1, kindInt}, + {"%o", 1, kindInt}, + {"%O", 1, kindInt}, + {"%U", 1, kindInt}, + {"%e", 1, kindFloat | kindComplex}, + {"%E", 1, kindFloat | kindComplex}, + {"%f", 1, kindFloat | kindComplex}, + {"%F", 1, kindFloat | kindComplex}, + {"%g", 1, kindFloat | kindComplex}, + {"%G", 1, kindFloat | kindComplex}, + {"%b", 1, kindInt | kindFloat | kindComplex | kindBytes}, + {"%q", 1, kindString | kindBytes | kindStringer | kindError}, + {"%s", 1, kindString | kindBytes | kindStringer | kindError}, + {"%x", 1, kindString | kindBytes | kindInt | kindFloat | kindComplex}, + {"%X", 1, kindString | kindBytes | kindInt | kindFloat | kindComplex}, + {"%p", 1, kindPtr | kindSlice}, + {"%w", 1, kindError}, + + {"%1.2f", 1, kindFloat | kindComplex}, + {"%*f", 1, kindInt}, + {"%*f", 2, kindFloat | kindComplex}, + {"%*.*f", 1, kindInt}, + {"%*.*f", 2, kindInt}, + {"%*.*f", 3, kindFloat | kindComplex}, + {"%[3]*.[2]*[1]f", 1, kindFloat | kindComplex}, + {"%[3]*.[2]*[1]f", 2, kindInt}, + {"%[3]*.[2]*[1]f", 3, kindInt}, + + {"foo %% %d", 1, kindInt}, + {"%#-12.34f", 1, kindFloat | kindComplex}, + {"% d", 1, kindInt}, + + {"%s %[1]X %d", 1, kindString | kindBytes}, + {"%s %[1]X %d", 2, kindInt}, + } + + for _, c := range cases { + t.Run(fmt.Sprintf("%q#%d", c.f, c.idx), func(t *testing.T) { + if got := formatOperandKind(c.f, c.idx); got != c.kind { + t.Errorf("expected %d (%[1]b), got %d (%[2]b)", c.kind, got) + } + }) + } +} |