|
package extension |
|
|
|
import ( |
|
"strings" |
|
"testing" |
|
|
|
"github.com/stretchr/testify/require" |
|
) |
|
|
|
func TestIsPunctuation(t *testing.T) { |
|
cases := []struct { |
|
r rune |
|
expect bool |
|
}{ |
|
{',', true}, |
|
{',', true}, |
|
{'.', true}, |
|
{'。', true}, |
|
{'?', true}, |
|
{'?', true}, |
|
{'!', true}, |
|
{'!', true}, |
|
|
|
{'a', false}, |
|
{'0', false}, |
|
} |
|
|
|
for i, c := range cases { |
|
require.Equal(t, c.expect, isPunctuation(c.r), "case %d", i) |
|
} |
|
} |
|
|
|
func TestSplitByPunctuation(t *testing.T) { |
|
cases := []struct { |
|
s string |
|
expect []string |
|
}{ |
|
{"Hello world!", []string{"Hello world"}}, |
|
{"Hey, there!", []string{"Hey", " there"}}, |
|
} |
|
|
|
for i, c := range cases { |
|
out := strings.FieldsFunc(c.s, isPunctuation) |
|
require.Equal(t, c.expect, out, "case %d", i) |
|
} |
|
} |
|
|
|
func TestParseSentence_Should_NoFinalSentence(t *testing.T) { |
|
cases := []struct { |
|
sentence string |
|
content string |
|
|
|
expectSentence string |
|
expectContent string |
|
}{ |
|
{ |
|
sentence: "", |
|
content: "", |
|
expectSentence: "", |
|
expectContent: "", |
|
}, |
|
{ |
|
sentence: "a", |
|
content: "", |
|
expectSentence: "a", |
|
expectContent: "", |
|
}, |
|
{ |
|
sentence: "", |
|
content: "a", |
|
expectSentence: "a", |
|
expectContent: "", |
|
}, |
|
{ |
|
sentence: "abc", |
|
content: "ddd", |
|
expectSentence: "abcddd", |
|
expectContent: "", |
|
}, |
|
} |
|
|
|
for i, c := range cases { |
|
sentence, content, final := parseSentence(c.sentence, c.content) |
|
require.False(t, final, "case %d", i) |
|
|
|
require.Equal(t, c.expectSentence, sentence, "case %d", i) |
|
require.Equal(t, c.expectContent, content, "case %d", i) |
|
} |
|
} |
|
|
|
func TestParseSentence_Should_FinalSentence(t *testing.T) { |
|
cases := []struct { |
|
sentence string |
|
content string |
|
|
|
expectSentence string |
|
expectContent string |
|
}{ |
|
{ |
|
sentence: "", |
|
content: ",", |
|
expectSentence: ",", |
|
expectContent: "", |
|
}, |
|
{ |
|
sentence: "", |
|
content: ",ddd", |
|
expectSentence: ",", |
|
expectContent: "ddd", |
|
}, |
|
{ |
|
sentence: "abc", |
|
content: ",ddd", |
|
expectSentence: "abc,", |
|
expectContent: "ddd", |
|
}, |
|
{ |
|
sentence: "abc", |
|
content: "dd,d", |
|
expectSentence: "abcdd,", |
|
expectContent: "d", |
|
}, |
|
{ |
|
sentence: "abc", |
|
content: "ddd,", |
|
expectSentence: "abcddd,", |
|
expectContent: "", |
|
}, |
|
{ |
|
sentence: "abc", |
|
content: "ddd,eee,fff,", |
|
expectSentence: "abcddd,", |
|
expectContent: "eee,fff,", |
|
}, |
|
{ |
|
sentence: "我的", |
|
content: "你好,啊!", |
|
expectSentence: "我的你好,", |
|
expectContent: "啊!", |
|
}, |
|
} |
|
|
|
for i, c := range cases { |
|
sentence, content, final := parseSentence(c.sentence, c.content) |
|
require.True(t, final, "case %d", i) |
|
|
|
require.Equal(t, c.expectSentence, sentence, "case %d", i) |
|
require.Equal(t, c.expectContent, content, "case %d", i) |
|
} |
|
} |
|
|