diff options
author | Ben Hoyt <benhoyt@gmail.com> | 2019-03-28 17:49:43 -0400 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2019-03-29 14:16:35 +0000 |
commit | 154e5abfcdb8ffe193d2af4c8ef590f4d9a27008 (patch) | |
tree | 2cd1000a508699aba19b11cefbf57e1da7964ca6 /src/strings | |
parent | ddef157813686870e26c3c2c83bd5af6bef71a61 (diff) | |
download | go-154e5abfcdb8ffe193d2af4c8ef590f4d9a27008.tar.gz go-154e5abfcdb8ffe193d2af4c8ef590f4d9a27008.zip |
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>
Diffstat (limited to 'src/strings')
-rw-r--r-- | src/strings/strings_test.go | 67 |
1 files changed, 55 insertions, 12 deletions
diff --git a/src/strings/strings_test.go b/src/strings/strings_test.go index 500671aca4..8f0a7a1a0a 100644 --- a/src/strings/strings_test.go +++ b/src/strings/strings_test.go @@ -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) + } } } } |