1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
require 'rubygems'
require 'stringio'
# This basically replicates the behavior of `require 'commander/import'`
# but without adding an `at_exit` hook, which interferes with exit code
require 'commander'
require 'commander/methods'
# Mock terminal IO streams so we can spec against them
def mock_terminal
@input = StringIO.new
@output = StringIO.new
$terminal = HighLine.new @input, @output
end
# Create test command for usage within several specs
def create_test_command
command :test do |c|
c.syntax = 'test [options] <file>'
c.description = 'test description'
c.example 'description', 'command'
c.example 'description 2', 'command 2'
c.option '-v', '--verbose', 'verbose description'
c.when_called do |args, _options|
format('test %s', args.join)
end
end
@command = command :test
end
# Create a new command runner
def new_command_runner(*args, &block)
Commander::Runner.instance_variable_set :"@singleton", Commander::Runner.new(args)
program :name, 'test'
program :version, '1.2.3'
program :description, 'something'
create_test_command
yield if block
Commander::Runner.instance
end
# Comply with how specs were previously written
def command_runner
Commander::Runner.instance
end
def run(*args)
new_command_runner(*args) do
program :help_formatter, Commander::HelpFormatter::Base
end.run!
@output.string
end
RSpec.configure do |c|
c.expect_with(:rspec) do |e|
e.syntax = :expect
end
c.mock_with(:rspec) do |m|
m.syntax = :expect
end
c.before(:each) do
allow(Commander::UI).to receive(:enable_paging)
end
end
|