github.com/keysonzzz/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgGoSource/types_test.go (about)

     1  package kmgGoSource
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/bronze1man/kmg/kmgCmd"
     8  	"github.com/bronze1man/kmg/kmgTest"
     9  	"golang.org/x/tools/go/types"
    10  )
    11  
    12  type RpcDemo struct {
    13  }
    14  
    15  func (s *RpcDemo) PostScoreInt(LbId string, Score int, s1 *RpcDemo) (Info string, err error) {
    16  	return "", nil //ignore the function body first.
    17  }
    18  
    19  func TestRpcDemo(ot *testing.T) {
    20  	importPath := "github.com/bronze1man/kmg/kmgGoSource"
    21  	kmgCmd.MustRun("kmg go install " + importPath)
    22  	typ := MustGetGoTypesFromReflect(reflect.TypeOf(&RpcDemo{}))
    23  
    24  	typ1, ok := typ.(*types.Pointer)
    25  	kmgTest.Equal(ok, true)
    26  
    27  	typ2, ok := typ1.Elem().(*types.Named)
    28  	kmgTest.Equal(ok, true)
    29  	kmgTest.Equal(typ2.NumMethods(), 1)
    30  
    31  	obj3 := typ2.Method(0)
    32  	kmgTest.Equal(obj3.Name(), "PostScoreInt")
    33  
    34  	typ4, ok := obj3.Type().(*types.Signature)
    35  	kmgTest.Equal(ok, true)
    36  	kmgTest.Equal(typ4.Params().Len(), 3)
    37  	kmgTest.Equal(typ4.Results().Len(), 2)
    38  
    39  	for _, testCase := range []struct {
    40  		Type   types.Type
    41  		Expect string
    42  	}{
    43  		{typ4.Params().At(0).Type(), "string"},
    44  		{typ4.Params().At(1).Type(), "int"},
    45  		{typ4.Params().At(2).Type(), "*RpcDemo"},
    46  		{typ4.Results().At(0).Type(), "string"},
    47  		{typ4.Results().At(1).Type(), "error"},
    48  	} {
    49  		typS, importPathList := MustWriteGoTypes("github.com/bronze1man/kmg/kmgGoSource", testCase.Type)
    50  		kmgTest.Equal(typS, testCase.Expect)
    51  		kmgTest.Equal(len(importPathList), 0)
    52  	}
    53  
    54  	typS, importPathList := MustWriteGoTypes("github.com/bronze1man/kmg/kmgTest", typ4.Params().At(2).Type())
    55  	kmgTest.Equal(typS, "*kmgGoSource.RpcDemo")
    56  	kmgTest.Equal(importPathList, []string{"github.com/bronze1man/kmg/kmgGoSource"})
    57  
    58  	methodSet := types.NewMethodSet(typ)
    59  	kmgTest.Equal(methodSet.Len(), 1)
    60  	kmgTest.Equal(methodSet.At(0).Obj().Name(), "PostScoreInt")
    61  
    62  }