| package matchers |
| |
| import ( |
| "fmt" |
| "os" |
| |
| "github.com/onsi/gomega/format" |
| ) |
| |
| type notARegularFileError struct { |
| os.FileInfo |
| } |
| |
| func (t notARegularFileError) Error() string { |
| fileInfo := os.FileInfo(t) |
| switch { |
| case fileInfo.IsDir(): |
| return "file is a directory" |
| default: |
| return fmt.Sprintf("file mode is: %s", fileInfo.Mode().String()) |
| } |
| } |
| |
| type BeARegularFileMatcher struct { |
| expected interface{} |
| err error |
| } |
| |
| func (matcher *BeARegularFileMatcher) Match(actual interface{}) (success bool, err error) { |
| actualFilename, ok := actual.(string) |
| if !ok { |
| return false, fmt.Errorf("BeARegularFileMatcher matcher expects a file path") |
| } |
| |
| fileInfo, err := os.Stat(actualFilename) |
| if err != nil { |
| matcher.err = err |
| return false, nil |
| } |
| |
| if !fileInfo.Mode().IsRegular() { |
| matcher.err = notARegularFileError{fileInfo} |
| return false, nil |
| } |
| return true, nil |
| } |
| |
| func (matcher *BeARegularFileMatcher) FailureMessage(actual interface{}) (message string) { |
| return format.Message(actual, fmt.Sprintf("to be a regular file: %s", matcher.err)) |
| } |
| |
| func (matcher *BeARegularFileMatcher) NegatedFailureMessage(actual interface{}) (message string) { |
| return format.Message(actual, fmt.Sprintf("not be a regular file")) |
| } |