Just a note for anyone else who runs in to this, it turns out that CommandBox’s parsing of && and || in scripts are a little different than sh or bash.
Basically, each command is run left to right and is evaluated before looking at the rest of the script.
assertEqual 1 1 && echo "one"
will output one.
assertEqual 1 2 || echo "two"
will output two.
assertEqual 1 1 && echo "one" || echo "two"
will output one as well, but
assertEqual 1 2 && echo "one" || echo "two"
will exit with a non-zero exit code and output nothing.
So assertEqual and assertTrue can only evaluate either&&or||, not both.
Yes, you can construct a basic conditional, but you can’t do an “else” sort of statement. Once an operator is reached that can’t be crossed (i.e. || after a passing exit code) the entire command chain is aborted there and goes no further.
If bash has a precedent otherwise, we can certainly look at doing that instead. To be honest, I didn’t look at bash here and without parenthesis to group operators, I didn’t think it made any logical sense to just jump ahead to another command in the chain as if nothing happened. It only made sense to me when I was writing this to stop processing. i.e. the || echo "two" portion of your last example is still all “downstream” of assertEqual 1 2 && and since the first command failed, I thought nothing after the && deserved to run.
But again, I don’t mind following bash if there’s a precedent, I just didn’t know about it,
Actually, I should have asked-- were you testing this on the latest version of CommandBox? I did make some changes to that logic the other day for Jon but I’ve forgotten exactly what it was,
OK, I just looked up the ticket https://ortussolutions.atlassian.net/browse/COMMANDBOX-1401
it actually looks like this is exactly what you are asking about and it’s been done since December-- I just totally forgot about it. Please test on the bleeding edge for me