diff options
Diffstat (limited to 'vendor/github.com/stretchr/testify/assert')
5 files changed, 122 insertions, 12 deletions
diff --git a/vendor/github.com/stretchr/testify/assert/assertion_compare.go b/vendor/github.com/stretchr/testify/assert/assertion_compare.go index 3bb22a971..95d8e59da 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_compare.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_compare.go @@ -1,6 +1,7 @@  package assert  import ( +	"bytes"  	"fmt"  	"reflect"  	"time" @@ -32,7 +33,8 @@ var (  	stringType = reflect.TypeOf("") -	timeType = reflect.TypeOf(time.Time{}) +	timeType  = reflect.TypeOf(time.Time{}) +	bytesType = reflect.TypeOf([]byte{})  )  func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { @@ -323,6 +325,26 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {  			return compare(timeObj1.UnixNano(), timeObj2.UnixNano(), reflect.Int64)  		} +	case reflect.Slice: +		{ +			// We only care about the []byte type. +			if !canConvert(obj1Value, bytesType) { +				break +			} + +			// []byte can be compared! +			bytesObj1, ok := obj1.([]byte) +			if !ok { +				bytesObj1 = obj1Value.Convert(bytesType).Interface().([]byte) + +			} +			bytesObj2, ok := obj2.([]byte) +			if !ok { +				bytesObj2 = obj2Value.Convert(bytesType).Interface().([]byte) +			} + +			return CompareType(bytes.Compare(bytesObj1, bytesObj2)), true +		}  	}  	return compareEqual, false diff --git a/vendor/github.com/stretchr/testify/assert/assertion_compare_can_convert.go b/vendor/github.com/stretchr/testify/assert/assertion_compare_can_convert.go index df22c47fc..da867903e 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_compare_can_convert.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_compare_can_convert.go @@ -9,7 +9,7 @@ package assert  import "reflect" -// Wrapper around reflect.Value.CanConvert, for compatability +// Wrapper around reflect.Value.CanConvert, for compatibility  // reasons.  func canConvert(value reflect.Value, to reflect.Type) bool {  	return value.CanConvert(to) diff --git a/vendor/github.com/stretchr/testify/assert/assertion_format.go b/vendor/github.com/stretchr/testify/assert/assertion_format.go index 27e2420ed..7880b8f94 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_format.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_format.go @@ -736,6 +736,16 @@ func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta tim  	return WithinDuration(t, expected, actual, delta, append([]interface{}{msg}, args...)...)  } +// WithinRangef asserts that a time is within a time range (inclusive). +// +//   assert.WithinRangef(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") +func WithinRangef(t TestingT, actual time.Time, start time.Time, end time.Time, msg string, args ...interface{}) bool { +	if h, ok := t.(tHelper); ok { +		h.Helper() +	} +	return WithinRange(t, actual, start, end, append([]interface{}{msg}, args...)...) +} +  // YAMLEqf asserts that two YAML strings are equivalent.  func YAMLEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) bool {  	if h, ok := t.(tHelper); ok { diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go b/vendor/github.com/stretchr/testify/assert/assertion_forward.go index d9ea368d0..339515b8b 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_forward.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_forward.go @@ -1461,6 +1461,26 @@ func (a *Assertions) WithinDurationf(expected time.Time, actual time.Time, delta  	return WithinDurationf(a.t, expected, actual, delta, msg, args...)  } +// WithinRange asserts that a time is within a time range (inclusive). +// +//   a.WithinRange(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) +func (a *Assertions) WithinRange(actual time.Time, start time.Time, end time.Time, msgAndArgs ...interface{}) bool { +	if h, ok := a.t.(tHelper); ok { +		h.Helper() +	} +	return WithinRange(a.t, actual, start, end, msgAndArgs...) +} + +// WithinRangef asserts that a time is within a time range (inclusive). +// +//   a.WithinRangef(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") +func (a *Assertions) WithinRangef(actual time.Time, start time.Time, end time.Time, msg string, args ...interface{}) bool { +	if h, ok := a.t.(tHelper); ok { +		h.Helper() +	} +	return WithinRangef(a.t, actual, start, end, msg, args...) +} +  // YAMLEq asserts that two YAML strings are equivalent.  func (a *Assertions) YAMLEq(expected string, actual string, msgAndArgs ...interface{}) bool {  	if h, ok := a.t.(tHelper); ok { diff --git a/vendor/github.com/stretchr/testify/assert/assertions.go b/vendor/github.com/stretchr/testify/assert/assertions.go index 0357b2231..fa1245b18 100644 --- a/vendor/github.com/stretchr/testify/assert/assertions.go +++ b/vendor/github.com/stretchr/testify/assert/assertions.go @@ -8,6 +8,7 @@ import (  	"fmt"  	"math"  	"os" +	"path/filepath"  	"reflect"  	"regexp"  	"runtime" @@ -144,7 +145,8 @@ func CallerInfo() []string {  		if len(parts) > 1 {  			dir := parts[len(parts)-2]  			if (dir != "assert" && dir != "mock" && dir != "require") || file == "mock_test.go" { -				callers = append(callers, fmt.Sprintf("%s:%d", file, line)) +				path, _ := filepath.Abs(file) +				callers = append(callers, fmt.Sprintf("%s:%d", path, line))  			}  		} @@ -563,16 +565,17 @@ func isEmpty(object interface{}) bool {  	switch objValue.Kind() {  	// collection types are empty when they have no element -	case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice: +	case reflect.Chan, reflect.Map, reflect.Slice:  		return objValue.Len() == 0 -		// pointers are empty if nil or if the value they point to is empty +	// pointers are empty if nil or if the value they point to is empty  	case reflect.Ptr:  		if objValue.IsNil() {  			return true  		}  		deref := objValue.Elem().Interface()  		return isEmpty(deref) -		// for all other types, compare against the zero value +	// for all other types, compare against the zero value +	// array types are empty when they match their zero-initialized state  	default:  		zero := reflect.Zero(objValue.Type())  		return reflect.DeepEqual(object, zero.Interface()) @@ -815,7 +818,6 @@ func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok  		return true // we consider nil to be equal to the nil set  	} -	subsetValue := reflect.ValueOf(subset)  	defer func() {  		if e := recover(); e != nil {  			ok = false @@ -825,14 +827,32 @@ func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok  	listKind := reflect.TypeOf(list).Kind()  	subsetKind := reflect.TypeOf(subset).Kind() -	if listKind != reflect.Array && listKind != reflect.Slice { +	if listKind != reflect.Array && listKind != reflect.Slice && listKind != reflect.Map {  		return Fail(t, fmt.Sprintf("%q has an unsupported type %s", list, listKind), msgAndArgs...)  	} -	if subsetKind != reflect.Array && subsetKind != reflect.Slice { +	if subsetKind != reflect.Array && subsetKind != reflect.Slice && listKind != reflect.Map {  		return Fail(t, fmt.Sprintf("%q has an unsupported type %s", subset, subsetKind), msgAndArgs...)  	} +	subsetValue := reflect.ValueOf(subset) +	if subsetKind == reflect.Map && listKind == reflect.Map { +		listValue := reflect.ValueOf(list) +		subsetKeys := subsetValue.MapKeys() + +		for i := 0; i < len(subsetKeys); i++ { +			subsetKey := subsetKeys[i] +			subsetElement := subsetValue.MapIndex(subsetKey).Interface() +			listElement := listValue.MapIndex(subsetKey).Interface() + +			if !ObjectsAreEqual(subsetElement, listElement) { +				return Fail(t, fmt.Sprintf("\"%s\" does not contain \"%s\"", list, subsetElement), msgAndArgs...) +			} +		} + +		return true +	} +  	for i := 0; i < subsetValue.Len(); i++ {  		element := subsetValue.Index(i).Interface()  		ok, found := containsElement(list, element) @@ -859,7 +879,6 @@ func NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{})  		return Fail(t, "nil is the empty set which is a subset of every set", msgAndArgs...)  	} -	subsetValue := reflect.ValueOf(subset)  	defer func() {  		if e := recover(); e != nil {  			ok = false @@ -869,14 +888,32 @@ func NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{})  	listKind := reflect.TypeOf(list).Kind()  	subsetKind := reflect.TypeOf(subset).Kind() -	if listKind != reflect.Array && listKind != reflect.Slice { +	if listKind != reflect.Array && listKind != reflect.Slice && listKind != reflect.Map {  		return Fail(t, fmt.Sprintf("%q has an unsupported type %s", list, listKind), msgAndArgs...)  	} -	if subsetKind != reflect.Array && subsetKind != reflect.Slice { +	if subsetKind != reflect.Array && subsetKind != reflect.Slice && listKind != reflect.Map {  		return Fail(t, fmt.Sprintf("%q has an unsupported type %s", subset, subsetKind), msgAndArgs...)  	} +	subsetValue := reflect.ValueOf(subset) +	if subsetKind == reflect.Map && listKind == reflect.Map { +		listValue := reflect.ValueOf(list) +		subsetKeys := subsetValue.MapKeys() + +		for i := 0; i < len(subsetKeys); i++ { +			subsetKey := subsetKeys[i] +			subsetElement := subsetValue.MapIndex(subsetKey).Interface() +			listElement := listValue.MapIndex(subsetKey).Interface() + +			if !ObjectsAreEqual(subsetElement, listElement) { +				return true +			} +		} + +		return Fail(t, fmt.Sprintf("%q is a subset of %q", subset, list), msgAndArgs...) +	} +  	for i := 0; i < subsetValue.Len(); i++ {  		element := subsetValue.Index(i).Interface()  		ok, found := containsElement(list, element) @@ -1109,6 +1146,27 @@ func WithinDuration(t TestingT, expected, actual time.Time, delta time.Duration,  	return true  } +// WithinRange asserts that a time is within a time range (inclusive). +// +//   assert.WithinRange(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) +func WithinRange(t TestingT, actual, start, end time.Time, msgAndArgs ...interface{}) bool { +	if h, ok := t.(tHelper); ok { +		h.Helper() +	} + +	if end.Before(start) { +		return Fail(t, "Start should be before end", msgAndArgs...) +	} + +	if actual.Before(start) { +		return Fail(t, fmt.Sprintf("Time %v expected to be in time range %v to %v, but is before the range", actual, start, end), msgAndArgs...) +	} else if actual.After(end) { +		return Fail(t, fmt.Sprintf("Time %v expected to be in time range %v to %v, but is after the range", actual, start, end), msgAndArgs...) +	} + +	return true +} +  func toFloat(x interface{}) (float64, bool) {  	var xf float64  	xok := true  | 
