xgo/compiler/stdlib/text_test.go

164 lines
4.9 KiB
Go
Raw Normal View History

package stdlib_test
import (
"testing"
"github.com/d5/tengo/objects"
)
func TestTextRE(t *testing.T) {
// re_match(pattern, text)
for _, d := range []struct {
pattern string
text string
expected interface{}
}{
{"abc", "", false},
{"abc", "abc", true},
{"a", "abc", true},
{"b", "abc", true},
{"^a", "abc", true},
{"^b", "abc", false},
} {
module(t, "text").call("re_match", d.pattern, d.text).expect(d.expected, "pattern: %q, src: %q", d.pattern, d.text)
module(t, "text").call("re_compile", d.pattern).call("match", d.text).expect(d.expected, "patter: %q, src: %q", d.pattern, d.text)
}
// re_find(pattern, text)
for _, d := range []struct {
pattern string
text string
expected interface{}
}{
{"a(b)", "", objects.UndefinedValue},
{"a(b)", "ab", ARR{
ARR{
IMAP{"text": "ab", "begin": 0, "end": 2},
IMAP{"text": "b", "begin": 1, "end": 2},
},
}},
{"a(bc)d", "abcdefgabcd", ARR{
ARR{
IMAP{"text": "abcd", "begin": 0, "end": 4},
IMAP{"text": "bc", "begin": 1, "end": 3},
},
}},
{"(a)b(c)d", "abcdefgabcd", ARR{
ARR{
IMAP{"text": "abcd", "begin": 0, "end": 4},
IMAP{"text": "a", "begin": 0, "end": 1},
IMAP{"text": "c", "begin": 2, "end": 3},
},
}},
} {
module(t, "text").call("re_find", d.pattern, d.text).expect(d.expected, "pattern: %q, text: %q", d.pattern, d.text)
module(t, "text").call("re_compile", d.pattern).call("find", d.text).expect(d.expected, "pattern: %q, text: %q", d.pattern, d.text)
}
// re_find(pattern, text, count))
for _, d := range []struct {
pattern string
text string
count int
expected interface{}
}{
{"a(b)", "", -1, objects.UndefinedValue},
{"a(b)", "ab", -1, ARR{
ARR{
IMAP{"text": "ab", "begin": 0, "end": 2},
IMAP{"text": "b", "begin": 1, "end": 2},
},
}},
{"a(bc)d", "abcdefgabcd", -1, ARR{
ARR{
IMAP{"text": "abcd", "begin": 0, "end": 4},
IMAP{"text": "bc", "begin": 1, "end": 3},
},
ARR{
IMAP{"text": "abcd", "begin": 7, "end": 11},
IMAP{"text": "bc", "begin": 8, "end": 10},
},
}},
{"(a)b(c)d", "abcdefgabcd", -1, ARR{
ARR{
IMAP{"text": "abcd", "begin": 0, "end": 4},
IMAP{"text": "a", "begin": 0, "end": 1},
IMAP{"text": "c", "begin": 2, "end": 3},
},
ARR{
IMAP{"text": "abcd", "begin": 7, "end": 11},
IMAP{"text": "a", "begin": 7, "end": 8},
IMAP{"text": "c", "begin": 9, "end": 10},
},
}},
{"(a)b(c)d", "abcdefgabcd", 0, objects.UndefinedValue},
{"(a)b(c)d", "abcdefgabcd", 1, ARR{
ARR{
IMAP{"text": "abcd", "begin": 0, "end": 4},
IMAP{"text": "a", "begin": 0, "end": 1},
IMAP{"text": "c", "begin": 2, "end": 3},
},
}},
} {
module(t, "text").call("re_find", d.pattern, d.text, d.count).expect(d.expected, "pattern: %q, text: %q", d.pattern, d.text)
module(t, "text").call("re_compile", d.pattern).call("find", d.text, d.count).expect(d.expected, "pattern: %q, text: %q", d.pattern, d.text)
}
// re_replace(pattern, text, repl)
for _, d := range []struct {
pattern string
text string
repl string
expected interface{}
}{
{"a", "", "b", ""},
{"a", "a", "b", "b"},
{"a", "acac", "b", "bcbc"},
{"a", "acac", "123", "123c123c"},
{"ac", "acac", "99", "9999"},
{"ac$", "acac", "foo", "acfoo"},
} {
module(t, "text").call("re_replace", d.pattern, d.text, d.repl).expect(d.expected, "pattern: %q, text: %q, repl: %q", d.pattern, d.text, d.repl)
module(t, "text").call("re_compile", d.pattern).call("replace", d.text, d.repl).expect(d.expected, "pattern: %q, text: %q, repl: %q", d.pattern, d.text, d.repl)
}
// re_split(pattern, text)
for _, d := range []struct {
pattern string
text string
expected interface{}
}{
{"a", "", ARR{""}},
{"a", "abcabc", ARR{"", "bc", "bc"}},
{"ab", "abcabc", ARR{"", "c", "c"}},
{"^a", "abcabc", ARR{"", "bcabc"}},
} {
module(t, "text").call("re_split", d.pattern, d.text).expect(d.expected, "pattern: %q, text: %q", d.pattern, d.text)
module(t, "text").call("re_compile", d.pattern).call("split", d.text).expect(d.expected, "pattern: %q, text: %q", d.pattern, d.text)
}
// re_split(pattern, text, count))
for _, d := range []struct {
pattern string
text string
count int
expected interface{}
}{
{"a", "", -1, ARR{""}},
{"a", "abcabc", -1, ARR{"", "bc", "bc"}},
{"ab", "abcabc", -1, ARR{"", "c", "c"}},
{"^a", "abcabc", -1, ARR{"", "bcabc"}},
{"a", "abcabc", 0, ARR{}},
{"a", "abcabc", 1, ARR{"abcabc"}},
{"a", "abcabc", 2, ARR{"", "bcabc"}},
{"a", "abcabc", 3, ARR{"", "bc", "bc"}},
{"b", "abcabc", 1, ARR{"abcabc"}},
{"b", "abcabc", 2, ARR{"a", "cabc"}},
{"b", "abcabc", 3, ARR{"a", "ca", "c"}},
} {
module(t, "text").call("re_split", d.pattern, d.text, d.count).expect(d.expected, "pattern: %q, text: %q", d.pattern, d.text)
module(t, "text").call("re_compile", d.pattern).call("split", d.text, d.count).expect(d.expected, "pattern: %q, text: %q", d.pattern, d.text)
}
}