From 1a8b5351f88c7077229fb446eecc7db7c0eefb14 Mon Sep 17 00:00:00 2001 From: Kevin Burke Date: Thu, 11 Apr 2024 14:32:29 -0700 Subject: [PATCH] assert: handle []byte array properly The regexp package works more efficiently on bytes; if you have bytes, it is easier to pass these directly to assert.Regexp than to convert them to a string first. In addition, FindIndex/FindStringIndex are unnecessary here because we immediately throw away the result - let's just call Match() instead. --- assert/assertions.go | 10 ++++++++-- assert/assertions_test.go | 5 +++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/assert/assertions.go b/assert/assertions.go index 8109ef2a8..7082e3fac 100644 --- a/assert/assertions.go +++ b/assert/assertions.go @@ -1615,7 +1615,6 @@ func ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...in // matchRegexp return true if a specified regexp matches a string. func matchRegexp(rx interface{}, str interface{}) bool { - var r *regexp.Regexp if rr, ok := rx.(*regexp.Regexp); ok { r = rr @@ -1623,7 +1622,14 @@ func matchRegexp(rx interface{}, str interface{}) bool { r = regexp.MustCompile(fmt.Sprint(rx)) } - return (r.FindStringIndex(fmt.Sprint(str)) != nil) + switch v := str.(type) { + case []byte: + return r.Match(v) + case string: + return r.MatchString(v) + default: + return r.MatchString(fmt.Sprint(v)) + } } diff --git a/assert/assertions_test.go b/assert/assertions_test.go index 0ae36cd92..fa68fe210 100644 --- a/assert/assertions_test.go +++ b/assert/assertions_test.go @@ -1972,13 +1972,16 @@ func TestRegexp(t *testing.T) { }{ {"^start", "start of the line"}, {"end$", "in the end"}, + {"end$", "in the end"}, {"[0-9]{3}[.-]?[0-9]{2}[.-]?[0-9]{2}", "My phone number is 650.12.34"}, } for _, tc := range cases { True(t, Regexp(mockT, tc.rx, tc.str)) True(t, Regexp(mockT, regexp.MustCompile(tc.rx), tc.str)) + True(t, Regexp(mockT, regexp.MustCompile(tc.rx), []byte(tc.str))) False(t, NotRegexp(mockT, tc.rx, tc.str)) + False(t, NotRegexp(mockT, tc.rx, []byte(tc.str))) False(t, NotRegexp(mockT, regexp.MustCompile(tc.rx), tc.str)) } @@ -1993,7 +1996,9 @@ func TestRegexp(t *testing.T) { for _, tc := range cases { False(t, Regexp(mockT, tc.rx, tc.str), "Expected \"%s\" to not match \"%s\"", tc.rx, tc.str) False(t, Regexp(mockT, regexp.MustCompile(tc.rx), tc.str)) + False(t, Regexp(mockT, regexp.MustCompile(tc.rx), []byte(tc.str))) True(t, NotRegexp(mockT, tc.rx, tc.str)) + True(t, NotRegexp(mockT, tc.rx, []byte(tc.str))) True(t, NotRegexp(mockT, regexp.MustCompile(tc.rx), tc.str)) } }