Refactor and fix nvm_detect_profile tests

close #833
close #957
diff --git a/test/install_script/nvm_detect_profile b/test/install_script/nvm_detect_profile
index e25572e..4a15efa 100755
--- a/test/install_script/nvm_detect_profile
+++ b/test/install_script/nvm_detect_profile
@@ -1,117 +1,111 @@
 #!/bin/sh
 
-cleanup () {
-  unset -f setup cleanup die
-  unset _PROFILE
-  rm -f .bashrc .bash_profile .zshrc .profile test_profile > /dev/null 2>&1
-}
-die () { echo $@ ; cleanup ; exit 1; }
-
-NVM_ENV=testing . ../../install.sh
-
 setup () {
-  touch .bashrc
-  touch .bash_profile
-  touch .zshrc
-  touch .profile
-  touch test_profile
+  HOME="."
+  NVM_ENV=testing . ../../install.sh
+  touch ".bashrc"
+  touch ".bash_profile"
+  touch ".zshrc"
+  touch ".profile"
+  touch "test_profile"
 }
 
-#Let's hack $HOME
-HOME="."
+cleanup () {
+  unset HOME
+  unset NVM_ENV
+  unset NVM_DETECT_PROFILE
+  unset -f setup cleanup die
+  rm -f ".bashrc" ".bash_profile" ".zshrc" ".profile" "test_profile" > "/dev/null" 2>&1
+}
+
+die () { echo "$@"; cleanup; exit 1; }
 
 setup
 
-#Let's force $SHELL to be bash
-SHELL="/bin/bash"
+#
+# Confirm profile detection via $SHELL works and that $PROFILE overrides profile detection
+#
 
-# $SHELL is set to bash and .bashrc is there, it must be detected
-_PROFILE=$(nvm_detect_profile)
-[ "_$_PROFILE" = "_$HOME/.bashrc" ] || ( echo "_\$HOME/.bashrc: _$HOME/.bashrc" &&
-                                         echo "_\$_PROFILE: _$_PROFILE" &&
-                                         die "nvm_detect_profile didn't pick $SHELL and $HOME/.bashrc" )
+# .bashrc should be detected for bash
+NVM_DETECT_PROFILE="$(declare SHELL="/bin/bash"; unset PROFILE; nvm_detect_profile)"
+if [ "$NVM_DETECT_PROFILE" != "$HOME/.bashrc" ]; then
+  die "nvm_detect_profile didn't pick \$HOME/.bashrc for bash"
+fi
 
-# But $PROFILE should override
-_PROFILE="$(PROFILE=test_profile nvm_detect_profile)"
-_PROFILE=$(nvm_detect_profile)
-[ "_$_PROFILE" = "_$PROFILE" ] || ( echo "_\$_PROFILE: _$_PROFILE" &&
-                                    echo "_\$PROFILE: _$PROFILE" &&
-                                    die "nvm_detect_profile didn't pick \$PROFILE" )
-unset PROFILE
+# $PROFILE should override .bashrc profile detection
+NVM_DETECT_PROFILE="$(declare SHELL="/bin/bash"; declare PROFILE="test_profile"; nvm_detect_profile)"
+if [ "$NVM_DETECT_PROFILE" != "test_profile" ]; then
+  die "nvm_detect_profile ignored \$PROFILE"
+fi
+
+# .zshrc should be detected for zsh
+NVM_DETECT_PROFILE="$(declare SHELL="/usr/bin/zsh"; unset PROFILE; nvm_detect_profile)"
+if [ "$NVM_DETECT_PROFILE" != "$HOME/.zshrc" ]; then
+  die "nvm_detect_profile didn't pick \$HOME/.zshrc for zsh"
+fi
+
+# $PROFILE should override .zshrc profile detection
+NVM_DETECT_PROFILE="$(declare SHELL="/usr/bin/zsh"; declare PROFILE="test_profile"; nvm_detect_profile)"
+if [ "$NVM_DETECT_PROFILE" != "test_profile" ]; then
+ die "nvm_detect_profile ignored \$PROFILE"
+fi
 
 
-#Let's force $SHELL to be zsh
-SHELL="/usr/bin/zsh"
+#
+# Confirm $PROFILE is only returned when it points to a valid file
+#
 
-# $SHELL is set to zsh and .zshrc is there, it must be detected
-_PROFILE=$(nvm_detect_profile)
-[ "_$_PROFILE" = "_$HOME/.zshrc" ] || ( echo "_\$HOME/.zshrc: _$HOME/.zshrc" &&
-                                        echo "_\$_PROFILE: _$_PROFILE" &&
-                                        die "nvm_detect_profile didn't pick $SHELL and $HOME/.zshrc" )
+# $PROFILE is a valid file
+NVM_DETECT_PROFILE="$(declare PROFILE="test_profile"; nvm_detect_profile)"
+if [ "$NVM_DETECT_PROFILE" != "test_profile" ]; then
+  die "nvm_detect_profile didn't pick \$PROFILE when it was a valid file"
+fi
 
-# But $PROFILE should override
-_PROFILE="$(PROFILE=test_profile nvm_detect_profile)"
-_PROFILE=$(nvm_detect_profile)
-[ "_$_PROFILE" = "_$PROFILE" ] || ( echo "_\$_PROFILE: _$_PROFILE" &&
-                                    echo "_\$PROFILE: _$PROFILE" &&
-                                    die "nvm_detect_profile didn't pick \$PROFILE" )
-unset PROFILE
+# $PROFILE is not a valid file
+rm "test_profile"
+NVM_DETECT_PROFILE="$(declare PROFILE="test_profile"; nvm_detect_profile)"
+if [ "$NVM_DETECT_PROFILE" = "test_profile" ]; then
+  die "nvm_detect_profile picked \$PROFILE when it was an invalid file"
+fi
 
-# if we unset shell it looks for the files
-unset SHELL
-
-# $PROFILE points to a valid file, its path must be returned
-PROFILE="test_profile"
-_PROFILE=$(nvm_detect_profile)
-[ "_$_PROFILE" = "_$PROFILE" ] || ( echo "_\$_PROFILE: _$_PROFILE" &&
-                                    echo "_\$PROFILE: _$PROFILE" &&
-                                    die "nvm_detect_profile didn't pick \$PROFILE" )
-
-# $PROFILE doesn't point to a valid file, its path must not be returned
-PROFILE="invalid_profile"
-_PROFILE=$(nvm_detect_profile)
-[ "_$_PROFILE" != "_$PROFILE" ] || ( echo "_\$_PROFILE: _$_PROFILE" &&
-                                     echo "_\$PROFILE: _$PROFILE" &&
-                                     die "nvm_detect_profile shouldn't pick \$PROFILE when it's not a valid file" )
-
-
-# Below are tests for when $PROFILE is undefined
-rm test_profile
-unset PROFILE
+#
+# When profile detection fails via both $PROFILE and $SHELL, profile detection should select based on the existence of
+# one of the following files is the following order: .profile, .bashrc, .bash_profile, .zshrc and
+# return an empty value if everything fails
+#
 
 # It should favor .profile if file exists
-_PROFILE=$(nvm_detect_profile)
-[ "_$_PROFILE" = "_$HOME/.profile" ] || ( echo "_\$_PROFILE: _$_PROFILE" &&
-                                          echo "_\$PROFILE: _$PROFILE" &&
-                                          die "nvm_detect_profile should have selected .profile" )
+NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)"
+if [ "$NVM_DETECT_PROFILE" != "$HOME/.profile" ]; then
+  die "nvm_detect_profile should have selected .profile ($NVM_DETECT_PROFILE) ($SHELL)"
+fi
 
-rm .profile
 # Otherwise, it should favor .bashrc if file exists
-_PROFILE=$(nvm_detect_profile)
-[ "_$_PROFILE" = "_$HOME/.bashrc" ] || ( echo "_\$_PROFILE: _$_PROFILE" &&
-                                         echo "_\$PROFILE: _$PROFILE" &&
-                                         die "nvm_detect_profile should have selected .bashrc" )
+rm ".profile"
+NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)"
+if [ "$NVM_DETECT_PROFILE" != "$HOME/.bashrc" ]; then
+  die "nvm_detect_profile should have selected .bashrc"
+fi
 
-rm .bashrc
 # Otherwise, it should favor .bash_profile if file exists
-_PROFILE=$(nvm_detect_profile)
-[ "_$_PROFILE" = "_$HOME/.bash_profile" ] || ( echo "_\$_PROFILE: _$_PROFILE" &&
-                                               echo "_\$PROFILE: _$PROFILE" &&
-                                               die "nvm_detect_profile should have selected .bash_profile" )
+rm ".bashrc"
+NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)"
+if [ "$NVM_DETECT_PROFILE" != "$HOME/.bash_profile" ]; then
+  die "nvm_detect_profile should have selected .bash_profile"
+fi
 
-rm .bash_profile
 # Otherwise, it should favor .zshrc if file exists
-_PROFILE=$(nvm_detect_profile)
-[ "_$_PROFILE" = "_$HOME/.zshrc" ] || ( echo "_\$_PROFILE: _$_PROFILE" &&
-                                        echo "_\$PROFILE: _$PROFILE" &&
-                                        die "nvm_detect_profile should have selected .zshrc" )
+rm ".bash_profile"
+NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)"
+if [ "$NVM_DETECT_PROFILE" != "$HOME/.zshrc" ]; then
+  die "nvm_detect_profile should have selected .zshrc"
+fi
 
-rm .zshrc
 # It should be empty if none is found
-_PROFILE=$(nvm_detect_profile)
-[ -z "$_PROFILE" ] || ( echo "_\$_PROFILE: _$_PROFILE" &&
-                        echo "_\$PROFILE: _$PROFILE" &&
-                        die "nvm_detect_profile should have echo'ed an empty value" )
-
+rm ".zshrc"
+NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)"
+if [ ! -z "$NVM_DETECT_PROFILE" ]; then
+  die "nvm_detect_profile should have returned an empty value"
+fi
 
 cleanup