示例#1
0
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
}
示例#2
0
文件: symbol.go 项目: yonglehou/hpipe
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)
}
示例#3
0
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"))
	}
}
示例#4
0
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"))
	}
}
示例#5
0
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)
}