#!/usr/bin/env bash

source ./test/setup
initialize_rvm

# tests: 29
# assertions: 290

original_dir=$PWD

gem build rvm.gemspec > /dev/null
filename=$(find . -maxdepth 1 -mindepth 1 -type f -iname 'rvm*.gem' | head -n 1)
filename="${filename//.\/}"

setup_testset() { rvm 1.9.1 ; }
remove_gemset_files() { \rm *.gems ; }

test_reset() { unset GEM_HOME ; __rvm_cleanse_variables ; }

#
# As a user 'rvm gemset create tesset' should make my gem env gemdir be exactly the ${rvm_gemset_separator:-"@"}testset$ directory.
#
setup_testset
heat "rvm gemset create testset ; gemdir=\$(gem env gemdir)"
assert match "ruby\/1.9.1${rvm_gemset_separator:-"@"}testset$" "$gemdir"
test_reset

#
# As a user after selecting a gemset named 'testset' 'rvm gemset name' should output the string "testset"
#
setup_testset
heat "rvm gemset use testset ; gems=\$(rvm gemset name)"
assert string_eq "testset" "$gems"
test_reset

setup_testset
heat "rvm gemset use testset; gems_dir=\$(rvm gemset dir)"
assert match "1.9.1${rvm_gemset_separator:-"@"}testset$" "$gems_dir"
test_reset

heat "rvm gemset dump testset ; gem install --no-rdoc --no-ri $filename > /dev/null ; rvm gemset dump"
assert file_exists "testset"
assert file_contains "^rvm" "testset"
test_reset ; rvm gemset --force delete "testset" ; rm testset; remove_gemset_files

heat "rvm gemset dump testset ; gem install --no-rdoc --no-ri $filename > /dev/null ; rvm gemset dump my_testset.gems"
assert no_directory "${rvm_gems_path:-"$rvm_path/gems"}/ruby/1.9.1${rvm_gemset_separator:-"@"}my_testset"
assert file_exists "my_testset.gems"
assert file_contains "^rvm" "my_testset.gems"
test_reset ; rvm gemset --force delete "testset" ; rvm gemset --force delete "my_testset" ; remove_gemset_files

heat "rvm gemset testset ; gem install --no-rdoc --no-ri $filename > /dev/null ; rvm gemset dump my_testset.gems"
assert no_directory "${rvm_gems_path:-"$rvm_path/gems"}/ruby/1.9.1${rvm_gemset_separator:-"@"}my_testset"
assert file_exists "my_testset"
assert file_does_not_exist "testset"
assert file_does_not_contain "^rvm" "my_testset.gems"
test_reset ; rvm gemset --force delete "testset" ; rvm gemset --force delete "my_testset" ; remove_gemset_files

heat "rvm gemset testset ; gem install --no-rdoc --no-ri $filename > /dev/null ; rvm gemset dump my_testset2.gems"
assert file_exists "my_testset2.gems"
assert file_contains "^rvm" "my_testset2.gems"
test_reset ; rvm gemset --force delete "my_testset2"; remove_gemset_files

rvm gemset testset ; gem_dir="$(gem env gemdir)" ; \mkdir -p $gem_dir
heat "rvm gemset testset ; gem install --no-rdoc --no-ri $filename > /dev/null ; rvm --force gemset delete testset"
assert no_directory $gem_dir
test_reset ; rvm gemset --force delete "testset"

heat "rvm gemset testset4 ; echo '$filename' > testset4.gems ; rvm gemset load  > /dev/null"
assert match "rvm" "$(rvm gemset testset4 ; gem list | \tr "\n" ",")"
test_reset ; rvm gemset --force delete "testset4"

heat "rvm gemset testset5 ; echo '$filename' > my_testset5.gems ; rvm gemset load my_testset5.gems > /dev/null"
assert no_directory "${rvm_gems_path:-"$rvm_path/gems"}/ruby/1.9.1${rvm_gemset_separator:-"@"}my_testset5"
assert match "rvm" "$(rvm gemset testset5 ; gem list | \tr "\n" ",")"
test_reset ; rvm gemset --force delete "testset5" ; remove_gemset_files

heat "rvm gemset testset6 ; rvm gemset testset7"
assert match "testset6" "$(rvm gemset list | \tr "\n" ", ")"
assert match "testset7" "$(rvm gemset list | \tr "\n" ", ")"
test_reset ; rvm gemset --force delete "testset6" ; rvm gemset --force delete "testset7"

rvm_ruby_string='1.9.1${rvm_gemset_separator:-"@"}testset8'      ; valid_string="ruby-1.9.1-p243"    ; heat "rvm_ruby_string=$rvm_ruby_string ; __rvm_select"
assert match "ruby\/1.9.1${rvm_gemset_separator:-"@"}testset8$" "$rvm_ruby_gem_home"
test_reset ; rvm gemset --force delete "testset8"

rvm_ruby_string='ruby-1.9.1${rvm_gemset_separator:-"@"}testset9' ; valid_string="ruby-1.9.1-p243"    ; heat "rvm_ruby_string=$rvm_ruby_string ; __rvm_select"
assert match "ruby\/1.9.1${rvm_gemset_separator:-"@"}testset9$" "$rvm_ruby_gem_home"
test_reset ; rvm gemset --force delete "testset9"

rvm_ruby_string='ruby-1.9.1-p243${rvm_gemset_separator:-"@"}testset10' ; valid_string="ruby-1.9.1-p243"    ; heat "rvm_ruby_string=$rvm_ruby_string ; __rvm_select"
assert match "ruby\/1.9.1${rvm_gemset_separator:-"@"}testset10$" "$rvm_ruby_gem_home"
test_reset ; rvm gemset --force delete "testset10"

setup_testset
heat "rvm 1.9.1${rvm_gemset_separator:-"@"}testset11 ; gemdir=\$(gem env gemdir)"
assert match "ruby\/1.9.1${rvm_gemset_separator:-"@"}testset11$" "$gemdir"
test_reset ; rvm gemset --force delete "testset11"

rvm 1.9.1 ; rvm gemset testset12 ; gem install --no-rdoc --no-ri $filename > /dev/null
rvm ree ; rvm gemset testset13 ; gem install --no-rdoc --no-ri $filename > /dev/null
heat "output=\"\$(rvm 1.9.1${rvm_gemset_separator:-"@"}testset12,ree${rvm_gemset_separator:-"@"}testset13 gem list)\""
assert match "ruby-1\.9\.1-p243.*rvm" "$(echo "$output" | \tr "\n" ", ")"
assert match "ree-1\..*rvm" "$(echo "$output" | \tr "\n" ", ")"
test_reset ; rvm gemset --force delete testset12 ; rvm gemset --force delete testset13

heat "rvm gemset testset14; output=\"\$(rvm 1.9.1,ree gem env gemdir)\""
assert match "ruby/1.9.1${rvm_gemset_separator:-"@"}testset14" "$(echo "$output" |  \tr "\n" ", ")"
assert match "ree/1.8.7${rvm_gemset_separator:-"@"}testset14" "$(echo "$output" |  \tr "\n" ", ")"
test_reset ; rvm 1.9.1,ree gemset --force delete testset14

heat "rvm 1.9.1${rvm_gemset_separator:-"@"}testset15 ; rvm gemset clear ; gemdir=\$(gem env gemdir)"
assert no_match "${rvm_gemset_separator:-"@"}testset15$" "$gemdir"
test_reset ; rvm gemset --force delete testset15

heat "rvm 1.9.1${rvm_gemset_separator:-"@"}testset16 ; new_path=\$PATH"
assert match "${rvm_gemset_separator:-"@"}testset16" "$new_path"
test_reset ; rvm gemset --force delete testset16

heat "rvm 1.9.1${rvm_gemset_separator:-"@"}testset17 ; rvm gemset clear ; new_path=\$PATH"
assert no_match "${rvm_gemset_separator:-"@"}testset17" "$new_path"
test_reset ; rvm gemset --force delete testset17

# TODO: Honor full path to a gem file.
rvm 1.9.1 ; rvm gemset testset18 ; echo "$PWD/$(find . -maxdepth 1 -mindepth 1 -type d -iname 'rvm-*.gem' | head -n 1 | sed -e 's#./##g')" > testset18.gems
heat "rvm 1.9.1${rvm_gemset_separator:-"@"}testset18 ; gem_list=\$(gem list)"
assert no_match "rvm" "$gem_list"
test_reset ; rvm gemset --force delete testset18

# TODO: Check for gems/*.gem, gems/cache/*.gem and vendor/gems/cache/*.gem

for gemset in ./test*.gems ; do
  rm -f *.gems
done

if [[ -z "$rvm_teset_suite_flag" ]] ; then btu_summary ; fi

