just 0.9.2

🤖 Just a command runner
Documentation
use executable_path::executable_path;
use std::{process, str};

use test_utilities::tmptree;

#[test]
fn dotenv() {
  let tmp = tmptree! {
    ".env": "KEY=ROOT",
    sub: {
      ".env": "KEY=SUB",
      justfile: "default:\n\techo KEY=$KEY",
    },
  };

  let binary = executable_path("just");

  let output = process::Command::new(binary)
    .current_dir(tmp.path())
    .arg("sub/default")
    .output()
    .expect("just invocation failed");

  assert_eq!(output.status.code().unwrap(), 0);

  let stdout = str::from_utf8(&output.stdout).unwrap();
  assert_eq!(stdout, "KEY=SUB\n");
}

test! {
  name:     set_false,
  justfile: r#"
    set dotenv-load := false

    foo:
      if [ -n "${DOTENV_KEY+1}" ]; then echo defined; else echo undefined; fi
  "#,
  stdout:   "undefined\n",
  stderr:   "if [ -n \"${DOTENV_KEY+1}\" ]; then echo defined; else echo undefined; fi\n",
  dotenv_load: false,
}

test! {
  name:     set_implicit,
  justfile: r#"
    set dotenv-load

    foo:
      echo $DOTENV_KEY
  "#,
  stdout:   "dotenv-value\n",
  stderr:   "echo $DOTENV_KEY\n",
  dotenv_load: false,
}

test! {
  name:     set_true,
  justfile: r#"
    set dotenv-load := true

    foo:
      echo $DOTENV_KEY
  "#,
  stdout:   "dotenv-value\n",
  stderr:   "echo $DOTENV_KEY\n",
  dotenv_load: false,
}

// Un-comment this on 2021-07-01.
//
// test! {
//   name:     warning,
//   justfile: r#"
//     foo:
//       echo $DOTENV_KEY
//   "#,
//   stdout:   "dotenv-value\n",
//   stderr:   "
//     warning: A `.env` file was found and loaded, but this behavior will
// change in the future.     To silence this warning and continue loading `.env`
// files, add:

//         set dotenv-load := true

//     To silence this warning and stop loading `.env` files, add:

//         set dotenv-load := false

//     See https://github.com/casey/just/issues/469 for more details.
//     echo $DOTENV_KEY
//   ",
//   dotenv_load: false,
// }