use super::*; test! { name: then_branch_unevaluated, justfile: " foo: echo {{ if 'a' == 'b' { `exit 1` } else { 'otherwise' } }} ", stdout: "otherwise\n", stderr: "echo otherwise\n", } test! { name: otherwise_branch_unevaluated, justfile: " foo: echo {{ if 'a' == 'a' { 'then' } else { `exit 1` } }} ", stdout: "then\n", stderr: "echo then\n", } test! { name: otherwise_branch_unevaluated_inverted, justfile: " foo: echo {{ if 'a' != 'b' { 'then' } else { `exit 1` } }} ", stdout: "then\n", stderr: "echo then\n", } test! { name: then_branch_unevaluated_inverted, justfile: " foo: echo {{ if 'a' != 'a' { `exit 1` } else { 'otherwise' } }} ", stdout: "otherwise\n", stderr: "echo otherwise\n", } test! { name: complex_expressions, justfile: " foo: echo {{ if 'a' + 'b' == `echo ab` { 'c' + 'd' } else { 'e' + 'f' } }} ", stdout: "cd\n", stderr: "echo cd\n", } test! { name: undefined_lhs, justfile: " a := if b == '' { '' } else { '' } foo: echo {{ a }} ", stdout: "", stderr: " error: Variable `b` not defined ——▶ justfile:1:9 │ 1 │ a := if b == '' { '' } else { '' } │ ^ ", status: EXIT_FAILURE, } test! { name: undefined_rhs, justfile: " a := if '' == b { '' } else { '' } foo: echo {{ a }} ", stdout: "", stderr: " error: Variable `b` not defined ——▶ justfile:1:15 │ 1 │ a := if '' == b { '' } else { '' } │ ^ ", status: EXIT_FAILURE, } test! { name: undefined_then, justfile: " a := if '' == '' { b } else { '' } foo: echo {{ a }} ", stdout: "", stderr: " error: Variable `b` not defined ——▶ justfile:1:20 │ 1 │ a := if '' == '' { b } else { '' } │ ^ ", status: EXIT_FAILURE, } test! { name: undefined_otherwise, justfile: " a := if '' == '' { '' } else { b } foo: echo {{ a }} ", stdout: "", stderr: " error: Variable `b` not defined ——▶ justfile:1:32 │ 1 │ a := if '' == '' { '' } else { b } │ ^ ", status: EXIT_FAILURE, } test! { name: unexpected_op, justfile: " a := if '' a '' { '' } else { b } foo: echo {{ a }} ", stdout: "", stderr: " error: Expected '&&', '!=', '||', '==', '=~', '+', or '/', but found identifier ——▶ justfile:1:12 │ 1 │ a := if '' a '' { '' } else { b } │ ^ ", status: EXIT_FAILURE, } test! { name: dump, justfile: " a := if '' == '' { '' } else { '' } foo: echo {{ a }} ", args: ("--dump"), stdout: " a := if '' == '' { '' } else { '' } foo: echo {{ a }} ", } test! { name: if_else, justfile: " x := if '0' == '1' { 'a' } else if '0' == '0' { 'b' } else { 'c' } foo: echo {{ x }} ", stdout: "b\n", stderr: "echo b\n", } test! { name: missing_else, justfile: " TEST := if path_exists('/bin/bash') == 'true' {'yes'} ", stdout: "", stderr: " error: Expected keyword `else` but found `end of line` ——▶ justfile:1:54 │ 1 │ TEST := if path_exists('/bin/bash') == 'true' {'yes'} │ ^ ", status: EXIT_FAILURE, } test! { name: incorrect_else_identifier, justfile: " TEST := if path_exists('/bin/bash') == 'true' {'yes'} els {'no'} ", stdout: "", stderr: " error: Expected keyword `else` but found identifier `els` ——▶ justfile:1:55 │ 1 │ TEST := if path_exists('/bin/bash') == 'true' {'yes'} els {'no'} │ ^^^ ", status: EXIT_FAILURE, }