package gomock
import (
)
type callSet struct {
expected map[callSetKey][]*Call
expectedMu *sync.Mutex
exhausted map[callSetKey][]*Call
allowOverride bool
}
type callSetKey struct {
receiver any
fname string
}
func () *callSet {
return &callSet{
expected: make(map[callSetKey][]*Call),
expectedMu: &sync.Mutex{},
exhausted: make(map[callSetKey][]*Call),
}
}
func () *callSet {
return &callSet{
expected: make(map[callSetKey][]*Call),
expectedMu: &sync.Mutex{},
exhausted: make(map[callSetKey][]*Call),
allowOverride: true,
}
}
func ( callSet) ( *Call) {
:= callSetKey{.receiver, .method}
.expectedMu.Lock()
defer .expectedMu.Unlock()
:= .expected
if .exhausted() {
= .exhausted
}
if .allowOverride {
[] = make([]*Call, 0)
}
[] = append([], )
}
func ( callSet) ( *Call) {
:= callSetKey{.receiver, .method}
.expectedMu.Lock()
defer .expectedMu.Unlock()
:= .expected[]
for , := range {
if == {
.expected[] = append([:], [+1:]...)
.exhausted[] = append(.exhausted[], )
break
}
}
}
func ( callSet) ( any, string, []any) (*Call, error) {
:= callSetKey{, }
.expectedMu.Lock()
defer .expectedMu.Unlock()
:= .expected[]
var bytes.Buffer
for , := range {
:= .matches()
if != nil {
_, _ = fmt.Fprintf(&, "\n%v", )
} else {
return , nil
}
}
:= .exhausted[]
for , := range {
if := .matches(); != nil {
_, _ = fmt.Fprintf(&, "\n%v", )
continue
}
_, _ = fmt.Fprintf(
&, "all expected calls for method %q have been exhausted", ,
)
}
if len()+len() == 0 {
_, _ = fmt.Fprintf(&, "there are no expected calls of the method %q for that receiver", )
}
return nil, errors.New(.String())
}
func ( callSet) () []*Call {
.expectedMu.Lock()
defer .expectedMu.Unlock()
:= make([]*Call, 0, len(.expected))
for , := range .expected {
for , := range {
if !.satisfied() {
= append(, )
}
}
}
return
}
func ( callSet) () bool {
.expectedMu.Lock()
defer .expectedMu.Unlock()
for , := range .expected {
for , := range {
if !.satisfied() {
return false
}
}
}
return true
}