package parser_test

import (
	"testing"

	"github.com/d5/tengo/compiler/ast"
	"github.com/d5/tengo/compiler/token"
)

func TestError(t *testing.T) {
	expect(t, `error(1234)`, func(p pfn) []ast.Stmt {
		return stmts(
			exprStmt(
				errorExpr(p(1, 1), intLit(1234, p(1, 7)), p(1, 6), p(1, 11))))
	})

	expect(t, `err1 := error("some error")`, func(p pfn) []ast.Stmt {
		return stmts(
			assignStmt(
				exprs(ident("err1", p(1, 1))),
				exprs(errorExpr(p(1, 9), stringLit("some error", p(1, 15)), p(1, 14), p(1, 27))),
				token.Define, p(1, 6)))
	})

	expect(t, `return error("some error")`, func(p pfn) []ast.Stmt {
		return stmts(
			returnStmt(p(1, 1),
				errorExpr(p(1, 8), stringLit("some error", p(1, 14)), p(1, 13), p(1, 26))))
	})

	expect(t, `return error("some" + "error")`, func(p pfn) []ast.Stmt {
		return stmts(
			returnStmt(p(1, 1),
				errorExpr(p(1, 8),
					binaryExpr(
						stringLit("some", p(1, 14)),
						stringLit("error", p(1, 23)),
						token.Add, p(1, 21)),
					p(1, 13), p(1, 30))))
	})

	expectError(t, `error()`) // must have a value
}