48 lines
1.2 KiB
Go
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`)
|
|
}
|