// 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.md 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) } }) } }