use super::*;

#[test]
fn guard_lines_halt_execution() {
  Test::new()
    .justfile(
      "
        set guards

        @foo:
          ?[[ 'foo' == 'bar' ]]
          echo baz
      ",
    )
    .success();
}

#[test]
fn guard_lines_have_no_effect_if_successful() {
  Test::new()
    .justfile(
      "
        set guards

        @foo:
          ?[[ 'foo' == 'foo' ]]
          echo baz
      ",
    )
    .stdout("baz\n")
    .success();
}

#[test]
fn exit_codes_above_one_are_reserved() {
  Test::new()
    .justfile(
      "
        set guards

        @foo:
          ?exit 2
      ",
    )
    .stderr("error: guard line in recipe `foo` on line 4 returned reserved exit code 2\n")
    .failure();
}

#[test]
fn guard_sigil_may_not_be_used_with_infallible_sigil() {
  Test::new()
    .justfile(
      "
        set guards

        @foo:
          -?exit 2
      ",
    )
    .stderr(
      "
        error: the guard `?` and infallible `-` sigils may not be used together
         ——▶ justfile:4:3
          │
        4 │   -?exit 2
          │   ^^^^^^^^
      ",
    )
    .failure();
}

#[test]
fn guard_lines_are_ignored_without_setting() {
  Test::new()
    .justfile(
      "
        @foo:
          ?() { echo bar; }; ?
      ",
    )
    .stdout("bar\n")
    .success();
}
