1
0
mirror of https://github.com/astaxie/beego.git synced 2024-11-23 17:50:55 +00:00

添加Condition单元测试

This commit is contained in:
cruis 2020-11-13 00:13:35 +08:00
parent 8f3fd317da
commit 647e21b0c4

View File

@ -2668,3 +2668,45 @@ func TestPSQueryBuilder(t *testing.T) {
throwFailNow(t, AssertIs(l[0].UserName, "astaxie"))
throwFailNow(t, AssertIs(l[0].Age, 30))
}
func TestCondition(t *testing.T) {
// test Condition whether to include yourself
cond := NewCondition()
cond = cond.AndCond(cond.Or("id", 1))
cond = cond.AndCond(cond.Or("id", 2))
cond = cond.AndCond(cond.Or("id", 3))
cond = cond.AndCond(cond.Or("id", 4))
cycleFlag := false
var hasCycle func(*Condition)
hasCycle = func(c *Condition) {
if nil == c || cycleFlag {
return
}
condPointMap := make(map[string]bool)
condPointMap[fmt.Sprintf("%p", c)] = true
for _, p := range c.params {
if p.isCond {
adr := fmt.Sprintf("%p", p.cond)
if condPointMap[adr] {
// self as sub cond was cycle
cycleFlag = true
return
} else {
condPointMap[adr] = true
}
}
}
for _, p := range c.params {
if p.isCond {
// check next cond
hasCycle(p.cond)
}
}
return
}
hasCycle(cond)
// cycleFlag was true,meaning use self as sub cond
throwFail(t, AssertIs(!cycleFlag, true))
return
}