Migrate completion tests to Cucumber.

Also retire Fish 2.x + macOS test;
installation of custom brew didn't work out anymore.
This commit is contained in:
Raphael Reitzig 2020-05-25 20:17:31 +02:00
parent ed6039e533
commit 0c15f199cd
12 changed files with 364 additions and 236 deletions

View file

@ -0,0 +1,26 @@
# frozen_string_literal: true
require 'open3'
module CompletionHelper
def complete(cmd)
completions = run_fish_command("complete -C\"sdk #{cmd}\"")
completions.split("\n") \
.map { |line| line.split(/\s+/)[0].strip } \
.sort \
.uniq \
.join(', ')
# TODO: Why do we get duplicates in the Docker container?
# --> remove uniq
end
end
World CompletionHelper
When('the user enters {string} into the prompt') do |cmd|
@response = complete(cmd.gsub(/["']/, ''))
end
Then(/^completion should propose "(.*)"$/) do |completions|
expect(@response).to eq(completions)
end

View file

@ -0,0 +1,31 @@
$index_updated = false # TODO: Hack since Cucumber doesn't have Feature-level hooks
Given(/^SDKMAN! candidate list is up to date$/) do
unless $index_updated
run_bash_command('sdk update')
$index_updated = true
end
end
Given(/^candidate (\w+) is installed at version (\d+(?:\.\d+)*)$/) do |candidate, version|
run_bash_command("sdk install #{candidate} #{version}") unless installed?(candidate, version)
end
Given(/^candidate (\w+) is installed$/) do |candidate|
run_bash_command("sdk install #{candidate}") unless installed?(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:
# --> install only if not already installed;
# if the test needs a candidate to _not_ be there, make it explicit.
# --> 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
end
end