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

66 lines
1.9 KiB
Go

package parser_test
import (
"testing"
"github.com/d5/tengo/ast"
"github.com/d5/tengo/token"
)
func TestMap(t *testing.T) {
expect(t, "{ key1: 1, key2: \"2\", key3: true }", func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
mapLit(p(1, 1), p(1, 34),
mapElementLit("key1", p(1, 3), p(1, 7), intLit(1, p(1, 9))),
mapElementLit("key2", p(1, 12), p(1, 16), stringLit("2", p(1, 18))),
mapElementLit("key3", p(1, 23), p(1, 27), boolLit(true, p(1, 29))))))
})
expect(t, "a = { key1: 1, key2: \"2\", key3: true }", func(p pfn) []ast.Stmt {
return stmts(
assignStmt(
exprs(ident("a", p(1, 1))),
exprs(mapLit(p(1, 5), p(1, 38),
mapElementLit("key1", p(1, 7), p(1, 11), intLit(1, p(1, 13))),
mapElementLit("key2", p(1, 16), p(1, 20), stringLit("2", p(1, 22))),
mapElementLit("key3", p(1, 27), p(1, 31), boolLit(true, p(1, 33))))),
token.Assign,
p(1, 3)))
})
expect(t, "a = { key1: 1, key2: \"2\", key3: { k1: `bar`, k2: 4 } }", func(p pfn) []ast.Stmt {
return stmts(
assignStmt(
exprs(ident("a", p(1, 1))),
exprs(mapLit(p(1, 5), p(1, 54),
mapElementLit("key1", p(1, 7), p(1, 11), intLit(1, p(1, 13))),
mapElementLit("key2", p(1, 16), p(1, 20), stringLit("2", p(1, 22))),
mapElementLit("key3", p(1, 27), p(1, 31),
mapLit(p(1, 33), p(1, 52),
mapElementLit("k1", p(1, 35), p(1, 37), stringLit("bar", p(1, 39))),
mapElementLit("k2", p(1, 46), p(1, 48), intLit(4, p(1, 50))))))),
token.Assign,
p(1, 3)))
})
expect(t, `
{
key1: 1,
key2: "2",
key3: true
}`, func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
mapLit(p(2, 1), p(6, 1),
mapElementLit("key1", p(3, 2), p(3, 6), intLit(1, p(3, 8))),
mapElementLit("key2", p(4, 2), p(4, 6), stringLit("2", p(4, 8))),
mapElementLit("key3", p(5, 2), p(5, 6), boolLit(true, p(5, 8))))))
})
expectError(t, `{ key1: 1, }`)
expectError(t, `{
key1: 1,
key2: 2,
}`)
}