#!/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
}

#Let's hack $HOME
HOME="."

setup

#Let's force $SHELL to be bash
SHELL="/bin/bash"

# $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" )

# 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


#Let's force $SHELL to be zsh
SHELL="/usr/bin/zsh"

# $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" )

# 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

# 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

# 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" )

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 .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 .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 .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" )


cleanup