mirror of
https://gitee.com/samwaf/SamWaf.git
synced 2026-10-31 02:01:44 +08:00
65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
package test
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/hyperjumptech/grule-rule-engine/ast"
|
|
"github.com/hyperjumptech/grule-rule-engine/builder"
|
|
"github.com/hyperjumptech/grule-rule-engine/engine"
|
|
"github.com/hyperjumptech/grule-rule-engine/pkg"
|
|
"github.com/stretchr/testify/assert"
|
|
"log"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
type MyFact struct {
|
|
IntAttribute int64
|
|
StringAttribute string
|
|
BooleanAttribute bool
|
|
FloatAttribute float64
|
|
TimeAttribute time.Time
|
|
WhatToSay string
|
|
}
|
|
|
|
func (mf *MyFact) GetWhatToSay(sentence string) string {
|
|
return fmt.Sprintf("Let say \"%s\"", sentence)
|
|
}
|
|
|
|
func TestTutorial(t *testing.T) {
|
|
myFact := &MyFact{
|
|
IntAttribute: 1231,
|
|
StringAttribute: "1Some string value",
|
|
BooleanAttribute: true,
|
|
FloatAttribute: 1.234,
|
|
TimeAttribute: time.Now(),
|
|
}
|
|
dataCtx := ast.NewDataContext()
|
|
err := dataCtx.Add("MF", myFact)
|
|
assert.NoError(t, err)
|
|
|
|
// Prepare knowledgebase library and load it with our rule.
|
|
knowledgeLibrary := ast.NewKnowledgeLibrary()
|
|
ruleBuilder := builder.NewRuleBuilder(knowledgeLibrary)
|
|
|
|
drls := `
|
|
rule CheckValues "Check the default values" salience 10 {
|
|
when
|
|
MF.IntAttribute == 123 && MF.StringAttribute == "Some string value"
|
|
then
|
|
MF.WhatToSay = MF.GetWhatToSay("你好");
|
|
Retract("CheckValues");
|
|
}
|
|
`
|
|
byteArr := pkg.NewBytesResource([]byte(drls))
|
|
err = ruleBuilder.BuildRuleFromResource("Tutorial", "0.0.1", byteArr)
|
|
assert.NoError(t, err)
|
|
|
|
knowledgeBase := knowledgeLibrary.NewKnowledgeBaseInstance("Tutorial", "0.0.1")
|
|
|
|
engine := engine.NewGruleEngine()
|
|
err = engine.Execute(dataCtx, knowledgeBase)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|