package gomock import ( "fmt" "reflect" ) // getString is a safe way to convert a value to a string for printing results // If the value is a a mock, getString avoids calling the mocked String() method, // which avoids potential deadlocks func getString(x any) string { if isGeneratedMock(x) { return fmt.Sprintf("%T", x) } if s, ok := x.(fmt.Stringer); ok { return s.String() } return fmt.Sprintf("%v", x) } // isGeneratedMock checks if the given type has a "isgomock" field, // indicating it is a generated mock. func isGeneratedMock(x any) bool { typ := reflect.TypeOf(x) if typ == nil { return false } if typ.Kind() == reflect.Ptr { typ = typ.Elem() } if typ.Kind() != reflect.Struct { return false } _, isgomock := typ.FieldByName("isgomock") return isgomock }