func getTestEvalResult(src string, t *testing.T) []*ast.Stmt { var builtins = map[string]*ast.Stmt{ // Date "gmtdate": ast.NewDate(stdtime.Now(), "YYYYMMDD"), "bizdate": ast.NewDate(stdtime.Now().AddDate(0, 0, -1), "YYYYMMDD"), // Duration "year": ast.NewDurationExt(1, 0, 0), "month": ast.NewDurationExt(0, 1, 0), "day": ast.NewDurationExt(0, 0, 1), "hour": ast.NewDuration(stdtime.Hour), "minute": ast.NewDuration(stdtime.Minute), "second": ast.NewDuration(stdtime.Second), } p := parser.NewParser() l := lexer.NewLexer([]byte(src)) a, err := p.Parse(l) if err != nil { t.Error(err) return nil } e := eval.NewEval() res, err := e.Evaluate(a.([]*ast.Stmt), builtins) if err != nil { t.Error(err) return nil } return res }
func Resolve(src string, builtins map[string]*ast.Stmt) ([]*ast.Stmt, error) { e := eval.NewEval() if len(src) == 0 { return e.Evaluate([]*ast.Stmt{}, builtins) } p := parser.NewParser() l := lexer.NewLexer([]byte(src)) a, err := p.Parse(l) if err != nil { return nil, err } return e.Evaluate(a.([]*ast.Stmt), builtins) }
func TestASTVarAdd(t *testing.T) { src := "$res=$var0+1" p := parser.NewParser() l := lexer.NewLexer([]byte(src)) a, err := p.Parse(l) if err != nil { t.Error(err) return } //fmt.Printf("src: %s\nres: %v\n", src, a) if a.([]*ast.Stmt)[0].Type != ast.Operator { t.Error(fmt.Errorf("type error")) } }
func TestASTDateFormat2(t *testing.T) { src := "$res=${date:YYYYMMDD hh:mm:ss}" p := parser.NewParser() l := lexer.NewLexer([]byte(src)) //fmt.Printf("src: %s\n", src) a, err := p.Parse(l) if err != nil { t.Error(err) return } //fmt.Printf("res: %v\n", a) if a.([]*ast.Stmt)[0].Type != ast.Operator { t.Error(fmt.Errorf("type error")) } }
func TestASTEnv(t *testing.T) { src := "$res=${env:HOME}" p := parser.NewParser() l := lexer.NewLexer([]byte(src)) //fmt.Printf("src: %s\n", src) a, err := p.Parse(l) if err != nil { t.Error(err) return } if a.([]*ast.Stmt)[0].Type != ast.Operator { t.Error(fmt.Errorf("type error")) return } //fmt.Printf("res: %v\n", a) }