66 lines
1.9 KiB
Go
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,
|
|
}`)
|
|
}
|