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
 | 
						|
}
 |