mirror of https://github.com/stretchr/testify.git
Remove canConvert because Go 1.16 is dropped from support
parent
882382d845
commit
1ee798c140
|
@ -308,7 +308,7 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
{
|
{
|
||||||
// All structs enter here. We're not interested in most types.
|
// All structs enter here. We're not interested in most types.
|
||||||
if !canConvert(obj1Value, timeType) {
|
if !obj1Value.CanConvert(timeType) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,7 +328,7 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
|
||||||
case reflect.Slice:
|
case reflect.Slice:
|
||||||
{
|
{
|
||||||
// We only care about the []byte type.
|
// We only care about the []byte type.
|
||||||
if !canConvert(obj1Value, bytesType) {
|
if !obj1Value.CanConvert(bytesType) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
//go:build go1.17
|
|
||||||
// +build go1.17
|
|
||||||
|
|
||||||
// TODO: once support for Go 1.16 is dropped, this file can be
|
|
||||||
// merged/removed with assertion_compare_go1.17_test.go and
|
|
||||||
// assertion_compare_legacy.go
|
|
||||||
|
|
||||||
package assert
|
|
||||||
|
|
||||||
import "reflect"
|
|
||||||
|
|
||||||
// Wrapper around reflect.Value.CanConvert, for compatibility
|
|
||||||
// reasons.
|
|
||||||
func canConvert(value reflect.Value, to reflect.Type) bool {
|
|
||||||
return value.CanConvert(to)
|
|
||||||
}
|
|
|
@ -1,182 +0,0 @@
|
||||||
//go:build go1.17
|
|
||||||
// +build go1.17
|
|
||||||
|
|
||||||
// TODO: once support for Go 1.16 is dropped, this file can be
|
|
||||||
// merged/removed with assertion_compare_can_convert.go and
|
|
||||||
// assertion_compare_legacy.go
|
|
||||||
|
|
||||||
package assert
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"reflect"
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestCompare17(t *testing.T) {
|
|
||||||
type customTime time.Time
|
|
||||||
type customBytes []byte
|
|
||||||
for _, currCase := range []struct {
|
|
||||||
less interface{}
|
|
||||||
greater interface{}
|
|
||||||
cType string
|
|
||||||
}{
|
|
||||||
{less: time.Now(), greater: time.Now().Add(time.Hour), cType: "time.Time"},
|
|
||||||
{less: customTime(time.Now()), greater: customTime(time.Now().Add(time.Hour)), cType: "time.Time"},
|
|
||||||
{less: []byte{1, 1}, greater: []byte{1, 2}, cType: "[]byte"},
|
|
||||||
{less: customBytes([]byte{1, 1}), greater: customBytes([]byte{1, 2}), cType: "[]byte"},
|
|
||||||
} {
|
|
||||||
resLess, isComparable := compare(currCase.less, currCase.greater, reflect.ValueOf(currCase.less).Kind())
|
|
||||||
if !isComparable {
|
|
||||||
t.Error("object should be comparable for type " + currCase.cType)
|
|
||||||
}
|
|
||||||
|
|
||||||
if resLess != compareLess {
|
|
||||||
t.Errorf("object less (%v) should be less than greater (%v) for type "+currCase.cType,
|
|
||||||
currCase.less, currCase.greater)
|
|
||||||
}
|
|
||||||
|
|
||||||
resGreater, isComparable := compare(currCase.greater, currCase.less, reflect.ValueOf(currCase.less).Kind())
|
|
||||||
if !isComparable {
|
|
||||||
t.Error("object are comparable for type " + currCase.cType)
|
|
||||||
}
|
|
||||||
|
|
||||||
if resGreater != compareGreater {
|
|
||||||
t.Errorf("object greater should be greater than less for type " + currCase.cType)
|
|
||||||
}
|
|
||||||
|
|
||||||
resEqual, isComparable := compare(currCase.less, currCase.less, reflect.ValueOf(currCase.less).Kind())
|
|
||||||
if !isComparable {
|
|
||||||
t.Error("object are comparable for type " + currCase.cType)
|
|
||||||
}
|
|
||||||
|
|
||||||
if resEqual != 0 {
|
|
||||||
t.Errorf("objects should be equal for type " + currCase.cType)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestGreater17(t *testing.T) {
|
|
||||||
mockT := new(testing.T)
|
|
||||||
|
|
||||||
if !Greater(mockT, 2, 1) {
|
|
||||||
t.Error("Greater should return true")
|
|
||||||
}
|
|
||||||
|
|
||||||
if Greater(mockT, 1, 1) {
|
|
||||||
t.Error("Greater should return false")
|
|
||||||
}
|
|
||||||
|
|
||||||
if Greater(mockT, 1, 2) {
|
|
||||||
t.Error("Greater should return false")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check error report
|
|
||||||
for _, currCase := range []struct {
|
|
||||||
less interface{}
|
|
||||||
greater interface{}
|
|
||||||
msg string
|
|
||||||
}{
|
|
||||||
{less: []byte{1, 1}, greater: []byte{1, 2}, msg: `"[1 1]" is not greater than "[1 2]"`},
|
|
||||||
{less: time.Time{}, greater: time.Time{}.Add(time.Hour), msg: `"0001-01-01 00:00:00 +0000 UTC" is not greater than "0001-01-01 01:00:00 +0000 UTC"`},
|
|
||||||
} {
|
|
||||||
out := &outputT{buf: bytes.NewBuffer(nil)}
|
|
||||||
False(t, Greater(out, currCase.less, currCase.greater))
|
|
||||||
Contains(t, out.buf.String(), currCase.msg)
|
|
||||||
Contains(t, out.helpers, "github.com/stretchr/testify/assert.Greater")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestGreaterOrEqual17(t *testing.T) {
|
|
||||||
mockT := new(testing.T)
|
|
||||||
|
|
||||||
if !GreaterOrEqual(mockT, 2, 1) {
|
|
||||||
t.Error("GreaterOrEqual should return true")
|
|
||||||
}
|
|
||||||
|
|
||||||
if !GreaterOrEqual(mockT, 1, 1) {
|
|
||||||
t.Error("GreaterOrEqual should return true")
|
|
||||||
}
|
|
||||||
|
|
||||||
if GreaterOrEqual(mockT, 1, 2) {
|
|
||||||
t.Error("GreaterOrEqual should return false")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check error report
|
|
||||||
for _, currCase := range []struct {
|
|
||||||
less interface{}
|
|
||||||
greater interface{}
|
|
||||||
msg string
|
|
||||||
}{
|
|
||||||
{less: []byte{1, 1}, greater: []byte{1, 2}, msg: `"[1 1]" is not greater than or equal to "[1 2]"`},
|
|
||||||
{less: time.Time{}, greater: time.Time{}.Add(time.Hour), msg: `"0001-01-01 00:00:00 +0000 UTC" is not greater than or equal to "0001-01-01 01:00:00 +0000 UTC"`},
|
|
||||||
} {
|
|
||||||
out := &outputT{buf: bytes.NewBuffer(nil)}
|
|
||||||
False(t, GreaterOrEqual(out, currCase.less, currCase.greater))
|
|
||||||
Contains(t, out.buf.String(), currCase.msg)
|
|
||||||
Contains(t, out.helpers, "github.com/stretchr/testify/assert.GreaterOrEqual")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLess17(t *testing.T) {
|
|
||||||
mockT := new(testing.T)
|
|
||||||
|
|
||||||
if !Less(mockT, 1, 2) {
|
|
||||||
t.Error("Less should return true")
|
|
||||||
}
|
|
||||||
|
|
||||||
if Less(mockT, 1, 1) {
|
|
||||||
t.Error("Less should return false")
|
|
||||||
}
|
|
||||||
|
|
||||||
if Less(mockT, 2, 1) {
|
|
||||||
t.Error("Less should return false")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check error report
|
|
||||||
for _, currCase := range []struct {
|
|
||||||
less interface{}
|
|
||||||
greater interface{}
|
|
||||||
msg string
|
|
||||||
}{
|
|
||||||
{less: []byte{1, 1}, greater: []byte{1, 2}, msg: `"[1 2]" is not less than "[1 1]"`},
|
|
||||||
{less: time.Time{}, greater: time.Time{}.Add(time.Hour), msg: `"0001-01-01 01:00:00 +0000 UTC" is not less than "0001-01-01 00:00:00 +0000 UTC"`},
|
|
||||||
} {
|
|
||||||
out := &outputT{buf: bytes.NewBuffer(nil)}
|
|
||||||
False(t, Less(out, currCase.greater, currCase.less))
|
|
||||||
Contains(t, out.buf.String(), currCase.msg)
|
|
||||||
Contains(t, out.helpers, "github.com/stretchr/testify/assert.Less")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLessOrEqual17(t *testing.T) {
|
|
||||||
mockT := new(testing.T)
|
|
||||||
|
|
||||||
if !LessOrEqual(mockT, 1, 2) {
|
|
||||||
t.Error("LessOrEqual should return true")
|
|
||||||
}
|
|
||||||
|
|
||||||
if !LessOrEqual(mockT, 1, 1) {
|
|
||||||
t.Error("LessOrEqual should return true")
|
|
||||||
}
|
|
||||||
|
|
||||||
if LessOrEqual(mockT, 2, 1) {
|
|
||||||
t.Error("LessOrEqual should return false")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check error report
|
|
||||||
for _, currCase := range []struct {
|
|
||||||
less interface{}
|
|
||||||
greater interface{}
|
|
||||||
msg string
|
|
||||||
}{
|
|
||||||
{less: []byte{1, 1}, greater: []byte{1, 2}, msg: `"[1 2]" is not less than or equal to "[1 1]"`},
|
|
||||||
{less: time.Time{}, greater: time.Time{}.Add(time.Hour), msg: `"0001-01-01 01:00:00 +0000 UTC" is not less than or equal to "0001-01-01 00:00:00 +0000 UTC"`},
|
|
||||||
} {
|
|
||||||
out := &outputT{buf: bytes.NewBuffer(nil)}
|
|
||||||
False(t, LessOrEqual(out, currCase.greater, currCase.less))
|
|
||||||
Contains(t, out.buf.String(), currCase.msg)
|
|
||||||
Contains(t, out.helpers, "github.com/stretchr/testify/assert.LessOrEqual")
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
//go:build !go1.17
|
|
||||||
// +build !go1.17
|
|
||||||
|
|
||||||
// TODO: once support for Go 1.16 is dropped, this file can be
|
|
||||||
// merged/removed with assertion_compare_go1.17_test.go and
|
|
||||||
// assertion_compare_can_convert.go
|
|
||||||
|
|
||||||
package assert
|
|
||||||
|
|
||||||
import "reflect"
|
|
||||||
|
|
||||||
// Older versions of Go does not have the reflect.Value.CanConvert
|
|
||||||
// method.
|
|
||||||
func canConvert(value reflect.Value, to reflect.Type) bool {
|
|
||||||
return false
|
|
||||||
}
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCompare(t *testing.T) {
|
func TestCompare(t *testing.T) {
|
||||||
|
@ -22,6 +23,8 @@ func TestCompare(t *testing.T) {
|
||||||
type customFloat32 float32
|
type customFloat32 float32
|
||||||
type customFloat64 float64
|
type customFloat64 float64
|
||||||
type customString string
|
type customString string
|
||||||
|
type customTime time.Time
|
||||||
|
type customBytes []byte
|
||||||
for _, currCase := range []struct {
|
for _, currCase := range []struct {
|
||||||
less interface{}
|
less interface{}
|
||||||
greater interface{}
|
greater interface{}
|
||||||
|
@ -52,6 +55,10 @@ func TestCompare(t *testing.T) {
|
||||||
{less: customFloat32(1.23), greater: customFloat32(2.23), cType: "float32"},
|
{less: customFloat32(1.23), greater: customFloat32(2.23), cType: "float32"},
|
||||||
{less: float64(1.23), greater: float64(2.34), cType: "float64"},
|
{less: float64(1.23), greater: float64(2.34), cType: "float64"},
|
||||||
{less: customFloat64(1.23), greater: customFloat64(2.34), cType: "float64"},
|
{less: customFloat64(1.23), greater: customFloat64(2.34), cType: "float64"},
|
||||||
|
{less: time.Now(), greater: time.Now().Add(time.Hour), cType: "time.Time"},
|
||||||
|
{less: customTime(time.Now()), greater: customTime(time.Now().Add(time.Hour)), cType: "time.Time"},
|
||||||
|
{less: []byte{1, 1}, greater: []byte{1, 2}, cType: "[]byte"},
|
||||||
|
{less: customBytes([]byte{1, 1}), greater: customBytes([]byte{1, 2}), cType: "[]byte"},
|
||||||
} {
|
} {
|
||||||
resLess, isComparable := compare(currCase.less, currCase.greater, reflect.ValueOf(currCase.less).Kind())
|
resLess, isComparable := compare(currCase.less, currCase.greater, reflect.ValueOf(currCase.less).Kind())
|
||||||
if !isComparable {
|
if !isComparable {
|
||||||
|
@ -148,6 +155,8 @@ func TestGreater(t *testing.T) {
|
||||||
{less: uint64(1), greater: uint64(2), msg: `"1" is not greater than "2"`},
|
{less: uint64(1), greater: uint64(2), msg: `"1" is not greater than "2"`},
|
||||||
{less: float32(1.23), greater: float32(2.34), msg: `"1.23" is not greater than "2.34"`},
|
{less: float32(1.23), greater: float32(2.34), msg: `"1.23" is not greater than "2.34"`},
|
||||||
{less: float64(1.23), greater: float64(2.34), msg: `"1.23" is not greater than "2.34"`},
|
{less: float64(1.23), greater: float64(2.34), msg: `"1.23" is not greater than "2.34"`},
|
||||||
|
{less: []byte{1, 1}, greater: []byte{1, 2}, msg: `"[1 1]" is not greater than "[1 2]"`},
|
||||||
|
{less: time.Time{}, greater: time.Time{}.Add(time.Hour), msg: `"0001-01-01 00:00:00 +0000 UTC" is not greater than "0001-01-01 01:00:00 +0000 UTC"`},
|
||||||
} {
|
} {
|
||||||
out := &outputT{buf: bytes.NewBuffer(nil)}
|
out := &outputT{buf: bytes.NewBuffer(nil)}
|
||||||
False(t, Greater(out, currCase.less, currCase.greater))
|
False(t, Greater(out, currCase.less, currCase.greater))
|
||||||
|
@ -189,6 +198,8 @@ func TestGreaterOrEqual(t *testing.T) {
|
||||||
{less: uint64(1), greater: uint64(2), msg: `"1" is not greater than or equal to "2"`},
|
{less: uint64(1), greater: uint64(2), msg: `"1" is not greater than or equal to "2"`},
|
||||||
{less: float32(1.23), greater: float32(2.34), msg: `"1.23" is not greater than or equal to "2.34"`},
|
{less: float32(1.23), greater: float32(2.34), msg: `"1.23" is not greater than or equal to "2.34"`},
|
||||||
{less: float64(1.23), greater: float64(2.34), msg: `"1.23" is not greater than or equal to "2.34"`},
|
{less: float64(1.23), greater: float64(2.34), msg: `"1.23" is not greater than or equal to "2.34"`},
|
||||||
|
{less: []byte{1, 1}, greater: []byte{1, 2}, msg: `"[1 1]" is not greater than or equal to "[1 2]"`},
|
||||||
|
{less: time.Time{}, greater: time.Time{}.Add(time.Hour), msg: `"0001-01-01 00:00:00 +0000 UTC" is not greater than or equal to "0001-01-01 01:00:00 +0000 UTC"`},
|
||||||
} {
|
} {
|
||||||
out := &outputT{buf: bytes.NewBuffer(nil)}
|
out := &outputT{buf: bytes.NewBuffer(nil)}
|
||||||
False(t, GreaterOrEqual(out, currCase.less, currCase.greater))
|
False(t, GreaterOrEqual(out, currCase.less, currCase.greater))
|
||||||
|
@ -230,6 +241,8 @@ func TestLess(t *testing.T) {
|
||||||
{less: uint64(1), greater: uint64(2), msg: `"2" is not less than "1"`},
|
{less: uint64(1), greater: uint64(2), msg: `"2" is not less than "1"`},
|
||||||
{less: float32(1.23), greater: float32(2.34), msg: `"2.34" is not less than "1.23"`},
|
{less: float32(1.23), greater: float32(2.34), msg: `"2.34" is not less than "1.23"`},
|
||||||
{less: float64(1.23), greater: float64(2.34), msg: `"2.34" is not less than "1.23"`},
|
{less: float64(1.23), greater: float64(2.34), msg: `"2.34" is not less than "1.23"`},
|
||||||
|
{less: []byte{1, 1}, greater: []byte{1, 2}, msg: `"[1 2]" is not less than "[1 1]"`},
|
||||||
|
{less: time.Time{}, greater: time.Time{}.Add(time.Hour), msg: `"0001-01-01 01:00:00 +0000 UTC" is not less than "0001-01-01 00:00:00 +0000 UTC"`},
|
||||||
} {
|
} {
|
||||||
out := &outputT{buf: bytes.NewBuffer(nil)}
|
out := &outputT{buf: bytes.NewBuffer(nil)}
|
||||||
False(t, Less(out, currCase.greater, currCase.less))
|
False(t, Less(out, currCase.greater, currCase.less))
|
||||||
|
@ -271,6 +284,8 @@ func TestLessOrEqual(t *testing.T) {
|
||||||
{less: uint64(1), greater: uint64(2), msg: `"2" is not less than or equal to "1"`},
|
{less: uint64(1), greater: uint64(2), msg: `"2" is not less than or equal to "1"`},
|
||||||
{less: float32(1.23), greater: float32(2.34), msg: `"2.34" is not less than or equal to "1.23"`},
|
{less: float32(1.23), greater: float32(2.34), msg: `"2.34" is not less than or equal to "1.23"`},
|
||||||
{less: float64(1.23), greater: float64(2.34), msg: `"2.34" is not less than or equal to "1.23"`},
|
{less: float64(1.23), greater: float64(2.34), msg: `"2.34" is not less than or equal to "1.23"`},
|
||||||
|
{less: []byte{1, 1}, greater: []byte{1, 2}, msg: `"[1 2]" is not less than or equal to "[1 1]"`},
|
||||||
|
{less: time.Time{}, greater: time.Time{}.Add(time.Hour), msg: `"0001-01-01 01:00:00 +0000 UTC" is not less than or equal to "0001-01-01 00:00:00 +0000 UTC"`},
|
||||||
} {
|
} {
|
||||||
out := &outputT{buf: bytes.NewBuffer(nil)}
|
out := &outputT{buf: bytes.NewBuffer(nil)}
|
||||||
False(t, LessOrEqual(out, currCase.greater, currCase.less))
|
False(t, LessOrEqual(out, currCase.greater, currCase.less))
|
||||||
|
|
Loading…
Reference in New Issue