add stringx.FirstN with ellipsis (#916)

This commit is contained in:
Kevin Wan
2021-08-16 12:08:33 +08:00
committed by GitHub
parent e77747cff8
commit c7f5aad83a
2 changed files with 26 additions and 7 deletions

View File

@@ -41,12 +41,16 @@ func Filter(s string, filter func(r rune) bool) string {
}
// FirstN returns first n runes from s.
func FirstN(s string, n int) string {
func FirstN(s string, n int, ellipsis ...string) string {
var i int
for j := range s {
if i == n {
return s[:j]
ret := s[:j]
for _, each := range ellipsis {
ret += each
}
return ret
}
i++
}

View File

@@ -94,10 +94,11 @@ func TestFilter(t *testing.T) {
func TestFirstN(t *testing.T) {
tests := []struct {
name string
input string
n int
expect string
name string
input string
n int
ellipsis string
expect string
}{
{
name: "english string",
@@ -105,6 +106,13 @@ func TestFirstN(t *testing.T) {
n: 8,
expect: "anything",
},
{
name: "english string with ellipsis",
input: "anything that we use",
n: 8,
ellipsis: "...",
expect: "anything...",
},
{
name: "english string more",
input: "anything that we use",
@@ -117,6 +125,13 @@ func TestFirstN(t *testing.T) {
n: 2,
expect: "我是",
},
{
name: "chinese string with ellipsis",
input: "我是中国人",
n: 2,
ellipsis: "...",
expect: "我是...",
},
{
name: "chinese string",
input: "我是中国人",
@@ -127,7 +142,7 @@ func TestFirstN(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
assert.Equal(t, test.expect, FirstN(test.input, test.n))
assert.Equal(t, test.expect, FirstN(test.input, test.n, test.ellipsis))
})
}
}