From 7a796b8f87564b1bbcfef00dc8e420fefd78a08c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Mengu=C3=A9?= Date: Mon, 31 Jul 2023 00:09:47 +0200 Subject: [PATCH 1/2] assert: simplify getLen() implementation --- assert/assertions.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/assert/assertions.go b/assert/assertions.go index 6ab0ec347..fae83c8ad 100644 --- a/assert/assertions.go +++ b/assert/assertions.go @@ -736,9 +736,7 @@ func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { func getLen(x interface{}) (ok bool, length int) { v := reflect.ValueOf(x) defer func() { - if e := recover(); e != nil { - ok = false - } + ok = recover() == nil }() return true, v.Len() } From 9e58631a0394643b3139c5f64273f914980b77b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Mengu=C3=A9?= Date: Mon, 31 Jul 2023 00:14:50 +0200 Subject: [PATCH 2/2] assert: reverse return values of internal getLen() Reverse order of return values of internal function getLen() to be more consistent with stdlib (ex: os.LookupEnv). Old: func (any) (ok bool, length int) New: func (any) (length int, ok bool) --- assert/assertions.go | 10 +++++----- assert/assertions_test.go | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/assert/assertions.go b/assert/assertions.go index fae83c8ad..719164e7e 100644 --- a/assert/assertions.go +++ b/assert/assertions.go @@ -731,14 +731,14 @@ func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { } -// getLen try to get length of object. -// return (false, 0) if impossible. -func getLen(x interface{}) (ok bool, length int) { +// getLen tries to get the length of an object. +// It returns (0, false) if impossible. +func getLen(x interface{}) (length int, ok bool) { v := reflect.ValueOf(x) defer func() { ok = recover() == nil }() - return true, v.Len() + return v.Len(), true } // Len asserts that the specified object has specific length. @@ -749,7 +749,7 @@ func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) if h, ok := t.(tHelper); ok { h.Helper() } - ok, l := getLen(object) + l, ok := getLen(object) if !ok { return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", object), msgAndArgs...) } diff --git a/assert/assertions_test.go b/assert/assertions_test.go index 101bd418a..40e372015 100644 --- a/assert/assertions_test.go +++ b/assert/assertions_test.go @@ -1582,7 +1582,7 @@ func Test_getLen(t *testing.T) { struct{}{}, } for _, v := range falseCases { - ok, l := getLen(v) + l, ok := getLen(v) False(t, ok, "Expected getLen fail to get length of %#v", v) Equal(t, 0, l, "getLen should return 0 for %#v", v) } @@ -1611,7 +1611,7 @@ func Test_getLen(t *testing.T) { } for _, c := range trueCases { - ok, l := getLen(c.v) + l, ok := getLen(c.v) True(t, ok, "Expected getLen success to get length of %#v", c.v) Equal(t, c.l, l) }