From 0a948c81c1ac35adad5621b1ccc1dedea7500bfe Mon Sep 17 00:00:00 2001 From: Raphael Reitzig <4246780+reitzig@users.noreply.github.com> Date: Tue, 26 May 2020 04:22:01 +0200 Subject: [PATCH] Migrate reinitialization test to Cucumber. --- .travis.yml | 1 - test/features/corner_cases.feature | 13 ++++++ .../features/step_definitions/corner_cases.rb | 45 +++++++++++++++++++ test/features/support/helpers.rb | 4 +- test/features/support/parameter_types.rb | 7 +++ test/reinitialize.fish | 27 ----------- 6 files changed, 67 insertions(+), 30 deletions(-) create mode 100644 test/features/corner_cases.feature create mode 100644 test/features/step_definitions/corner_cases.rb delete mode 100755 test/reinitialize.fish diff --git a/.travis.yml b/.travis.yml index dda17be..8f9305c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,6 +38,5 @@ install: script: - (cd test && cucumber) # TODO: Migrate these to Cucumber: - - fish test/reinitialize.fish - 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/features/corner_cases.feature b/test/features/corner_cases.feature new file mode 100644 index 0000000..4327d06 --- /dev/null +++ b/test/features/corner_cases.feature @@ -0,0 +1,13 @@ +Feature: Corner Cases + + Scenario: SDKMAN_DIR unset + Given environment variable SDKMAN_DIR is not set + When a new Fish shell is launched + Then environment variable SDKMAN_DIR has the original value + + Scenario: SDKMAN_DIR set to a location the current user can't write at + Given environment variable SDKMAN_DIR is set to "/" + When a new Fish shell is launched + 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.) diff --git a/test/features/step_definitions/corner_cases.rb b/test/features/step_definitions/corner_cases.rb new file mode 100644 index 0000000..8152faa --- /dev/null +++ b/test/features/step_definitions/corner_cases.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +Given('environment variable {env_name} is not set') do |name| + @name = name + @expect_intermediate_value = false + @command = <<~BASH + ( \\ + env | grep -E "^#{name}="; \\ + export -n #{name}; \\ + env | grep -E "^#{name}="; \\ + BASH +end + +Given('environment variable {env_name} is set to {string}') do |name, new_value| + @name = name + @expect_intermediate_value = true + @command = <<~BASH + ( \\ + env | grep -E "^#{name}="; \\ + export #{name}=#{new_value}; \\ + env | grep -E "^#{name}="; \\ + BASH +end + +When('a new Fish shell is launched') do + @command += <<~BASH + fish -lc "env | grep -E \\"^#{@name}=\\"" \\ + ) \\ + BASH + + @response = run_bash_command(@command) +end + +Then('environment variable {env_name} has the original value') do |name| + expect(name).to eq(@name) # otherwise the test doesn't make sense + + if @expect_intermediate_value + expect(@response[:stdout].count).to eq(3) + expect(@response[:stdout][0]).to_not eq(@response[:stdout][1]) # destruction effective + else + expect(@response[:stdout].count).to eq(2) + end + + expect(@response[:stdout][-1]).to eq(@response[:stdout][0]) # reinitialization effective +end diff --git a/test/features/support/helpers.rb b/test/features/support/helpers.rb index ae57b3c..ba1ce4e 100644 --- a/test/features/support/helpers.rb +++ b/test/features/support/helpers.rb @@ -48,7 +48,7 @@ def run_bash_command(cmd) status: File.read(files[:status]).to_i, stdout: File.readlines(files[:stdout]), stderr: File.readlines(files[:stderr]), - env: File.readlines(files[:env]) + env: File.readlines(files[:env]).map { |l| l.strip.split('=', 2) }.to_h } end end @@ -83,7 +83,7 @@ def run_fish_command(cmd) status: File.read(files[:status]).to_i, stdout: File.readlines(files[:stdout]), stderr: File.readlines(files[:stderr]), - env: File.readlines(files[:env]) + env: File.readlines(files[:env]).map { |l| l.strip.split('=', 2) }.to_h } end end diff --git a/test/features/support/parameter_types.rb b/test/features/support/parameter_types.rb index 27db9af..492bdde 100644 --- a/test/features/support/parameter_types.rb +++ b/test/features/support/parameter_types.rb @@ -20,6 +20,13 @@ ParameterType( end ) +ParameterType( + name: 'env_name', + regexp: /[A-Z_]+/, + type: String, + transformer: ->(s) { s } +) + ParameterType( name: 'env_glob', regexp: /[A-Z_*]+/, diff --git a/test/reinitialize.fish b/test/reinitialize.fish deleted file mode 100755 index 564e74b..0000000 --- a/test/reinitialize.fish +++ /dev/null @@ -1,27 +0,0 @@ -# If either of -# - $SDKMAN_DIR is unset -# - $SDKMAN_DIR points to a directory not owned by the current user -# is true, sdkman-for-fish should run sdkman's init script. - -# Assumes sdkman-for-fish is installed -set proper_value "$SDKMAN_DIR" - -begin - set -e SDKMAN_DIR - set in_new_shell (fish -lc 'echo $SDKMAN_DIR') - if [ "$in_new_shell" != "$proper_value" ] - echo "SDKMAN_DIR initialized to $in_new_shell instead of $proper_value" - exit 1 - end -end - -begin - set -x SDKMAN_DIR "/" # belongs to root, who hopefully doesn't run this - set in_new_shell (fish -lc 'echo $SDKMAN_DIR') - if [ "$in_new_shell" != "$proper_value" ] - echo "SDKMAN_DIR reinitialized to $in_new_shell instead of $proper_value" - exit 1 - end -end - -# TODO: add test that fails if `test` in conf.d/sdk.fish:80 errors (cf issue #28 et al.)