1#!/usr/bin/env bash 2set -euo pipefail 3 4# always execute relative to here 5cd "$(dirname "$0")" 6 7# add the built direnv to the path 8root=$(cd .. && pwd -P) 9export PATH=$root:$PATH 10 11load_stdlib() { 12 # shellcheck disable=SC1090 13 source "$root/stdlib.sh" 14} 15 16assert_eq() { 17 if [[ $1 != "$2" ]]; then 18 echo "expected '$1' to equal '$2'" 19 return 1 20 fi 21} 22 23test_name() { 24 echo "--- $*" 25} 26 27test_name dotenv 28( 29 load_stdlib 30 31 workdir=$(mktemp -d) 32 trap 'rm -rf "$workdir"' EXIT 33 34 cd "$workdir" 35 36 # Try to source a file that doesn't exist - should not succeed 37 dotenv .env.non_existing_file && return 1 38 39 # Try to source a file that exists 40 echo "export FOO=bar" > .env 41 dotenv .env 42 [[ $FOO = bar ]] 43) 44 45test_name dotenv_if_exists 46( 47 load_stdlib 48 49 workdir=$(mktemp -d) 50 trap 'rm -rf "$workdir"' EXIT 51 52 cd "$workdir" 53 54 # Try to source a file that doesn't exist - should succeed 55 dotenv_if_exists .env.non_existing_file || return 1 56 57 # Try to source a file that exists 58 echo "export FOO=bar" > .env 59 dotenv_if_exists .env 60 [[ $FOO = bar ]] 61) 62 63test_name find_up 64( 65 load_stdlib 66 path=$(find_up "README.md") 67 assert_eq "$path" "$root/README.md" 68) 69 70test_name source_up 71( 72 load_stdlib 73 cd scenarios/inherited 74 source_up 75) 76 77test_name direnv_apply_dump 78( 79 tmpfile=$(mktemp) 80 cleanup() { rm "$tmpfile"; } 81 trap cleanup EXIT 82 83 load_stdlib 84 FOO=bar direnv dump > "$tmpfile" 85 direnv_apply_dump "$tmpfile" 86 assert_eq "$FOO" bar 87) 88 89test_name PATH_rm 90( 91 load_stdlib 92 93 export PATH=/usr/local/bin:/home/foo/bin:/usr/bin:/home/foo/.local/bin 94 PATH_rm '/home/foo/*' 95 96 assert_eq "$PATH" /usr/local/bin:/usr/bin 97) 98 99test_name path_rm 100( 101 load_stdlib 102 103 somevar=/usr/local/bin:/usr/bin:/home/foo/.local/bin 104 path_rm somevar '/home/foo/*' 105 106 assert_eq "$somevar" /usr/local/bin:/usr/bin 107) 108 109test_name expand_path 110( 111 load_stdlib 112 tmpdir=$(mktemp -d) 113 trap 'rm -rf $tmpdir' EXIT 114 115 cd "$tmpdir" 116 ret=$(expand_path ./bar) 117 118 assert_eq "$ret" "$tmpdir/bar" 119) 120 121test_name semver_search 122( 123 load_stdlib 124 versions=$(mktemp -d) 125 trap 'rm -rf $versions' EXIT 126 127 mkdir "$versions/program-1.4.0" 128 mkdir "$versions/program-1.4.1" 129 mkdir "$versions/program-1.5.0" 130 mkdir "$versions/1.6.0" 131 132 assert_eq "$(semver_search "$versions" "program-" "1.4.0")" "1.4.0" 133 assert_eq "$(semver_search "$versions" "program-" "1.4")" "1.4.1" 134 assert_eq "$(semver_search "$versions" "program-" "1")" "1.5.0" 135 assert_eq "$(semver_search "$versions" "program-" "1.8")" "" 136 assert_eq "$(semver_search "$versions" "" "1.6")" "1.6.0" 137 assert_eq "$(semver_search "$versions" "program-" "")" "1.5.0" 138 assert_eq "$(semver_search "$versions" "" "")" "1.6.0" 139) 140 141test_name use_julia 142( 143 load_stdlib 144 JULIA_VERSIONS=$(TMPDIR=. mktemp -d -t tmp.XXXXXXXXXX) 145 trap 'rm -rf $JULIA_VERSIONS' EXIT 146 147 test_julia() { 148 version_prefix="$1" 149 version="$2" 150 # Fake the existence of a julia binary 151 julia=$JULIA_VERSIONS/$version_prefix$version/bin/julia 152 mkdir -p "$(dirname "$julia")" 153 echo "#!/usr/bin/env bash 154 echo \"test-julia $version\"" > "$julia" 155 chmod +x "$julia" 156 # Locally disable set -u (see https://github.com/direnv/direnv/pull/667) 157 if ! [[ "$(set +u; use julia "$version" 2>&1)" =~ Successfully\ loaded\ test-julia\ $version ]]; then 158 return 1 159 fi 160 } 161 162 # Default JULIA_VERSION_PREFIX 163 unset JULIA_VERSION_PREFIX 164 test_julia "julia-" "1.0.0" 165 test_julia "julia-" "1.1" 166 # Custom JULIA_VERSION_PREFIX 167 JULIA_VERSION_PREFIX="jl-" 168 test_julia "jl-" "1.2.0" 169 test_julia "jl-" "1.3" 170 # Empty JULIA_VERSION_PREFIX 171 # shellcheck disable=SC2034 172 JULIA_VERSION_PREFIX= 173 test_julia "" "1.4.0" 174 test_julia "" "1.5" 175) 176 177test_name source_env_if_exists 178( 179 load_stdlib 180 181 workdir=$(mktemp -d) 182 trap 'rm -rf "$workdir"' EXIT 183 184 cd "$workdir" 185 186 # Try to source a file that doesn't exist 187 source_env_if_exists non_existing_file 188 189 # Try to source a file that exists 190 echo "export FOO=bar" > existing_file 191 source_env_if_exists existing_file 192 [[ $FOO = bar ]] 193) 194 195# test strict_env and unstrict_env 196./strict_env_test.bash 197 198echo OK 199