| // Copyright 2019, 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 function | |
| import ( | |
| "bytes" | |
| "reflect" | |
| "testing" | |
| ) | |
| type myType struct{ bytes.Buffer } | |
| func (myType) valueMethod() {} | |
| func (myType) ValueMethod() {} | |
| func (*myType) pointerMethod() {} | |
| func (*myType) PointerMethod() {} | |
| func TestNameOf(t *testing.T) { | |
| tests := []struct { | |
| fnc interface{} | |
| want string | |
| }{ | |
| {TestNameOf, "function.TestNameOf"}, | |
| {func() {}, "function.TestNameOf.func1"}, | |
| {(myType).valueMethod, "function.myType.valueMethod"}, | |
| {(myType).ValueMethod, "function.myType.ValueMethod"}, | |
| {(myType{}).valueMethod, "function.myType.valueMethod"}, | |
| {(myType{}).ValueMethod, "function.myType.ValueMethod"}, | |
| {(*myType).valueMethod, "function.myType.valueMethod"}, | |
| {(*myType).ValueMethod, "function.myType.ValueMethod"}, | |
| {(&myType{}).valueMethod, "function.myType.valueMethod"}, | |
| {(&myType{}).ValueMethod, "function.myType.ValueMethod"}, | |
| {(*myType).pointerMethod, "function.myType.pointerMethod"}, | |
| {(*myType).PointerMethod, "function.myType.PointerMethod"}, | |
| {(&myType{}).pointerMethod, "function.myType.pointerMethod"}, | |
| {(&myType{}).PointerMethod, "function.myType.PointerMethod"}, | |
| {(*myType).Write, "function.myType.Write"}, | |
| {(&myType{}).Write, "bytes.Buffer.Write"}, | |
| } | |
| for _, tt := range tests { | |
| t.Run("", func(t *testing.T) { | |
| got := NameOf(reflect.ValueOf(tt.fnc)) | |
| if got != tt.want { | |
| t.Errorf("NameOf() = %v, want %v", got, tt.want) | |
| } | |
| }) | |
| } | |
| } |