#!/usr/bin/env bash

cat >.mise.toml <<EOF
[env]
FOO = "bar"
EOF

assert "mise env --dotenv | grep FOO" "FOO=bar"

# values that need quoting must read back unchanged through `_.file`
cat >.mise.toml <<'EOT'
[env]
PLAIN = "bar"
HASH = "a #b"
ML = "line1\nline2"
QUOTES = "it's \"x\""
DOLLAR = "a $HOME b\\c"
EOT
assert "mise env --dotenv | grep ^PLAIN=" "PLAIN=bar"
mise env --dotenv >out.env
mise env --json >expected.json
cat >.mise.toml <<'EOT'
[env]
_.file = "out.env"
EOT
for k in PLAIN HASH ML QUOTES DOLLAR; do
  assert "mise env --json | jq -r .$k" "$(jq -r ".$k" expected.json)"
done
assert "mise env --json | jq -r .HASH" "a #b"

# a literal `$` must survive too, since `_.file` expands dollar references
literal=$(printf 'a %sUNSET_VAR_15484 b' '$')
cat >.mise.toml <<'EOT'
[settings]
env_shell_expand = false

[env]
DOLLAR = "a $UNSET_VAR_15484 b"
EOT
assert "mise env --json | jq -r .DOLLAR" "$literal"
mise env --dotenv >out.env
cat >.mise.toml <<'EOT'
[env]
_.file = "out.env"
EOT
assert "mise env --json | jq -r .DOLLAR" "$literal"
