5 "github.com/onsi/gomega/format"
9 type BeClosedMatcher struct {
12 func (matcher *BeClosedMatcher) Match(actual interface{}) (success bool, err error) {
14 return false, fmt.Errorf("BeClosed matcher expects a channel. Got:\n%s", format.Object(actual, 1))
17 channelType := reflect.TypeOf(actual)
18 channelValue := reflect.ValueOf(actual)
20 if channelType.ChanDir() == reflect.SendDir {
21 return false, fmt.Errorf("BeClosed matcher cannot determine if a send-only channel is closed or open. Got:\n%s", format.Object(actual, 1))
24 winnerIndex, _, open := reflect.Select([]reflect.SelectCase{
25 reflect.SelectCase{Dir: reflect.SelectRecv, Chan: channelValue},
26 reflect.SelectCase{Dir: reflect.SelectDefault},
32 } else if winnerIndex == 1 {
39 func (matcher *BeClosedMatcher) FailureMessage(actual interface{}) (message string) {
40 return format.Message(actual, "to be closed")
43 func (matcher *BeClosedMatcher) NegatedFailureMessage(actual interface{}) (message string) {
44 return format.Message(actual, "to be open")