// Copyright 2023 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 reflect_test import ( "reflect" "testing" ) func TestTypeFor(t *testing.T) { type ( mystring string myiface interface{} ) testcases := []struct { wantFrom any got reflect.Type }{ {new(int), reflect.TypeFor[int]()}, {new(int64), reflect.TypeFor[int64]()}, {new(string), reflect.TypeFor[string]()}, {new(mystring), reflect.TypeFor[mystring]()}, {new(any), reflect.TypeFor[any]()}, {new(myiface), reflect.TypeFor[myiface]()}, } for _, tc := range testcases { want := reflect.ValueOf(tc.wantFrom).Elem().Type() if want != tc.got { t.Errorf("unexpected reflect.Type: got %v; want %v", tc.got, want) } } } func TestStructOfEmbeddedIfaceMethodCall(t *testing.T) { type Named interface { Name() string } typ := reflect.StructOf([]reflect.StructField{ { Anonymous: true, Name: "Named", Type: reflect.TypeFor[Named](), }, }) v := reflect.New(typ).Elem() v.Field(0).Set( reflect.ValueOf(reflect.TypeFor[string]()), ) x := v.Interface().(Named) shouldPanic("StructOf does not support methods of embedded interfaces", func() { _ = x.Name() }) }