37 lines
795 B
Go
37 lines
795 B
Go
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
|
|
}
|