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

98 lines
2.2 KiB
Go

package parser_test
import (
"testing"
"github.com/d5/tengo/ast"
"github.com/d5/tengo/token"
)
func TestIndex(t *testing.T) {
expect(t, "[1, 2, 3][1]", func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
indexExpr(
arrayLit(p(1, 1), p(1, 9),
intLit(1, p(1, 2)),
intLit(2, p(1, 5)),
intLit(3, p(1, 8))),
intLit(1, p(1, 11)),
p(1, 10), p(1, 12))))
})
expect(t, "[1, 2, 3][5 - a]", func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
indexExpr(
arrayLit(p(1, 1), p(1, 9),
intLit(1, p(1, 2)),
intLit(2, p(1, 5)),
intLit(3, p(1, 8))),
binaryExpr(
intLit(5, p(1, 11)),
ident("a", p(1, 15)),
token.Sub,
p(1, 13)),
p(1, 10), p(1, 16))))
})
expect(t, "[1, 2, 3][5 : a]", func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
sliceExpr(
arrayLit(p(1, 1), p(1, 9),
intLit(1, p(1, 2)),
intLit(2, p(1, 5)),
intLit(3, p(1, 8))),
intLit(5, p(1, 11)),
ident("a", p(1, 15)),
p(1, 10), p(1, 16))))
})
expect(t, "[1, 2, 3][a + 3 : b - 8]", func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
sliceExpr(
arrayLit(p(1, 1), p(1, 9),
intLit(1, p(1, 2)),
intLit(2, p(1, 5)),
intLit(3, p(1, 8))),
binaryExpr(
ident("a", p(1, 11)),
intLit(3, p(1, 15)),
token.Add,
p(1, 13)),
binaryExpr(
ident("b", p(1, 19)),
intLit(8, p(1, 23)),
token.Sub,
p(1, 21)),
p(1, 10), p(1, 24))))
})
expect(t, `{a: 1, b: 2}["b"]`, func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
indexExpr(
mapLit(p(1, 1), p(1, 12),
mapElementLit("a", p(1, 2), p(1, 3), intLit(1, p(1, 5))),
mapElementLit("b", p(1, 8), p(1, 9), intLit(2, p(1, 11)))),
stringLit("b", p(1, 14)),
p(1, 13), p(1, 17))))
})
expect(t, `{a: 1, b: 2}[a + b]`, func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
indexExpr(
mapLit(p(1, 1), p(1, 12),
mapElementLit("a", p(1, 2), p(1, 3), intLit(1, p(1, 5))),
mapElementLit("b", p(1, 8), p(1, 9), intLit(2, p(1, 11)))),
binaryExpr(
ident("a", p(1, 14)),
ident("b", p(1, 18)),
token.Add,
p(1, 16)),
p(1, 13), p(1, 19))))
})
}