-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunccreator_test.go
189 lines (171 loc) · 11.3 KB
/
funccreator_test.go
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
package eudore_test
import (
"context"
"testing"
"time"
"github.com/eudore/eudore"
)
func TestFuncCreator(t *testing.T) {
app := eudore.NewApp()
app.SetValue(eudore.ContextKeyFuncCreator, eudore.NewFuncCreator())
fc := eudore.NewFuncCreatorWithContext(app)
t.Log(fc.RegisterFunc("zero", func() {}))
t.Log(fc.CreateFunc(eudore.FuncCreateString, "zero1"))
t.Log(fc.CreateFunc(eudore.FuncCreateString, "zero=1"))
t.Log(fc.CreateFunc(eudore.FuncCreateKind(0), "zero"))
fc.(interface{ Metadata() any }).Metadata()
}
func mustCreate(i any, _ error) any {
return i
}
func TestFuncCreatorRun(t *testing.T) {
fc := eudore.NewFuncCreatorWithContext(context.Background())
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "zero")).(func(string) bool)("zero")
mustCreate(fc.CreateFunc(eudore.FuncCreateAny, "zero")).(func(any) bool)("zero")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "nozero")).(func(string) bool)("zero")
mustCreate(fc.CreateFunc(eudore.FuncCreateAny, "nozero")).(func(any) bool)("zero")
mustCreate(fc.CreateFunc(eudore.FuncCreateAny, "nozero")).(func(any) bool)(time.Time{})
mustCreate(fc.CreateFunc(eudore.FuncCreateInt, "min=0")).(func(int) bool)(0)
mustCreate(fc.CreateFunc(eudore.FuncCreateInt, "max=0")).(func(int) bool)(0)
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "min=0")).(func(string) bool)("0")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "min=0")).(func(string) bool)("x0")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "max=0")).(func(string) bool)("0")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "max=0")).(func(string) bool)("x0")
fc.CreateFunc(eudore.FuncCreateInt, "min=0")
fc.CreateFunc(eudore.FuncCreateUint, "min=0")
fc.CreateFunc(eudore.FuncCreateFloat, "min=0")
fc.CreateFunc(eudore.FuncCreateBool, "min=0")
fc.CreateFunc(eudore.FuncCreateInt, "min=x0")
fc.CreateFunc(eudore.FuncCreateInt, "max=x0")
fc.CreateFunc(eudore.FuncCreateString, "min=x0")
fc.CreateFunc(eudore.FuncCreateString, "max=x0")
mustCreate(fc.CreateFunc(eudore.FuncCreateInt, "equal=0")).(func(int) bool)(0)
mustCreate(fc.CreateFunc(eudore.FuncCreateInt, "enum=1,2,3")).(func(int) bool)(0)
mustCreate(fc.CreateFunc(eudore.FuncCreateInt, "enum=1,2,3")).(func(int) bool)(1)
mustCreate(fc.CreateFunc(eudore.FuncCreateInt, "enum=1,2,3,4,5,6,7,8,9")).(func(int) bool)(0)
fc.CreateFunc(eudore.FuncCreateInt, "equal=x0")
fc.CreateFunc(eudore.FuncCreateInt, "enum=x0")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "len=0")).(func(string) bool)("0")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "len!=0")).(func(string) bool)("0")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "len>0")).(func(string) bool)("0")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "len<0")).(func(string) bool)("0")
mustCreate(fc.CreateFunc(eudore.FuncCreateAny, "len=0")).(func(any) bool)("0")
mustCreate(fc.CreateFunc(eudore.FuncCreateAny, "len>0")).(func(any) bool)("0")
mustCreate(fc.CreateFunc(eudore.FuncCreateAny, "len<0")).(func(any) bool)("0")
mustCreate(fc.CreateFunc(eudore.FuncCreateAny, "len=0")).(func(any) bool)(true)
mustCreate(fc.CreateFunc(eudore.FuncCreateAny, "len>0")).(func(any) bool)(true)
mustCreate(fc.CreateFunc(eudore.FuncCreateAny, "len<0")).(func(any) bool)(true)
mustCreate(fc.CreateFunc(eudore.FuncCreateAny, "after:20180801")).(func(any) bool)(time.Now())
mustCreate(fc.CreateFunc(eudore.FuncCreateAny, "after:20180801")).(func(any) bool)(nil)
mustCreate(fc.CreateFunc(eudore.FuncCreateAny, "before:20180801")).(func(any) bool)(time.Now())
mustCreate(fc.CreateFunc(eudore.FuncCreateAny, "before:20180801")).(func(any) bool)(nil)
fc.CreateFunc(eudore.FuncCreateString, "len=x0")
fc.CreateFunc(eudore.FuncCreateAny, "len=x0")
fc.CreateFunc(eudore.FuncCreateAny, "after:")
fc.CreateFunc(eudore.FuncCreateAny, "before:")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "num")).(func(string) bool)("0")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "integer")).(func(string) bool)("0")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "integer")).(func(string) bool)("x0")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "domain")).(func(string) bool)("www.eudore.cn")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "mail")).(func(string) bool)("[email protected]")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "mail")).(func(string) bool)("eudore.cn")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "phone")).(func(string) bool)("15824681234")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "phone")).(func(string) bool)("+86 15824681234")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "phone")).(func(string) bool)("010-32221234")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "phone")).(func(string) bool)("xx010-32221234")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "regexp=^\\d+$")).(func(string) bool)("123456")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "patten=123456")).(func(string) bool)("123456")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "patten=*")).(func(string) bool)("123456")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "patten!=a*")).(func(string) bool)("123456")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "patten!=a*b")).(func(string) bool)("a")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "patten=a*b")).(func(string) bool)("axb")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "prefix=123")).(func(string) bool)("123456")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "count=1,a")).(func(string) bool)("1aa23456")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "count>1,a")).(func(string) bool)("1aa23456")
mustCreate(fc.CreateFunc(eudore.FuncCreateString, "count<1,a")).(func(string) bool)("1aa23456")
fc.CreateFunc(eudore.FuncCreateString, "regexp=^[($")
fc.CreateFunc(eudore.FuncCreateString, "count=")
fc.CreateFunc(eudore.FuncCreateString, "count=x,x")
mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "default")).(func(string) string)("zero")
mustCreate(fc.CreateFunc(eudore.FuncCreateSetInt, "default")).(func(int) int)(0)
mustCreate(fc.CreateFunc(eudore.FuncCreateSetUint, "default")).(func(uint) uint)(0)
mustCreate(fc.CreateFunc(eudore.FuncCreateSetFloat, "default")).(func(float64) float64)(0)
mustCreate(fc.CreateFunc(eudore.FuncCreateSetAny, "default")).(func(any) any)("zero")
mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "value=str")).(func(string) string)("zero")
mustCreate(fc.CreateFunc(eudore.FuncCreateSetAny, "value="))
mustCreate(fc.CreateFunc(eudore.FuncCreateSetAny, "value=20060102")).(func(any) any)("zero")
mustCreate(fc.CreateFunc(eudore.FuncCreateSetAny, "value=20060102")).(func(any) any)(time.Now())
mustCreate(fc.CreateFunc(eudore.FuncCreateSetInt, "add=10")).(func(int) int)(0)
mustCreate(fc.CreateFunc(eudore.FuncCreateSetInt, "add=x"))
mustCreate(fc.CreateFunc(eudore.FuncCreateSetAny, "add="))
mustCreate(fc.CreateFunc(eudore.FuncCreateSetAny, "add=10h")).(func(any) any)("")
mustCreate(fc.CreateFunc(eudore.FuncCreateSetAny, "add=10h")).(func(any) any)(time.Now())
mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "now:20060102")).(func(string) string)("now")
mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "now:xx")).(func(string) string)("now")
mustCreate(fc.CreateFunc(eudore.FuncCreateSetAny, "now")).(func(any) any)(time.Time{})
mustCreate(fc.CreateFunc(eudore.FuncCreateSetAny, "now")).(func(any) any)("now")
mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "replace=10,AA,aa")).(func(string) string)("AAAAA")
mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "trim=1")).(func(string) string)("1234 ")
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidesurname")).(func(string) string)("A4"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidesurname")).(func(string) string)("eudore"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidesurname")).(func(string) string)("eudore org"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidesurname")).(func(string) string)("世界"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidename")).(func(string) string)("A4"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidename")).(func(string) string)("eudore"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidename")).(func(string) string)("eudore org"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidename")).(func(string) string)("世界"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidemail")).(func(string) string)("[email protected]"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidemail")).(func(string) string)("[email protected]"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidemail")).(func(string) string)("[email protected]"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidemail")).(func(string) string)("eudore.cn"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidephone")).(func(string) string)("15824681234"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidephone")).(func(string) string)("+86 15824681234"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidephone")).(func(string) string)("010-32221234"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hidephone")).(func(string) string)("xx010-32221234"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "hide")).(func(string) string)("pass"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "len")).(func(string) string)("123456"))
t.Log(mustCreate(fc.CreateFunc(eudore.FuncCreateSetString, "md5")).(func(string) string)("123456"))
fc.CreateFunc(eudore.FuncCreateSetInt, "value=str")
}
func TestFuncCreatorExpr(t *testing.T) {
k := eudore.FuncCreateString
fc := eudore.NewFuncCreatorExpr()
fc.RegisterFunc("init")
t.Log(mustCreate(fc.CreateFunc(k, "NOT zero")).(func(string) bool)("0"))
t.Log(mustCreate(fc.CreateFunc(k, "NOT(zero)")).(func(string) bool)(""))
t.Log(mustCreate(fc.CreateFunc(k, "len>7 AND domain")).(func(string) bool)("eudore.cn"))
t.Log(mustCreate(fc.CreateFunc(k, "len>7 \r\nAND(contains=xx ss)")).(func(string) bool)("xx"))
t.Log(mustCreate(fc.CreateFunc(k, "(len>7 AND contains=xxss) OR mail OR phone")).(func(string) bool)("xxssxxss"))
t.Log(mustCreate(fc.CreateFunc(k, "len>7 AND(contains=xxss OR mail) OR phone")).(func(string) bool)("xxssxxs"))
t.Log(mustCreate(fc.CreateFunc(k, "len>7 AND contains=xxss OR(mail OR phone)")).(func(string) bool)("[email protected]"))
for i := 0; i < 8; i++ {
fc.CreateFunc(eudore.FuncCreateKind(i), "NOT zero1")
}
fc.CreateFunc(k, "mail AND zero1")
fc.CreateFunc(k, "mail OR zero1")
fc.CreateFunc(k, " ")
fc.CreateFunc(k, "( )")
fc.CreateFunc(k, "(zero sss")
fc.CreateFunc(k, "(zero sss) AND")
fc.CreateFunc(k, "(zero sss) AND ( )")
fc.CreateFunc(k, " zero")
fc.CreateFunc(k, "(zero)")
fc.CreateFunc(k, "NOT\r\nzero")
fc.CreateFunc(k, "NOT(zero)")
fc.CreateFunc(k, " len>7 AND NOT(contains=xx ss)")
fc.CreateFunc(k, " len>7 AND(contains=xx ss) AND mail")
fc.CreateFunc(k, "(len>7 AND contains=xxss) OR mail OR phone")
fc.CreateFunc(k, " len>7 AND contains=xxss OR(mail OR phone)")
fc.CreateFunc(k, " len>7 AND(contains=xxss OR mail) OR phone")
fc.List()
// print meta
meta, ok := fc.(interface{ Metadata() any }).Metadata().(eudore.MetadataFuncCreator)
if ok {
for _, expr := range meta.Exprs {
t.Log("expr:", expr)
}
for _, err := range meta.Errors {
t.Log("err:", err)
}
}
}