|
require 'foreman_maintain'
|
|
require 'minitest/spec'
|
|
require 'minitest/autorun'
|
|
require 'mocha/mini_test'
|
|
require 'stringio'
|
|
require File.dirname(__FILE__) + '/support/minitest_spec_context'
|
|
require File.expand_path('../lib/support/log_reporter', __FILE__)
|
|
|
|
module CliAssertions
|
|
def assert_cmd(expected_output, args = [])
|
|
output = run_cmd(args)
|
|
assert_equal expected_output, remove_colors(simulate_carriage_returns(output))
|
|
end
|
|
|
|
def capture_io_with_stderr
|
|
orig_stdout = $stdout
|
|
orig_stderr = $stderr
|
|
captured_output = StringIO.new
|
|
$stdout = captured_output
|
|
$stderr = captured_output
|
|
|
|
yield
|
|
|
|
return captured_output.string
|
|
ensure
|
|
$stdout = orig_stdout
|
|
$stderr = orig_stderr
|
|
end
|
|
|
|
def run_cmd(args = [])
|
|
capture_io_with_stderr do
|
|
begin
|
|
ForemanMaintain::Cli::MainCommand.run('foreman-maintain', command + args)
|
|
rescue SystemExit # rubocop:disable Lint/HandleExceptions
|
|
# don't accept system exit from running a command
|
|
end
|
|
end
|
|
end
|
|
|
|
def simulate_carriage_returns(output)
|
|
output.gsub(/^.*\r/, '')
|
|
end
|
|
|
|
def remove_colors(output)
|
|
output.gsub(/\e.*?m/, '')
|
|
end
|
|
end
|
|
|
|
module UnitTestHelper
|
|
def described_class
|
|
# Memoization doesn't work on class methods need to think how to cache it per test
|
|
# One option is to use 'let' per test file
|
|
@described_class ||=
|
|
begin
|
|
const_name = self.class.name
|
|
return described_class_ruby_187(const_name) if RUBY_VERSION >= '1.8.7'
|
|
Object.const_get(const_name)
|
|
end
|
|
end
|
|
|
|
def described_class_ruby_187(const_name)
|
|
const_name.split('::').inject(Object) do |mod, class_name|
|
|
mod.const_get(class_name)
|
|
end
|
|
end
|
|
end
|
|
|
|
include UnitTestHelper
|