...

Source file src/github.com/stretchr/testify/assert/assertion_order.go

Documentation: github.com/stretchr/testify/assert

     1  package assert
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  )
     7  
     8  // isOrdered checks that collection contains orderable elements.
     9  func isOrdered(t TestingT, object interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool {
    10  	objKind := reflect.TypeOf(object).Kind()
    11  	if objKind != reflect.Slice && objKind != reflect.Array {
    12  		return false
    13  	}
    14  
    15  	objValue := reflect.ValueOf(object)
    16  	objLen := objValue.Len()
    17  
    18  	if objLen <= 1 {
    19  		return true
    20  	}
    21  
    22  	value := objValue.Index(0)
    23  	valueInterface := value.Interface()
    24  	firstValueKind := value.Kind()
    25  
    26  	for i := 1; i < objLen; i++ {
    27  		prevValue := value
    28  		prevValueInterface := valueInterface
    29  
    30  		value = objValue.Index(i)
    31  		valueInterface = value.Interface()
    32  
    33  		compareResult, isComparable := compare(prevValueInterface, valueInterface, firstValueKind)
    34  
    35  		if !isComparable {
    36  			return Fail(t, fmt.Sprintf("Can not compare type \"%s\" and \"%s\"", reflect.TypeOf(value), reflect.TypeOf(prevValue)), msgAndArgs...)
    37  		}
    38  
    39  		if !containsValue(allowedComparesResults, compareResult) {
    40  			return Fail(t, fmt.Sprintf(failMessage, prevValue, value), msgAndArgs...)
    41  		}
    42  	}
    43  
    44  	return true
    45  }
    46  
    47  // IsIncreasing asserts that the collection is increasing
    48  //
    49  //	assert.IsIncreasing(t, []int{1, 2, 3})
    50  //	assert.IsIncreasing(t, []float{1, 2})
    51  //	assert.IsIncreasing(t, []string{"a", "b"})
    52  func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
    53  	return isOrdered(t, object, []CompareType{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...)
    54  }
    55  
    56  // IsNonIncreasing asserts that the collection is not increasing
    57  //
    58  //	assert.IsNonIncreasing(t, []int{2, 1, 1})
    59  //	assert.IsNonIncreasing(t, []float{2, 1})
    60  //	assert.IsNonIncreasing(t, []string{"b", "a"})
    61  func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
    62  	return isOrdered(t, object, []CompareType{compareEqual, compareGreater}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...)
    63  }
    64  
    65  // IsDecreasing asserts that the collection is decreasing
    66  //
    67  //	assert.IsDecreasing(t, []int{2, 1, 0})
    68  //	assert.IsDecreasing(t, []float{2, 1})
    69  //	assert.IsDecreasing(t, []string{"b", "a"})
    70  func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
    71  	return isOrdered(t, object, []CompareType{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...)
    72  }
    73  
    74  // IsNonDecreasing asserts that the collection is not decreasing
    75  //
    76  //	assert.IsNonDecreasing(t, []int{1, 1, 2})
    77  //	assert.IsNonDecreasing(t, []float{1, 2})
    78  //	assert.IsNonDecreasing(t, []string{"a", "b"})
    79  func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
    80  	return isOrdered(t, object, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...)
    81  }
    82  

View as plain text