mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
bytes, strings: add tests for TrimLeftFunc and TrimRightFunc
When I was working on the fix for #31038 (make TrimSpace return nil on all-space input) I noticed that there were no tests for TrimLeftFunc and TrimRightFunc, including the funky nil behavior. So add some! I've just reused the existing TrimFunc test cases for TrimLeftFunc and TrimRightFunc, as well as adding new tests for the empty string and all-trimmed cases (which test the nil-returning behavior of TrimFunc and TrimLeftFunc). Change-Id: Ib580d4364e9b3c91350305f9d9873080d7862904 Reviewed-on: https://go-review.googlesource.com/c/go/+/170061 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
ddef157813
commit
154e5abfcd
2 changed files with 118 additions and 24 deletions
|
|
@ -864,23 +864,66 @@ func not(p predicate) predicate {
|
|||
}
|
||||
|
||||
var trimFuncTests = []struct {
|
||||
f predicate
|
||||
in, out string
|
||||
f predicate
|
||||
in string
|
||||
trimOut string
|
||||
leftOut string
|
||||
rightOut string
|
||||
}{
|
||||
{isSpace, space + " hello " + space, "hello"},
|
||||
{isDigit, "\u0e50\u0e5212hello34\u0e50\u0e51", "hello"},
|
||||
{isUpper, "\u2C6F\u2C6F\u2C6F\u2C6FABCDhelloEF\u2C6F\u2C6FGH\u2C6F\u2C6F", "hello"},
|
||||
{not(isSpace), "hello" + space + "hello", space},
|
||||
{not(isDigit), "hello\u0e50\u0e521234\u0e50\u0e51helo", "\u0e50\u0e521234\u0e50\u0e51"},
|
||||
{isValidRune, "ab\xc0a\xc0cd", "\xc0a\xc0"},
|
||||
{not(isValidRune), "\xc0a\xc0", "a"},
|
||||
{isSpace, space + " hello " + space,
|
||||
"hello",
|
||||
"hello " + space,
|
||||
space + " hello"},
|
||||
{isDigit, "\u0e50\u0e5212hello34\u0e50\u0e51",
|
||||
"hello",
|
||||
"hello34\u0e50\u0e51",
|
||||
"\u0e50\u0e5212hello"},
|
||||
{isUpper, "\u2C6F\u2C6F\u2C6F\u2C6FABCDhelloEF\u2C6F\u2C6FGH\u2C6F\u2C6F",
|
||||
"hello",
|
||||
"helloEF\u2C6F\u2C6FGH\u2C6F\u2C6F",
|
||||
"\u2C6F\u2C6F\u2C6F\u2C6FABCDhello"},
|
||||
{not(isSpace), "hello" + space + "hello",
|
||||
space,
|
||||
space + "hello",
|
||||
"hello" + space},
|
||||
{not(isDigit), "hello\u0e50\u0e521234\u0e50\u0e51helo",
|
||||
"\u0e50\u0e521234\u0e50\u0e51",
|
||||
"\u0e50\u0e521234\u0e50\u0e51helo",
|
||||
"hello\u0e50\u0e521234\u0e50\u0e51"},
|
||||
{isValidRune, "ab\xc0a\xc0cd",
|
||||
"\xc0a\xc0",
|
||||
"\xc0a\xc0cd",
|
||||
"ab\xc0a\xc0"},
|
||||
{not(isValidRune), "\xc0a\xc0",
|
||||
"a",
|
||||
"a\xc0",
|
||||
"\xc0a"},
|
||||
{isSpace, "",
|
||||
"",
|
||||
"",
|
||||
""},
|
||||
{isSpace, " ",
|
||||
"",
|
||||
"",
|
||||
""},
|
||||
}
|
||||
|
||||
func TestTrimFunc(t *testing.T) {
|
||||
for _, tc := range trimFuncTests {
|
||||
actual := TrimFunc(tc.in, tc.f.f)
|
||||
if actual != tc.out {
|
||||
t.Errorf("TrimFunc(%q, %q) = %q; want %q", tc.in, tc.f.name, actual, tc.out)
|
||||
trimmers := []struct {
|
||||
name string
|
||||
trim func(s string, f func(r rune) bool) string
|
||||
out string
|
||||
}{
|
||||
{"TrimFunc", TrimFunc, tc.trimOut},
|
||||
{"TrimLeftFunc", TrimLeftFunc, tc.leftOut},
|
||||
{"TrimRightFunc", TrimRightFunc, tc.rightOut},
|
||||
}
|
||||
for _, trimmer := range trimmers {
|
||||
actual := trimmer.trim(tc.in, tc.f.f)
|
||||
if actual != trimmer.out {
|
||||
t.Errorf("%s(%q, %q) = %q; want %q", trimmer.name, tc.in, tc.f.name, actual, trimmer.out)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue