#!/usr/bin/env bash

set -o errtrace
base_dir="${PWD##\//\\\/}"
export PS4="+ \${BASH_SOURCE##\${rvm_path:-}} : \${FUNCNAME[0]:+\${FUNCNAME[0]}()}  \${LINENO} > "
if [[ ! -s ./scripts/rvm ]] ; then
  echo "ERROR: This test must be run from within RVM project root."
  exit 1
fi

rubies=(1.8.7 1.9.2 ree rbx)

if [[ "Darwin" = "$(uname)" ]] ; then
  rubies=(${rubies[@]} macruby)
fi

mkdir -p test/log

results=()

gemset_name="test_gemsets_$$"

for ruby in "${rubies[@]}" ; do
  (
    set -o errexit
    # Plan:
    # Ensure gemset test does not exist for the ruby.

    if message=$(rvm gemset use $gemset_name) ; then
      #   -> Ensure failure is returned
      printf "'rvm gemset use' did not return failure when gemset does not exist.\n"
      false
    else
      #   -> Ensure the error message shows.
      case $message in
        *does not exist*)
          true
          ;;
        *)
          printf "'rvm gemset use' did not tell the user 'does not exist'.\n"
          false
          ;;
      esac
    fi

    if message=$(rvm gemset create $gemset_name) ; then
    else
    fi
    #   -> Ensure success is returned
    #   -> Ensure message is returned
    #   -> Ensure gemset $gemset_name directory exists.

    if message=$(rvm gemset use $gemset_name) ; then
    else
    fi
    #   -> Ensure success is returned
    #   -> Ensure message is returned
    #   -> Ensure that GEM_HOME, GEM_PATH are set correctly

    if message=$(rvm gemset delete $gemset_name) ; then
      #   -> Ensure success is returned
      #   -> Ensure message is returned
      case $message in
        *deleted*)
          true
          ;;
        *)
          printf "'rvm gemset use' did not tell the user 'does not exist'.\n"
          false
          ;;
      esac
      true
    else

    fi
    #   -> Ensure gemset dirctory no longer exists

    source "./scripts/rvm"

    rvm install $ruby > test/log/$ruby.log 2>&1
  )
  results=(${results[@]} $?)
done

result=0

for ((index=0 ; index < ${#rubies[@]} ; index++)) ; do
  if [[ ${results[$index]} -gt 0 ]] ; then
    printf "fail : ${rubies[$index]} : install\n"
    result=${rubies[$index]}
  else
    printf "pass : ${rubies[$index]} : install\n"
  fi
done

exit $result
