Files
SamWaf/test/TutorialExample_test.go
T
2022-10-11 16:55:11 +08:00

66 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 {
log.Println("Let say " + sentence)
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)
}
}