| 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}
 |