xgo/compiler/parser/parser_cond_test.go
2019-01-27 16:25:12 -08:00

48 lines
1.2 KiB
Go

package parser_test
import (
"testing"
"github.com/d5/tengo/compiler/ast"
)
func TestCondExpr(t *testing.T) {
expect(t, "a ? b : c", func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
condExpr(
ident("a", p(1, 1)),
ident("b", p(1, 5)),
ident("c", p(1, 9)),
p(1, 3),
p(1, 7))))
})
expect(t, `a ?
b :
c`, func(p pfn) []ast.Stmt {
return stmts(
exprStmt(
condExpr(
ident("a", p(1, 1)),
ident("b", p(1, 5)),
ident("c", p(1, 9)),
p(1, 3),
p(1, 7))))
})
expectString(t, `a ? b : c`, "(a ? b : c)")
expectString(t, `a + b ? c - d : e * f`, "((a + b) ? (c - d) : (e * f))")
expectString(t, `a == b ? c + (d / e) : f ? g : h + i`, "((a == b) ? (c + ((d / e))) : (f ? g : (h + i)))")
expectString(t, `(a + b) ? (c - d) : (e * f)`, "(((a + b)) ? ((c - d)) : ((e * f)))")
expectString(t, `a + (b ? c : d) - e`, "((a + ((b ? c : d))) - e)")
expectString(t, `a ? b ? c : d : e`, "(a ? (b ? c : d) : e)")
expectString(t, `a := b ? c : d`, "a := (b ? c : d)")
expectString(t, `x := a ? b ? c : d : e`, "x := (a ? (b ? c : d) : e)")
// ? : should be at the end of each line if it's multi-line
expectError(t, `a
? b
: c`)
expectError(t, `a ? (b : e)`)
expectError(t, `(a ? b) : e`)
}