Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
kardolus
GitHub Repository: kardolus/chatgpt-cli
Path: blob/main/vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go
2880 views
1
// untested sections: 2
2
3
package matchers
4
5
import (
6
"fmt"
7
"reflect"
8
9
"github.com/onsi/gomega/format"
10
)
11
12
type BeClosedMatcher struct {
13
}
14
15
func (matcher *BeClosedMatcher) Match(actual any) (success bool, err error) {
16
if !isChan(actual) {
17
return false, fmt.Errorf("BeClosed matcher expects a channel. Got:\n%s", format.Object(actual, 1))
18
}
19
20
channelType := reflect.TypeOf(actual)
21
channelValue := reflect.ValueOf(actual)
22
23
if channelType.ChanDir() == reflect.SendDir {
24
return false, fmt.Errorf("BeClosed matcher cannot determine if a send-only channel is closed or open. Got:\n%s", format.Object(actual, 1))
25
}
26
27
winnerIndex, _, open := reflect.Select([]reflect.SelectCase{
28
{Dir: reflect.SelectRecv, Chan: channelValue},
29
{Dir: reflect.SelectDefault},
30
})
31
32
var closed bool
33
if winnerIndex == 0 {
34
closed = !open
35
} else if winnerIndex == 1 {
36
closed = false
37
}
38
39
return closed, nil
40
}
41
42
func (matcher *BeClosedMatcher) FailureMessage(actual any) (message string) {
43
return format.Message(actual, "to be closed")
44
}
45
46
func (matcher *BeClosedMatcher) NegatedFailureMessage(actual any) (message string) {
47
return format.Message(actual, "to be open")
48
}
49
50