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 }