package parser_test

import (
	"testing"

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

func TestFunction(t *testing.T) {
	// TODO: function declaration currently not parsed.
	// All functions are parsed as function literal instead.
	// In Go, function declaration is parsed only at the top level.
	//expect(t, "func a(b, c, d) {}", func(p pfn) []ast.Stmt {
	//	return stmts(
	//		declStmt(
	//			funcDecl(
	//				ident("a", p(1, 6)),
	//				funcType(
	//					identList(p(1, 7), p(1, 15),
	//						ident("b", p(1, 8)),
	//						ident("c", p(1, 11)),
	//						ident("d", p(1, 14))),
	//					p(1, 12)),
	//				blockStmt(p(1, 17), p(1, 18)))))
	//})

	expect(t, "a = func(b, c, d) { return d }", func(p pfn) []ast.Stmt {
		return stmts(
			assignStmt(
				exprs(
					ident("a", p(1, 1))),
				exprs(
					funcLit(
						funcType(
							identList(p(1, 9), p(1, 17),
								ident("b", p(1, 10)),
								ident("c", p(1, 13)),
								ident("d", p(1, 16))),
							p(1, 5)),
						blockStmt(p(1, 19), p(1, 30),
							returnStmt(p(1, 21), ident("d", p(1, 28)))))),
				token.Assign,
				p(1, 3)))
	})
}