diff --git a/.travis.yml b/.travis.yml index 8f9305c..cec1ac2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,5 +38,4 @@ install: script: - (cd test && cucumber) # TODO: Migrate these to Cucumber: - - fish -c "sdk install crash 1.3.0; and sdk uninstall crash 1.3.0" > /dev/null && fish test/check_for_path_zombies.fish - bash test/remove_sdkman.sh > /dev/null && fish -c "echo 'y' | sdk" > /dev/null && fish -c "sdk version" diff --git a/test/check_for_path_zombies.fish b/test/check_for_path_zombies.fish deleted file mode 100644 index ff928a6..0000000 --- a/test/check_for_path_zombies.fish +++ /dev/null @@ -1,9 +0,0 @@ -switch "$PATH" -case "*sdkman/candidates/crash/*" - echo "Uninstalled candidate in PATH" - sdk list crash | head -10 - echo $PATH - exit 1 -case "*" - echo "OKAY" -end diff --git a/test/features/corner_cases.feature b/test/features/corner_cases.feature index 4327d06..8a8a443 100644 --- a/test/features/corner_cases.feature +++ b/test/features/corner_cases.feature @@ -11,3 +11,8 @@ Feature: Corner Cases Then environment variable SDKMAN_DIR has the original value # TODO: add test that fails if `test` in conf.d/sdk.fish:80 errors (cf issue #28 et al.) + + Scenario: PATH should contain only valid paths + Given candidate crash is installed + When candidate crash is uninstalled + Then environment variable PATH cannot contain "sdkman/candidates/crash/" diff --git a/test/features/step_definitions/corner_cases.rb b/test/features/step_definitions/corner_cases.rb index 8152faa..198cae4 100644 --- a/test/features/step_definitions/corner_cases.rb +++ b/test/features/step_definitions/corner_cases.rb @@ -43,3 +43,8 @@ Then('environment variable {env_name} has the original value') do |name| expect(@response[:stdout][-1]).to eq(@response[:stdout][0]) # reinitialization effective end + +Then('environment variable {env_name} cannot contain {string}') do |name, value| + env = run_fish_command('echo noop')[:env] + expect(env[name]).to_not match(/#{Regexp.escape(value)}/) +end diff --git a/test/features/step_definitions/setup.rb b/test/features/step_definitions/setup.rb index 0609b47..82b6766 100644 --- a/test/features/step_definitions/setup.rb +++ b/test/features/step_definitions/setup.rb @@ -14,6 +14,22 @@ Given(/^candidate (\w+) is installed$/) do |candidate| run_bash_command("sdk install #{candidate}") unless installed?(candidate) end +def _uninstall_candidate_version(candidate_dir) + %r{/([^/]+)/([^/]+)$}.match(candidate_dir) do |match| + candidate = match[1] + version = match[2] + run_bash_command("sdk rm #{candidate} #{version}") unless version == 'current' + end +end + +When(/^candidate (\w+) is uninstalled$/) do |candidate| + puts `ls ~/.sdkman/candidates/#{candidate}` + Dir["#{ENV['HOME']}/.sdkman/candidates/#{candidate}/*"].each do |candidate_dir| + _uninstall_candidate_version(candidate_dir) + end + puts `ls ~/.sdkman/candidates/#{candidate}` +end + # Uninstall all SDKMAN! candidates # TODO: Run after every scenario, this makes tests very slow. # Currently, Cucumber doesn't have Feature-level hooks, so we have to work around: @@ -22,10 +38,6 @@ end # --> clean up after _all_ features at least at_exit do Dir["#{ENV['HOME']}/.sdkman/candidates/*/*"].each do |candidate_dir| - %r{/([^/]+)/([^/]+)$}.match(candidate_dir) do |match| - candidate = match[1] - version = match[2] - run_bash_command("sdk rm #{candidate} #{version}") unless version == 'current' - end + _uninstall_candidate_version(candidate_dir) end end