github.com/v2fly/tools@v0.100.0/internal/lsp/source/completion/printf_test.go (about)

     1  // Copyright 2020 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package completion
     6  
     7  import (
     8  	"fmt"
     9  	"testing"
    10  )
    11  
    12  func TestFormatOperandKind(t *testing.T) {
    13  	cases := []struct {
    14  		f    string
    15  		idx  int
    16  		kind objKind
    17  	}{
    18  		{"", 1, kindAny},
    19  		{"%", 1, kindAny},
    20  		{"%%%", 1, kindAny},
    21  		{"%[1", 1, kindAny},
    22  		{"%[?%s", 2, kindAny},
    23  		{"%[abc]v", 1, kindAny},
    24  
    25  		{"%v", 1, kindAny},
    26  		{"%T", 1, kindAny},
    27  		{"%t", 1, kindBool},
    28  		{"%d", 1, kindInt},
    29  		{"%c", 1, kindInt},
    30  		{"%o", 1, kindInt},
    31  		{"%O", 1, kindInt},
    32  		{"%U", 1, kindInt},
    33  		{"%e", 1, kindFloat | kindComplex},
    34  		{"%E", 1, kindFloat | kindComplex},
    35  		{"%f", 1, kindFloat | kindComplex},
    36  		{"%F", 1, kindFloat | kindComplex},
    37  		{"%g", 1, kindFloat | kindComplex},
    38  		{"%G", 1, kindFloat | kindComplex},
    39  		{"%b", 1, kindInt | kindFloat | kindComplex | kindBytes},
    40  		{"%q", 1, kindString | kindBytes | kindStringer | kindError},
    41  		{"%s", 1, kindString | kindBytes | kindStringer | kindError},
    42  		{"%x", 1, kindString | kindBytes | kindInt | kindFloat | kindComplex},
    43  		{"%X", 1, kindString | kindBytes | kindInt | kindFloat | kindComplex},
    44  		{"%p", 1, kindPtr | kindSlice},
    45  		{"%w", 1, kindError},
    46  
    47  		{"%1.2f", 1, kindFloat | kindComplex},
    48  		{"%*f", 1, kindInt},
    49  		{"%*f", 2, kindFloat | kindComplex},
    50  		{"%*.*f", 1, kindInt},
    51  		{"%*.*f", 2, kindInt},
    52  		{"%*.*f", 3, kindFloat | kindComplex},
    53  		{"%[3]*.[2]*[1]f", 1, kindFloat | kindComplex},
    54  		{"%[3]*.[2]*[1]f", 2, kindInt},
    55  		{"%[3]*.[2]*[1]f", 3, kindInt},
    56  
    57  		{"foo %% %d", 1, kindInt},
    58  		{"%#-12.34f", 1, kindFloat | kindComplex},
    59  		{"% d", 1, kindInt},
    60  
    61  		{"%s %[1]X %d", 1, kindString | kindBytes},
    62  		{"%s %[1]X %d", 2, kindInt},
    63  	}
    64  
    65  	for _, c := range cases {
    66  		t.Run(fmt.Sprintf("%q#%d", c.f, c.idx), func(t *testing.T) {
    67  			if got := formatOperandKind(c.f, c.idx); got != c.kind {
    68  				t.Errorf("expected %d (%[1]b), got %d (%[2]b)", c.kind, got)
    69  			}
    70  		})
    71  	}
    72  }