74 lines
2 KiB
Ruby
74 lines
2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'knapsack'
|
|
require 'rspec/core'
|
|
require 'rspec/expectations'
|
|
|
|
module QA
|
|
module Specs
|
|
class Runner < Scenario::Template
|
|
attr_accessor :tty, :tags, :options
|
|
|
|
DEFAULT_TEST_PATH_ARGS = ['--', File.expand_path('./features', __dir__)].freeze
|
|
|
|
def initialize
|
|
@tty = false
|
|
@tags = []
|
|
@options = []
|
|
end
|
|
|
|
def paths_from_knapsack
|
|
allocator = Knapsack::AllocatorBuilder.new(Knapsack::Adapters::RSpecAdapter).allocator
|
|
|
|
QA::Runtime::Logger.info ''
|
|
QA::Runtime::Logger.info 'Report specs:'
|
|
QA::Runtime::Logger.info allocator.report_node_tests.join(', ')
|
|
QA::Runtime::Logger.info ''
|
|
QA::Runtime::Logger.info 'Leftover specs:'
|
|
QA::Runtime::Logger.info allocator.leftover_node_tests.join(', ')
|
|
QA::Runtime::Logger.info ''
|
|
|
|
['--', allocator.node_tests]
|
|
end
|
|
|
|
def rspec_tags
|
|
tags_for_rspec = []
|
|
|
|
if tags.any?
|
|
tags.each { |tag| tags_for_rspec.push(['--tag', tag.to_s]) }
|
|
else
|
|
tags_for_rspec.push(%w[--tag ~orchestrated]) unless (%w[-t --tag] & options).any?
|
|
end
|
|
|
|
tags_for_rspec.push(%w[--tag ~skip_signup_disabled]) if QA::Runtime::Env.signup_disabled?
|
|
|
|
QA::Runtime::Env.supported_features.each_key do |key|
|
|
tags_for_rspec.push(%W[--tag ~requires_#{key}]) unless QA::Runtime::Env.can_test? key
|
|
end
|
|
|
|
tags_for_rspec
|
|
end
|
|
|
|
def perform
|
|
args = []
|
|
args.push('--tty') if tty
|
|
args.push(rspec_tags)
|
|
args.push(options)
|
|
|
|
if Runtime::Env.knapsack?
|
|
args.push(paths_from_knapsack)
|
|
else
|
|
args.push(DEFAULT_TEST_PATH_ARGS) unless options.any? { |opt| opt =~ %r{/features/} }
|
|
end
|
|
|
|
if Runtime::Scenario.attributes[:parallel]
|
|
ParallelRunner.run(args.flatten)
|
|
else
|
|
RSpec::Core::Runner.run(args.flatten, $stderr, $stdout).tap do |status|
|
|
abort if status.nonzero?
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|