module CliTester

Constants

VERSION

Public Class Methods

included(example_group) click to toggle source
# File lib/cli_tester.rb, line 24
def self.included(example_group)
  example_group.extend(self)
end

Public Instance Methods

run_command(cmd: nil, args: nil, working_directory: nil) click to toggle source
# File lib/cli_tester.rb, line 32
def run_command(cmd: nil, args: nil, working_directory: nil)
  if cmd
    path = "bin/" + cmd
  else
    path = "bin/" + File.basename(Dir.pwd)
  end
  if !File.exist?(path)
    executable = [cmd]
  else
    executable = [File.expand_path(path)]
  end

  if args
    executable += args
  end

  if working_directory
    current_working_directory = Dir.pwd
    Dir.chdir(working_directory)
  end

  result = CommandResult.new
  result.cmd = executable
  begin
    o, e = Cheetah.run(executable, stdout: :capture, stderr: :capture )
    result.exit_code = 0
    result.stdout = o
    result.stderr = e
  rescue Cheetah::ExecutionFailed => e
    result.error = e
    result.exit_code = e.status.exitstatus
    result.stdout = e.stdout
    result.stderr = e.stderr
  end

  if working_directory
    Dir.chdir(current_working_directory)
  end

  result
end