1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
// Copyright 2015 Huan Du. All rights reserved.
// Licensed under the MIT license that can be found in the LICENSE file.
package xstrings
import (
"strconv"
"strings"
"testing"
)
func TestReverse(t *testing.T) {
runTestCases(t, Reverse, _M{
"reverse string": "gnirts esrever",
"中文如何?": "?何如文中",
"中en文混~排怎样?a": "a?样怎排~混文ne中",
})
}
func TestSlice(t *testing.T) {
runner := func(str string) (result string) {
defer func() {
if e := recover(); e != nil {
result = e.(string)
}
}()
strs := split(str)
start, _ := strconv.ParseInt(strs[1], 10, 0)
end, _ := strconv.ParseInt(strs[2], 10, 0)
result = Slice(strs[0], int(start), int(end))
return
}
runTestCases(t, runner, _M{
sep("abcdefghijk", "3", "8"): "defgh",
sep("来点中文如何?", "2", "7"): "中文如何?",
sep("中en文混~排总是少不了的a", "2", "8"): "n文混~排总",
sep("中en文混~排总是少不了的a", "0", "0"): "",
sep("中en文混~排总是少不了的a", "14", "14"): "",
sep("中en文混~排总是少不了的a", "5", "-1"): "~排总是少不了的a",
sep("中en文混~排总是少不了的a", "14", "-1"): "",
sep("let us slice out of range", "-3", "3"): "out of range",
sep("超出范围哦", "2", "6"): "out of range",
sep("don't do this", "3", "2"): "out of range",
sep("千gan万de不piao要liang", "19", "19"): "out of range",
})
}
func TestPartition(t *testing.T) {
runner := func(str string) string {
input := strings.Split(str, separator)
head, match, tail := Partition(input[0], input[1])
return sep(head, match, tail)
}
runTestCases(t, runner, _M{
sep("hello", "l"): sep("he", "l", "lo"),
sep("中文总少不了", "少"): sep("中文总", "少", "不了"),
sep("z这个zh英文混排hao不", "h英文"): sep("z这个z", "h英文", "混排hao不"),
sep("边界tiao件zen能忘", "边界"): sep("", "边界", "tiao件zen能忘"),
sep("尾巴ye别忘le", "忘le"): sep("尾巴ye别", "忘le", ""),
sep("hello", "x"): sep("hello", "", ""),
sep("不是晩香玉", "晚"): sep("不是晩香玉", "", ""), // Hint: 晩 is not 晚 :)
sep("来ge混排ba", "e 混"): sep("来ge混排ba", "", ""),
})
}
func TestLastPartition(t *testing.T) {
runner := func(str string) string {
input := strings.Split(str, separator)
head, match, tail := LastPartition(input[0], input[1])
return sep(head, match, tail)
}
runTestCases(t, runner, _M{
sep("hello", "l"): sep("hel", "l", "o"),
sep("少量中文总少不了", "少"): sep("少量中文总", "少", "不了"),
sep("z这个zh英文ch英文混排hao不", "h英文"): sep("z这个zh英文c", "h英文", "混排hao不"),
sep("边界tiao件zen能忘边界", "边界"): sep("边界tiao件zen能忘", "边界", ""),
sep("尾巴ye别忘le", "尾巴"): sep("", "尾巴", "ye别忘le"),
sep("hello", "x"): sep("", "", "hello"),
sep("不是晩香玉", "晚"): sep("", "", "不是晩香玉"), // Hint: 晩 is not 晚 :)
sep("来ge混排ba", "e 混"): sep("", "", "来ge混排ba"),
})
}
func TestInsert(t *testing.T) {
runner := func(str string) (result string) {
defer func() {
if e := recover(); e != nil {
result = e.(string)
}
}()
strs := split(str)
index, _ := strconv.ParseInt(strs[2], 10, 0)
result = Insert(strs[0], strs[1], int(index))
return
}
runTestCases(t, runner, _M{
sep("abcdefg", "hi", "3"): "abchidefg",
sep("少量中文是必须的", "混pai", "4"): "少量中文混pai是必须的",
sep("zh英文hun排", "~!", "5"): "zh英文h~!un排",
sep("插在beginning", "我", "0"): "我插在beginning",
sep("插在ending", "我", "8"): "插在ending我",
sep("超tian出yuan边tu界po", "foo", "-1"): "out of range",
sep("超tian出yuan边tu界po", "foo", "17"): "out of range",
})
}
func TestScrub(t *testing.T) {
runner := func(str string) string {
strs := split(str)
return Scrub(strs[0], strs[1])
}
runTestCases(t, runner, _M{
sep("ab\uFFFDcd\xFF\xCEefg\xFF\xFC\xFD\xFAhijk", "*"): "ab*cd*efg*hijk",
sep("no错误です", "*"): "no错误です",
sep("", "*"): "",
})
}
func TestWordSplit(t *testing.T) {
runner := func(str string) string {
return sep(WordSplit(str)...)
}
runTestCases(t, runner, _M{
"one word": sep("one", "word"),
"一个字:把他给我拿下!": "",
"it's a super-fancy one!!!a": sep("it's", "a", "super-fancy", "one", "a"),
"a -b-c' 'd'e": sep("a", "b-c'", "d'e"),
})
}
|