just/tests/conditional.rs

208 lines
3.8 KiB
Rust
Raw Permalink Normal View History

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: "
2022-06-25 02:39:06 -07:00
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"),
2021-06-08 01:01:27 -07:00
stdout: "
a := if '' == '' { '' } else { '' }
foo:
2021-06-08 01:01:27 -07:00
echo {{ a }}
",
}
2021-07-19 18:21:46 -07:00
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,
}