xgo/parser/parser_array_test.go
2019-01-08 23:17:42 -08:00

106 lines
1.8 KiB
Go

package parser_test
import (
"testing"
"github.com/d5/tengo/ast"
"github.com/d5/tengo/token"
)
func TestArray(t *testing.T) {
expect(t, "[1, 2, 3]", func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
arrayLit(p(1, 1), p(1, 9),
intLit(1, p(1, 2)),
intLit(2, p(1, 5)),
intLit(3, p(1, 8)))))
})
expect(t, `
[
1,
2,
3
]`, func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
arrayLit(p(2, 1), p(6, 1),
intLit(1, p(3, 2)),
intLit(2, p(4, 2)),
intLit(3, p(5, 2)))))
})
expect(t, `
[
1,
2,
3
]`, func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
arrayLit(p(2, 1), p(7, 1),
intLit(1, p(3, 2)),
intLit(2, p(4, 2)),
intLit(3, p(5, 2)))))
})
expect(t, `[1, "foo", 12.34]`, func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
arrayLit(p(1, 1), p(1, 17),
intLit(1, p(1, 2)),
stringLit("foo", p(1, 5)),
floatLit(12.34, p(1, 12)))))
})
expect(t, "a = [1, 2, 3]", func(p pfn) []ast.Stmt {
return stmts(
assignStmt(
exprs(ident("a", p(1, 1))),
exprs(arrayLit(p(1, 5), p(1, 13),
intLit(1, p(1, 6)),
intLit(2, p(1, 9)),
intLit(3, p(1, 12)))),
token.Assign,
p(1, 3)))
})
expect(t, "a = [1 + 2, b * 4, [4, c]]", func(p pfn) []ast.Stmt {
return stmts(
assignStmt(
exprs(ident("a", p(1, 1))),
exprs(arrayLit(p(1, 5), p(1, 26),
binaryExpr(
intLit(1, p(1, 6)),
intLit(2, p(1, 10)),
token.Add,
p(1, 8)),
binaryExpr(
ident("b", p(1, 13)),
intLit(4, p(1, 17)),
token.Mul,
p(1, 15)),
arrayLit(p(1, 20), p(1, 25),
intLit(4, p(1, 21)),
ident("c", p(1, 24))))),
token.Assign,
p(1, 3)))
})
expectError(t, `[1, 2, 3,]`)
expectError(t, `
[
1,
2,
3,
]`)
expectError(t, `
[
1,
2,
3,
]`)
expectError(t, `[1, 2, 3, ,]`)
}