1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // Copyright 2011 Aaron Jacobs. All Rights Reserved.
- // Author: aaronjjacobs@gmail.com (Aaron Jacobs)
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- // Package oglematchers provides a set of matchers useful in a testing or
- // mocking framework. These matchers are inspired by and mostly compatible with
- // Google Test for C++ and Google JS Test.
- //
- // This package is used by github.com/smartystreets/assertions/internal/ogletest and
- // github.com/smartystreets/assertions/internal/oglemock, which may be more directly useful if you're not
- // writing your own testing package or defining your own matchers.
- package oglematchers
- // A Matcher is some predicate implicitly defining a set of values that it
- // matches. For example, GreaterThan(17) matches all numeric values greater
- // than 17, and HasSubstr("taco") matches all strings with the substring
- // "taco".
- //
- // Matchers are typically exposed to tests via constructor functions like
- // HasSubstr. In order to implement such a function you can either define your
- // own matcher type or use NewMatcher.
- type Matcher interface {
- // Check whether the supplied value belongs to the the set defined by the
- // matcher. Return a non-nil error if and only if it does not.
- //
- // The error describes why the value doesn't match. The error text is a
- // relative clause that is suitable for being placed after the value. For
- // example, a predicate that matches strings with a particular substring may,
- // when presented with a numerical value, return the following error text:
- //
- // "which is not a string"
- //
- // Then the failure message may look like:
- //
- // Expected: has substring "taco"
- // Actual: 17, which is not a string
- //
- // If the error is self-apparent based on the description of the matcher, the
- // error text may be empty (but the error still non-nil). For example:
- //
- // Expected: 17
- // Actual: 19
- //
- // If you are implementing a new matcher, see also the documentation on
- // FatalError.
- Matches(candidate interface{}) error
- // Description returns a string describing the property that values matching
- // this matcher have, as a verb phrase where the subject is the value. For
- // example, "is greather than 17" or "has substring "taco"".
- Description() string
- }
- // FatalError is an implementation of the error interface that may be returned
- // from matchers, indicating the error should be propagated. Returning a
- // *FatalError indicates that the matcher doesn't process values of the
- // supplied type, or otherwise doesn't know how to handle the value.
- //
- // For example, if GreaterThan(17) returned false for the value "taco" without
- // a fatal error, then Not(GreaterThan(17)) would return true. This is
- // technically correct, but is surprising and may mask failures where the wrong
- // sort of matcher is accidentally used. Instead, GreaterThan(17) can return a
- // fatal error, which will be propagated by Not().
- type FatalError struct {
- errorText string
- }
- // NewFatalError creates a FatalError struct with the supplied error text.
- func NewFatalError(s string) *FatalError {
- return &FatalError{s}
- }
- func (e *FatalError) Error() string {
- return e.errorText
- }
|